Pokémon Card Holo Patterns by Era, English and Japanese

This post has not been translated yet, so you are reading the English original. Read it at the English URL

A Pokémon card’s holo pattern dates it to a series, and the era names collectors use for the patterns are their own, not an official scheme of the publisher’s. Bulbapedia, the fan wiki that records them, names seven default English patterns: Starlight on Base Set, Jungle and Fossil (from January 9, 1999), Cosmos from Base Set 2 (February 24, 2000) to Call of Legends (February 9, 2011), then one per series, each changing at the series boundary: Tinsel from Black & White (April 25, 2011), Sheen from XY (February 5, 2014), Water Web from Sun & Moon (February 3, 2017), Line from Sword & Shield (February 7, 2020) and Mirage from Scarlet & Violet (March 31, 2023); the pages I read name none for Mega Evolution (September 26, 2025).123 Of the names for a foil, only four appear on The Pokémon Company’s own pages that I read: キラ (kira) for a holo card, ミラー (mirror) for extra mirror printings (ball-patterned from 151, 2023), “parallel” for the English patterned ones, and “cosmos foil” on a prize page.4 Japanese holos differ at the border in three of those eras, and Japan made every booster Rare a holo 12.28 years before English cards did.125 The catalog behind our app, Kiradex, does not say which cards from 2011 to 2019 were holo: in TCGdex’s files at its September 30, 2026 commit, 1,417 of the 1,437 Black & White-era cards in our index, all 1,819 XY-era cards, all 113 Evolutions cards and 2,495 of the 2,917 Sun & Moon-era cards carry no printing data at all, which is missing data, not a count of non-holo cards; the app draws no holo art window on any XY card today.67 This is the era-by-era guide in both languages, sourced and dated, the measured state of the catalog and the app, and the brief that gives each era its own procedural foil.

TL;DR

  • Seven defaults in a quarter century, and the long one came second. By Bulbapedia’s account, Cosmos was the default holo for 10.96 years, from Base Set 2 (February 24, 2000) to Call of Legends (February 9, 2011); Tinsel, Sheen, Water Web and Line each ran 2.78 to 3.14 years, opening set to the next era’s opening set, and closed with its series; Mirage ran 2.49 years to Mega Evolution’s opening, whose default no source I read names.185
  • Read the stripes. In Bulbapedia’s descriptions, Black & White holos carry “horizontal stripes across the image”; XY’s Sheen runs diagonally, bottom right to top left over the art on international cards and bottom left to top right over the whole card in Japan; Sword & Shield’s Line is “thin vertical lines”; Scarlet & Violet’s Mirage is like Sheen but horizontal, with “Holofoil silver borders” on standard holos.12
  • A foiled border is the Japanese tell. Bulbapedia records the pattern on the border of Japanese holos in the Black & White, Sun & Moon and Sword & Shield eras, where English standard holos kept plain borders; Japan made every booster Rare a holo from Black Collection and White Collection (December 17, 2010), 4,487 days before English cards with Scarlet & Violet.125
  • A reverse holo is a mask before it is a pattern. From Legendary Collection (May 24, 2002), one card per pack carries foil everywhere but the art, apart from EX Hidden Legends to EX Power Keepers, when the foil sat in the art behind the Pokémon (EX Dragon Frontiers put it on the Pokémon); Scarlet & Violet made it two. Bulbapedia’s list gives 20 top-level treatments and 5 sub-entries, from “fireworks” to type-symbol tiles; what stays is where the foil is not.143
  • Four names are the company’s; the rest are collectors’. キラ (kira), ミラー (mirror), “parallel” and “cosmos foil” are on pages of The Pokémon Company or its international arm; Starlight, Tinsel, Sheen, Water Web, Line, Mirage, Cracked Ice and the others are not, on any company page read, and “galaxy” means Cosmos to Bulbapedia and mostly Fossil to the catalog (123 of its 131 galaxy variants).485
  • The catalog mostly names special foils, not ordinary ones. TCGdex names a foil on 1,396 of Kiradex’s 21,256 English index cards (6.6%) and 626 of 12,781 Japanese (4.9%). By my classing of the English 1,396: 163 are on promo sets; 761 are main-set cards with a pattern, motif or prize foil, led by pokeball (302 cards), cosmos (271) and masterball (211); 283 are cards the catalog rates Secret Rare, Hyper rare or Mega Hyper Rare, named only rainbow or gold; 130 are EX Hidden Legends and EX FireRed & LeafGreen cards named only energy, 128 of them on a reverse variant, which on my reading is those sets’ ordinary energy-symbol reverse; and 59 are Fossil cards named only galaxy. Of 6,094 English cards with a holo variant, 5,345 (87.7%) have no foil named on it.95
  • From 2011 to 2019 the catalog is mostly silent. For 6,085 of the 21,256 English index cards (28.6%), the TCGdex file carries no printing data at all, and the API then answers “normal only”; 5,844 of them are Black & White, XY, Evolutions or Sun & Moon-era cards, 93.0% of those eras’ 6,286. That is missing data, not proof a card was not holo.6105
  • What this gives Kiradex. A brief, not a shipped feature: keep today’s foil masks, add a procedural pattern resolved in one order (the copy’s recorded finish, then the catalog’s named foil, then the etched mask, then the set-and-language era default), say “finish not in the catalog” where the catalog is silent, and pass each card’s own foil to the town’s stages, which today draw every card with the same art-window holo.111213

1. The English default holo, era by era

A holofoil card, in Bulbapedia’s definition, has “a shiny, light-scattering holofoil effect on the card’s artwork or background”; when the foil is in the background, collectors call the card a reverse holo, which Section 3 takes up.1 This section is the default pattern, the one a set’s ordinary holo rares carried. Most of it rests on two pages of Bulbapedia, a fan wiki published under a Creative Commons license: its Holofoil page, which lists “Holofoil Patterns” under eleven headings, and the holofoil paragraph of its Rarity (TCG) page.124 Seven of the eleven headings are defaults; the other four (Cracked Ice, Crosshatch, Sequin and Pixel) are special printings, covered in Section 4.1 Every pattern name below is a collector term recorded by that wiki, not a name the publisher prints, and I say so at first use of each; Section 5 shows the measurement behind that label. Release dates are the opening and closing sets’ dates in Bulbapedia’s English expansion list, as parsed by a script.3

A timeline from 1999 to 2026 of the English default holofoil eras as Bulbapedia names them, each with a plain geometric swatch: four-point stars for Starlight from Base Set (1999-01-09), dots with rings for Cosmos from Base Set 2 (2000-02-24), horizontal lines for Tinsel from Black & White (2011-04-25), a diagonal band leaning from bottom right to top left for Sheen from XY (2014-02-05), wavy lines for Water Web from Sun & Moon (2017-02-03), fine vertical lines for Line from Sword & Shield (2020-02-07), a horizontal band for Mirage from Scarlet & Violet (2023-03-31), and a question mark for Mega Evolution (2025-09-26). Each era's first set and date sit under its own column. A dashed mark in July 2025 shows where Bulbapedia's Rarity page reports Tinsel in Black Bolt and White Flare, a report the set's own page disputes. A second row pairs each Japanese opening set with the English one, 129, 54, 56, 63 and 70 days apart.

The English default eras by Bulbapedia’s names, with the Japanese opening set of each; the swatches are schematic shapes drawn by script, not card foil.14

Era (collector term, per Bulbapedia) Opens Closes How Bulbapedia describes it
Starlight Base Set, January 9, 1999 Fossil, October 10, 1999 “starbursts of different sizes spread across the image, with a slightly blurry appearance”
Cosmos Base Set 2, February 24, 2000 Call of Legends, February 9, 2011 “dots and circles of different sizes”, and on the Rarity page “the occasional swirl”
Tinsel Black & White, April 25, 2011 Legendary Treasures, November 6, 2013 “horizontal stripes across the image”
Sheen XY, February 5, 2014 Steam Siege, August 3, 2016 a diagonal sheen; on international cards over the image only, “from bottom right to top left”
(Starlight-like) Evolutions, November 2, 2016 one set “larger and less blurry stars”
Water Web Sun & Moon, February 3, 2017 Cosmic Eclipse, November 1, 2019 “a wavy pattern similar to flowing water”
Line Sword & Shield, February 7, 2020 Crown Zenith, January 20, 2023 “thin vertical lines that refract light from the top to the bottom of the Pokémon’s image”
Mirage Scarlet & Violet, March 31, 2023 not closed in the pages read like Sheen, but it “refracts light horizontally rather than diagonally”
none named Mega Evolution, September 26, 2025 the pages read name no default pattern

Sources for the table: the Holofoil page for the names and descriptions, the Rarity page for Sheen’s last set, Evolutions and Cosmos’s swirl, and the parsed expansion list for every date.123

Starlight, 1999

Starlight (a collector term recorded by Bulbapedia) “was the pattern used for Holo cards in the Base, Jungle, and Fossil sets,” and its look is “starbursts of different sizes spread across the image, with a slightly blurry appearance.”1 The Rarity page words the same pattern as “different sized stars” with “a slightly blurry appearance.”2 The three sets opened on January 9, June 16 and October 10, 1999.3 In those sets a Rare could be a holo or not: in older expansions, Bulbapedia says, Holofoil Rare cards “may be pulled from booster packs as the Rare card, but are not guaranteed.”1

Cosmos, 2000 to 2011

Cosmos (Bulbapedia’s name; it is also the one pattern name a company page uses, Section 5) “was introduced for all Holo cards in Base Set 2 and was used for all Holo cards until Call of Legends,” and “consists of dots and circles of different sizes spread across the image of the Pokémon.”1 Bulbapedia’s page for Base Set 2 is plain about the start: it “was the first English expansion to use the Cosmos Holofoil.”15 Its Cosmos page dates the end to “the start of the Black & White Series in April 2011” and adds that Cosmos is “often referred to as Galaxy Holofoil”, a second name that causes trouble in Section 5.8 The Rarity page hedges the span: “Most sets from Base Set 2 to Call of Legends used” it.2 One exception is on the Holofoil page itself: in EX Delta Species, holo rares of δ Delta Species Pokémon had “the card border and Pokémon itself featuring a plain Holofoil treatment.”1

From the opening set to the next era’s opening set, Cosmos lasted 4,078 days, or 11.16 years; from Base Set 2 to Call of Legends, its own first and last sets, 10.96 years.5 It spans the Wizards of the Coast sets and the first Nintendo-published ones alike, so the name of the company on the card does not change the default pattern. After 2011, on Bulbapedia’s account, “it became a common Holofoil pattern used for promotional cards” (Section 4).8

Tinsel, 2011 to 2013

Tinsel (collector term, per Bulbapedia) “was used on standard Holo cards between Black & White until Legendary Treasures,” and “consists of horizontal stripes across the image.”1 Black & White opened on April 25, 2011 and Legendary Treasures on November 6, 2013.3 The Rarity page adds a return I did not expect: “Tinsel Holofoil returned as a once-off in Black Bolt and White Flare,” the 2025 split set, “with holofoil rare cards in these sets also having Tinsel Holofoil borders.”2 Two other records read narrower. Bulbapedia’s own page for Black Bolt and White Flare lists Tinsel on three cards only, numbered 001, 011 and 021, each a “Tinsel Holo Black Bolt & White Flare Poster Collection exclusive.”16 TCGdex files exactly those three holo variants under tinsel (sv10.5b 001, sv10.5w 011 and 021).5 Whether the sets’ ordinary holo rares carry Tinsel, as the Rarity page says, or only a product’s three promos do, as the set page lists, the sources I have do not settle; I did not look at a card. pokemon.com dated the sets’ English launch July 18, 2025.17

Sheen, 2014 to 2016

Sheen (collector term, per Bulbapedia) “is used for all Holo cards from XY, and on various promotional cards.” The Holofoil page says the pattern differs by language: Japanese holos “refract light in a diagonal direction from bottom left to top right across the entire card”; Korean ones have “the same effect and direction, but only cover the image of the Pokémon”; and international releases have the same effect but “only cover the image, and the direction is from bottom right to top left.”1 The Rarity page bounds the era “From XY to Steam Siege” under the same name.2 XY opened on February 5, 2014 and Steam Siege on August 3, 2016.3

Evolutions, 2016: Starlight’s look, once

Evolutions (November 2, 2016), the set Bulbapedia calls the “twentieth anniversary set,” used what the Rarity page calls a “very similar holofoil pattern with larger and less blurry stars,” set against the “slightly blurry appearance” it gives Starlight on Base Set, Jungle and Fossil.23 On the wiki’s account it is a one-set echo, not an era.

Water Web, 2017 to 2019

Water Web (collector term, per Bulbapedia; the Rarity page spells it “Water-Web”) “is the standard Holofoil pattern used for cards from Sun & Moon expansion to Cosmic Eclipse,” and “consists of a wavy pattern similar to flowing water.”12 Bulbapedia’s Sun & Moon page records the change in one line: “The Sheen Holofoil was changed to Water Web Holofoil.”18 Sun & Moon opened on February 3, 2017 and Cosmic Eclipse on November 1, 2019.3

Line, 2020 to 2023

Line (collector term; Bulbapedia’s Holofoil page names it and cites the fansite PokéBeach for it) “was used for standard Holo cards from Sword & Shield through Crown Zenith,” and “consists of thin vertical lines that refract light from the top to the bottom of the Pokémon’s image.”1 PokéBeach’s January 2020 report, the source the wiki cites, called it “a vertical ‘line’ pattern like in Japan.”19 The Rarity page describes the same thin vertical stripes without a name.2 Sword & Shield opened on February 7, 2020 and Crown Zenith on January 20, 2023; English holos in this era “retained their yellow borders.”31

Mirage, from 2023

Mirage (collector term, per Bulbapedia) “was introduced with the Scarlet & Violet Series. It is visually similar to the Sheen Holofoil used during the XY Series, but refracts light horizontally rather than diagonally. Standard Holo cards also have Holofoil silver borders.”1 The wiki adds a caution any collector who has tried to photograph one will recognize: “The effect can be difficult to see clearly in photographs because its appearance depends on reflected light.”1 Scarlet & Violet opened on March 31, 2023.3 The set also changed what a Rare is: from that set, the Rarity page says, “all Rare cards included in booster packs are guaranteed to be Holofoil Rares.”2 Bulbapedia’s Scarlet & Violet page quotes the announcement that yellow borders “will become gray to match the cards released in Japan,” and that packs “will now contain a guaranteed three Holofoil cards instead of only two.”20

Mega Evolution, from 2025: not named

Neither the Holofoil page nor Bulbapedia’s Mega Evolution set page names a default holo pattern for the Mega Evolution series, which opened on September 26, 2025.1213 What the set page does say is that Mega Evolution “reintroduces Mirror Holofoil variants of cards, last seen during the Black & White Series,” and the Holofoil page says its reverse holos return “to featuring the plain holographic background.”211 As of October 5, 2026, I have no source for the Mega Evolution default, and I have not written one in.

What a reader can take from the dates

Each default after Cosmos opened with a series, and Tinsel, Sheen, Water Web and Line each closed with theirs. From each opening set to the next era’s opening set: Tinsel 2.78 years, Sheen 3.00, Water Web 3.01, Line 3.14.5 Mirage has not closed in the pages read: it ran 2.49 years to Mega Evolution’s opening, whose default no source I read names.521 So a collector who knows a card’s series knows, on Bulbapedia’s account, its default holo, with two exceptions it records: Evolutions, which went back to stars, and Black Bolt and White Flare, where the Rarity page records Tinsel’s return (with the doubt set out above).216 The direction of the shine sorts most of them without the series: horizontal stripes for Tinsel, a diagonal band for Sheen, fine vertical lines for Line, a broad horizontal band and a silver border for Mirage.12

Mechanics that brought their own foil

Several card mechanics carried a finish of their own, not the era’s default. These are the Rarity page’s descriptions, in its words:2

Mechanic First set (Bulbapedia) Foil, as the Rarity page describes it
Pokémon-ex EX Ruby & Sapphire (July 18, 2003) “a cosmos holofoil effect in the image as well as on the border of the card”
Pokémon Star EX Team Rocket Returns “Golden tinges and holographic shadows are added to various parts of the card”
Pokémon LV.X Diamond & Pearl “holofoil borders from Pokémon ex”
Pokémon LEGEND HeartGold & SoulSilver “The entire card is holofoil”
Pokémon BREAK BREAKthrough “golden Pokémon on holofoil backgrounds with a square pattern”
Radiant Pokémon Astral Radiance “a special holofoil layer”

EX Ruby & Sapphire’s date is from the parsed expansion list.3 Two older secret cards follow the same logic. Crystal Pokémon, in the e-Card sets, “had the cosmos holofoil treatment,” and the Shining Pokémon of Neo Destiny have “a reflective foil treatment on the Pokémon itself”; of the 2017 Shining Legends cards Bulbapedia’s Shining Pokémon page says, “Their holographic pattern is similar to the ones released in Neo Destiny.”222

2. The same eras in Japan

Japanese sets open each era first, and Bulbapedia records a Japanese difference in the default holo in four of the seven English eras. The dates are the opening Japanese sets in Bulbapedia’s Japanese expansion list, parsed by the same script; the day counts are mine.35

Era (collector term) Japanese opening set, date English opening set, days later Difference Bulbapedia records
Tinsel Black Collection / White Collection, December 17, 2010 Black & White, 129 days “the border of the card also has a tinsel Holofoil effect”; from these sets every booster Rare is holo
Sheen Collection X / Collection Y, December 13, 2013 XY, 54 days the sheen covers “the entire card” and runs “from bottom left to top right” (Korean: same direction, image only)
Water Web Collection Sun / Collection Moon, December 9, 2016 Sun & Moon, 56 days “only the Japanese releases cover the border with the pattern”
Line Sword / Shield, December 6, 2019 Sword & Shield, 63 days “Japanese cards using the pattern also have Holofoil borders” while English kept yellow ones
Mirage Scarlet ex / Violet ex, January 20, 2023 Scarlet & Violet, 70 days none named; English borders turned gray “to match the cards released in Japan”

Sources: the Holofoil and Rarity pages for the differences, Bulbapedia’s Scarlet & Violet page for the gray borders, the parsed lists for the dates.12203

The border is the tell

Three times the difference is the border. In the Black & White era, “In Japanese Holofoil cards of these sets, the border of the card also has a tinsel Holofoil effect.”1 In Sun & Moon to Cosmic Eclipse, Water Web cards “refract light in a wave-like pattern in all releases. However, only the Japanese releases cover the border with the pattern.”2 In Sword & Shield to Crown Zenith, “Japanese cards using the pattern also have Holofoil borders, while international releases retained their yellow borders.”1 PokéBeach put the Sword & Shield case plainly in January 2020: “In Japan, the holofoil is exposed on the borders.”19 Bulbapedia’s Black & White page adds the base color under that foil: from Black & White, English borders were yellow, “while Japanese prints were changed to gray.”23

The XY difference is direction and coverage instead: Japanese Sheen holos cover “the entire card” and run “from bottom left to top right,” the reverse of the international direction, and Korean holos share the Japanese direction but cover only the image.1 On my reading, a holo whose shine runs across its border and its text box, bottom left to top right, is a Japanese XY-era card; I have not checked that against a card.

In the Scarlet & Violet era the border stops being a tell, because English holo rares gained a foil border too: the Rarity page says “Holofoil rare cards now also have holofoil silver borders.”2 A PokéBeach report of December 2022, which I treat as a lead, said of the Scarlet & Violet foils: “In the past, some Japanese cards have used a glittery layer on top of the foil. We’re finally getting that overlay effect overseas.”24

Every Rare a holo, twelve years apart

In Japan, Bulbapedia says, Black Collection and White Collection “restructured card rarity,” and Rare cards “are now always holofoil when pulled from a booster pack”; the change “was implemented internationally in the Scarlet & Violet expansion over 12 years later.”1 Measured between the opening sets, it is 4,487 days, or 12.28 years.5 The Rarity page describes what that ended in English: a guaranteed Rare that “could be a ‘non-holo Rare’” with “the black star rarity symbol but lacking any holofoil treatment.”2 My rarity post reads the same change from the symbol’s side.25

What Japan calls a holo: キラ

The Pokémon Company’s Japanese pages call a holo card キラ (kira). Its 2015 article for the XY expansion Bandit Ring, released June 20, 2015, spells out its rarity ladder with the word: “URはウルトラレア(キラ)、SRはスーパーレア(キラ)、RRはダブルレア(キラ)、Rはレア(キラ)、Uはアンコモン、Cはコモン” (in my translation: UR is Ultra Rare, kira; SR Super Rare, kira; RR Double Rare, kira; R Rare, kira; U Uncommon; C Common).26 The word is still on product pages: the Sword and Shield page of 2019 offers “プレミアムキラ” (premium kira) promos for buying two boxes, and VMAX Climax, released December 3, 2021, promises “基本エネルギーカード(キラ)” (a basic Energy card, kira) in every pack.2728 The Black Bolt and White Flare card file set of June 6, 2025 lists its promo as “(キラ)…1枚” (one, kira).29 Japan’s Sun & Moon page describes its SR cards as having “大迫力のイラストに特別な加工がされていて” (in my translation: a special treatment on a powerful illustration), without naming the treatment.30

Japanese differences outside the default

Bulbapedia records three more Japanese differences:

  • e-Card era non-holos. “In the e-Card Series, Japanese releases also had non-holofoil variants of otherwise holofoil cards, as holofoil cards cannot be scanned by the e-Reader.”1
  • Mirror cards before 2011. Bulbapedia’s Black & White page says that with that series, “Mirror cards introduced in the HeartGold Collection and SoulSilver Collection were also discontinued,” one of the three Bulbapedia senses of “mirror” that Section 5 lists.23
  • 151’s ball-pattern mirrors. “In the Japanese, Korean and Traditional Chinese subsets” of 151, “common, uncommon, and rare cards have Mirror Holofoil variants featuring a Poké Ball pattern; or, rarely, a Master Ball pattern”; Thai and Indonesian packs have “no Mirror Holofoil prints”; the English set’s Rares and below came as ordinary reverse holos (Section 3).31

Before Black Collection (December 2010): no source names the pattern

For Japanese cards before Black Collection, no page I read names the default pattern. Kiradex’s Japanese index holds 2,184 cards from the PMCG, neo, VS, web, e and PCG series, released from October 20, 1996 to June 29, 2006, and 362 of them have a holo variant in TCGdex; nothing in my sources dates their foil.75 Bulbapedia’s Holofoil page does say that “Many English expansions released by Wizards of the Coast gave non-holofoil counterparts to cards originally released only in holofoil in Japan.”1 That is a statement about which cards were holo, not about the pattern on them.

3. Reverse holos, set by set, and the patterned parallels

Where the reverse came from

“Reverse holo” is collector and industry usage, not a word on the company pages I read; TCGplayer’s price data, as TCGdex documents it, keys a price by reverse-holofoil.432 Bulbapedia’s Rarity page defines the card and its start in one sentence: “Starting from the Legendary Collection expansion, each Booster pack is also guaranteed to contain 1 Reverse Holofoil card, which is a card of any Rarity with Holofoil printing on the background of the card but not on the image of the Pokémon, Trainer card, or Special Energy card.”2 The Holofoil page dates the count: “Since the Legendary Collection expansion, one Reverse Holofoil card has been included in each booster pack, which was increased to two in Scarlet & Violet.”1 Legendary Collection opened on May 24, 2002, and Scarlet & Violet on March 31, 2023, 20.85 years later.35

Bulbapedia ties the start to the end of 1st Edition prints, last made in Neo Destiny, and says that “Wizards of the Coast used Magic: The Gathering as a basis and made a Reverse Holographic card for every single card in the set, with each booster pack containing one Reverse Holographic card, with only a few exceptions.”1 As a rule with exceptions, a reverse “is usually available for every card in a set, excluding Ultra Rare and Secret Rare cards, and any full-art cards.”1 Legendary Collection’s own page calls its reverses “cards that feature Holofoil throughout the card except the artwork window,” with “a fireworks-like pattern.”33

The treatments, in Bulbapedia’s order

Bulbapedia’s “Reverse Holofoil Patterns” list has 20 top-level entries and 5 sub-entries.4 I have grouped them into the rows below; the words in quotation marks are the wiki’s, the rest is my summary of its entries.1

Sets Reverse treatment
Legendary Collection (2002) “a ‘fireworks’ design over the entire body of the card, aside from the card’s artwork”
Expedition Base Set to EX Team Magma vs Team Aqua “a flat holographic finish over every aspect of the card aside from its art”; Expedition’s own page calls it a plain “refractor”
EX Hidden Legends (2004) the foil moves inside the art window: “an array of energy symbols placed behind the Pokémon”; on Rares, a faint foil type symbol in the attack box
EX FireRed & LeafGreen energy symbols in the picture window; on Rares, a faint foil ball shape in the attack box
EX Team Rocket Returns as FireRed & LeafGreen, plus the set logo in the art; on Rare reverses, gold foil over the HP and the name and a silver rarity symbol
EX Deoxys a “pinwheel” pattern and the set logo
EX Emerald; EX Unseen Forces a ball-and-stars pattern; then a “3D” ball pattern
EX Delta Species to EX Power Keepers plain foil in the background of the artwork “(excluding the Pokémon itself),” set logos stamped; EX Dragon Frontiers puts it on the Pokémon instead
Diamond & Pearl to Black & White “return to featuring a plain holographic effect to the background of the card”
Emerging Powers to Steam Siege the card’s type symbol in the background (a ball for Trainers); Plasma and Double Crisis cards plain, Ancient Trait cards plain only in the name area and the bottom quarter; Evolutions plain throughout
Sun & Moon to Cosmic Eclipse the same idea “with a large version of the card’s Type symbol” on the left
Sword & Shield to Crown Zenith “a ‘tile’ design” with the type symbol in each tile, on “a mirror foil base”
Scarlet & Violet to Black Bolt & White Flare “a more intricate tile design that incorporates type symbols of different sizes”; Ancient and Future cards plain
Mega Evolution onward “returns to featuring the plain holographic background”

The wiki’s own pages for the sets add detail in their own words. Expedition (September 15, 2002): “The design for Reverse Holofoil cards was changed to a plain ‘refractor’ Holofoil.”343 EX Hidden Legends: “Several Holofoil Energy symbols appeared on the artwork. The type of the Pokémon was displayed as a faint foil symbol in the attack box.”35 Bulbapedia notes too that Aquapolis and Skyridge numbered their holo rares differently “and not producing Reverse Holofoils for these cards.”1 One more entry sits outside the main sets: Gem Pack 1, an Asian-market release, “brings back the ‘pinwheel’ or ‘prismatic’ pattern from EX Deoxys” and introduces a “glitter” pattern of small five-pointed stars.1

A note on “mirror foil base”

Bulbapedia’s Sword & Shield to Crown Zenith entry says that set range “uses a mirror foil base for reverse ‘holofoil’ cards, technically making the name inaccurate as they lack any of the color scattering expected from holofoil cards.”1 The sentence is attached to that entry only; the next entry, Scarlet & Violet to Black Bolt and White Flare, does not repeat it, so I do not extend it to those sets. PokéBeach’s January 2020 report on the Sword & Shield reverse called it “a ‘tile’ pattern.”19

What stays the same: the mask

Read down the table and the pattern in the foil changes every few sets, while the place it is not changes rarely: the art window from 2002, the Pokémon inside the art window from EX Hidden Legends to EX Power Keepers, when the foil moved into the art behind it, on my reading of the wiki’s entries for those sets (EX Dragon Frontiers put it on the Pokémon instead), and the art window again from Diamond & Pearl on.1 On my reading, for an app that draws reverse holos, the mask is the stable fact and the pattern is a detail per era. Section 7 shows that Kiradex has the mask and almost never uses it.

The patterned parallels: a treatment of their own, in overlapping words

The ball-pattern cards of the 2020s are a treatment of their own: a ball “etched in the background,” in Bulbapedia’s words, where an ordinary reverse of the period has type-symbol tiles or plain foil. The words for them overlap with the reverse’s. The company’s own pages call them ミラー (mirror) in Japanese and “parallel” in English; Bulbapedia calls Prismatic Evolutions’ ordinary treatment a “regular parallel holofoil variant” and the Japanese 151 ones “Mirror Holofoil variants”; and TCGdex files them as reverse variants with a named foil (Section 6). Whether a set also has an ordinary reverse differs by set and language, as the paragraphs after the table show. The official pages say:43631

Product Release What the official page says
TAG TEAM GX All Stars (Japan) October 4, 2019 separates “ミラー仕様” (mirror specification) from “SR仕様” (SR specification)
Pokémon Card 151 (Japan) June 16, 2023 “通常のカードに加えて、モンスターボール柄の特殊な加工がされた、豪華ミラー仕様のカード” (in my translation: besides the normal cards, deluxe mirror-specification cards with a special ball-pattern treatment)
Terastal Fest ex (テラスタルフェスex, Japan) December 6, 2024 a panel headed “豪華プレミアムミラー仕様のカード” (deluxe premium-mirror cards)
Prismatic Evolutions (English) January 17, 2025 “introduces premium parallel cards with Poké Ball and Master Ball treatments” that show the motif “as you turn them from side to side”
Black Bolt / White Flare (Japan) June 6, 2025 the same mirror sentence as 151’s
MEGA Dream ex (Japan) November 28, 2025 “エネルギーマーク柄や様々なモンスターボール柄の豪華ミラー仕様のカード” (deluxe mirror cards with an Energy-symbol pattern and various ball patterns)

Release dates are from each Japanese product page, Bulbapedia’s English list for Prismatic Evolutions, and Bulbapedia’s Japanese list for Black Bolt and White Flare.3738394029413 The Japanese 151 page was the earliest company statement of a ball-pattern mirror I read; English Prismatic Evolutions followed 581 days later.5 For the English Black Bolt and White Flare sets, Bulbapedia describes “two parallel Holofoil variants that may appear on cards, featuring a Poké Ball or a Master Ball etched in the background, alongside the regular parallel holofoil variant,” the same wording it uses for Prismatic Evolutions; TPCi’s own expansion page for Black Bolt and White Flare returned 404 to me, so that one rests on the wiki.163642 Japanese 151 and English 151 are different here. The Japanese page names two kinds of card, the normal cards and the ball-pattern mirrors beside them, and the pinned TCGdex copy agrees: its first card, SV2a-001, holds three variants, normal, a pokeball reverse and a masterball reverse, and of the set’s 210 card files, 153 carry those two ball-pattern reverses and none carries a reverse with no foil named. So in Japanese 151 the patterned mirror is not an addition to an ordinary reverse; it is the reverse-type printing the set has. English 151 did not have the mirrors and has the ordinary reverse instead. Bulbapedia’s 151 page: “In the English set and the languages following the English set structure, all Rares and below are also available as Reverse Holofoil versions,” and the mirrors belong to the Japanese, Korean and Traditional Chinese subsets. The wiki uses the same English sentence for Paldean Fates. Prismatic Evolutions and English Black Bolt and White Flare have both: the regular treatment and the two ball patterns, “alongside” it in the wiki’s word.384331443616

The catalog has its own record of these printings (Section 6). TCGdex files ball-pattern reverses on two Japanese sets of 2022, S9a (February 25, 2022), 476 days before 151’s page, and S11a (September 2, 2022), 287 days before it. I found no other source for those two, and pokemon-card.com’s pages for S9a and S11a returned 404.9542

4. Special patterns and finishes: promos, prizes, full arts, rainbow and gold

The default pattern is what a set’s ordinary holos carry. Promos, prize cards and the top rarities carry others. The names here are again collector terms recorded by Bulbapedia unless a company page is cited, and the wiki’s own set pages are the source for which product carried what.

The four special patterns on the Holofoil page

  • Cracked Ice (collector term; Bulbapedia: “Occasionally called Broken Glass or Shards,” and on the Rarity page also “Shattered Glass”) “consists of irregular reflective shapes resembling pieces of cracked or shattered glass.” The Holofoil page says it “was first used for the exclusive version of the featured card in Theme Decks from the Platinum Series,” continued in theme decks “throughout the HeartGold & SoulSilver Series and into the Sword & Shield Series,” and appeared on blister-pack promos “from Platinum onwards.” Some cards carry it “over everything but the image of the Pokémon.”12 The page lists nine Sword & Shield theme-deck cards with it.5 Section 5 shows that its first set is disputed.
  • Crosshatch (collector term) “is generally used only for cards awarded at Play! Pokémon events. The pattern consists of intersecting diagonal lines that form a reflective grid across the card,” and “is often applied to the background of the card, as in a Reverse Holo card.”1 Bulbapedia’s Black & White and XY set pages carry 17 product rows each that name it; the first Black & White rows are Pokémon League prizes of May, June and July 2011.523
  • Sequin (collector term) “was first introduced in August, 2017, and is exclusively used for General Mills promotional cards”; it “consists of many small reflective geometric shapes scattered across the image, giving it a sequined appearance.”1 The page lists 13 Sun & Moon and 6 Sword & Shield Sequin cards.5
  • Pixel, or Confetti (collector terms), “is used primarily for cards in the McDonald’s Collection sets, but was also featured on the Celebrations Classic Collection,” and “consists of small, blocky reflective shapes scattered across the image, resembling pieces of confetti.”1

Cosmos after 2011: the promo pattern

“When Cosmos Holofoil was no longer being used as the default Holofoil, it became a common Holofoil pattern used for promotional cards,” Bulbapedia’s Cosmos page says, and the Rarity page agrees that it “is now frequently used for promotional cards.”82 The wiki’s set pages bear it out row by row. Counting product rows that name “Cosmos Holo” in the saved set pages: 3 on Black & White, 11 on XY, 2 on Evolutions, 15 on Sun & Moon, 15 on Sword & Shield, 8 on Scarlet & Violet, 13 on 151, 10 on Paldean Fates, 8 on Prismatic Evolutions, 2 on Black Bolt and White Flare, and on Mega Evolution 10 more plus 4 named “Pixel Cosmos Holofoil,” among them a “Fall 2025 Collector Chest exclusive.”521 The Scarlet & Violet page also names a pattern I found nowhere else in my sources: three Fall 2023 Collector Chest cards were printed as “Snowflake Holo” beside a Cosmos Holo version of each.205 The one company page in my sources that names a pattern does it for this use: play.pokemon.com’s Prize Pack gallery offers “stamped, cosmos foil versions” of two Trainer cards.45 Bulbapedia’s Mega Evolution and Black Bolt pages list Cosmos Holo cards as 2025 to 2026 League participation prizes in Malaysia, the Philippines and Singapore.2116

Holo Energy: “Matrix”

“Matrix Energy is the nickname given to the Holofoil Basic Energy cards,” first in Japan’s ADV-era set Magma vs Aqua: Two Ambitions, and in English not “until the release of EX Emerald,” which opened on May 9, 2005.463 The page knows three designs, from EX Emerald, EX Holon Phantoms and EX Power Keepers, plus a League promo version, and describes each in words, not by a pattern name.46 Japan’s VMAX Climax (2021) put a kira basic Energy in every pack, as quoted in Section 2.28

Full arts: etched

pokemon.com’s July 2025 article on Black Bolt and White Flare describes the first full arts, in Black & White, as “full-art foil cards with etched textures and a solid-color background,” and the sets’ Black White Rare cards as having “unique foil and texture treatments” in the style of those first full arts.17 Those are the company’s words for a finish, not a pattern name. Bulbapedia’s Black & White page: full art cards “featured the artwork and Holofoil covering the entire card.”23 Its Full Art page: “The English releases of most Full Art Pokémon-EX and all Full Art Pokémon-GX and Pokémon V feature a special embossed etching treatment.”47 “Embossed” is the wiki’s word; no company page I read uses it.4

Sun & Moon’s three prints of a GX

Bulbapedia’s Sun & Moon page describes a Pokémon-GX in three prints. The regular one: “The whole card was Holofoil and had a glossy finish.” The full art: “Full Art prints have a shard-like diamond background.” The secret one: “Rainbow Rare prints have the exact same artwork as Full Art prints but were fully silver (including the Pokémon) and have a rainbow reflector finish.”18 The page calls the secret print “Secret Rainbow Rare card (called Hyper Rare card in Japan).”18 The Rarity page’s general description of secret rares is “a unique artwork scheme such as an alternate holofoil scheme, depiction of shiny Pokémon, or a gold trim.”2

Scarlet & Violet: etched, gold, glitter

Bulbapedia’s set prose names the finishes of the 2023 to 2025 sets:

  • 151: “16 ultra rare full-art etched Pokémon and Supporter cards, and three hyper rare gold etched cards.”31
  • Paldean Fates: “six hyper rare Pokémon ex with a new gold raised foil effect.”44
  • Prismatic Evolutions: “five hyper rare gold etched Pokémon ex cards.”36
  • Special illustration rares, on the wiki’s page for the rarity, are like illustration rares “but instead feature an additional layer of glitter foil” and alternative artwork.48

Two textured reprints sit beside them: Shining cards re-released in Celebrations and in 30th Celebration carry an anniversary stamp and, in Bulbapedia’s words, a “special textured foil treatment” as Classic Collection retro cards.22 In Japan, a CoroCoro promo of a Shining card “is holofoil with an additional glitter coating.”22

What these mean for a collector

On my reading, the special patterns answer a different question from the defaults. A default pattern tells you the era of a set’s ordinary holo; a special one tells you the channel the card came through: a theme deck or blister (Cracked Ice), a League or event prize (Crosshatch), a cereal box (Sequin), a fast-food pack (Pixel), a collector box or prize pack (Cosmos after 2011). That is why the catalog in Section 6 records special foils and almost never defaults: the special ones are separate products with separate prices.

5. Whose words these are, and where the sources disagree

The measurement

I wanted to know which pattern names the publisher uses itself, so a script searched every saved page for each name and grouped the hits by who published the page: The Pokémon Company in Japan (pokemon-card.com), The Pokémon Company International (pokemon.com, tcg.pokemon.com, play.pokemon.com), the printer Cartamundi, Bulbapedia, TCGdex and PokéBeach.4 The result:

Name On a company page read? Where it is used Label in this post
キラ (kira) yes: pokemon-card.com (Bandit Ring article 2015, Sword and Shield, VMAX Climax, Black Bolt and White Flare) the Japanese word for a holo card company term (Japanese)
ミラー (mirror) yes: pokemon-card.com (TAG TEAM GX All Stars 2019, 151, Terastal Fest ex, Black Bolt and White Flare, MEGA Dream ex) the Japanese word for an extra mirror printing (2019 to 2025); deluxe and ball-patterned on the pages from 151 (2023) on company term (Japanese)
parallel yes: tcg.pokemon.com (Prismatic Evolutions) the English word for the same printings company term (English)
cosmos (foil) yes: play.pokemon.com (Prize Pack gallery) Bulbapedia’s 2000 to 2011 default, and later promo pattern company term (English)
etched, texture yes: pokemon.com (Black Bolt and White Flare article) a full-art finish company words for a finish, not a pattern name
Starlight, galaxy, Tinsel, Sheen, Water Web, Line, Mirage, Cracked Ice, Crosshatch, Sequin, Pixel or Confetti no Bulbapedia; TCGdex’s schema (starlight, galaxy, tinsel, cracked-ice); PokéBeach (galaxy, sheen) collector terms
reverse holo no, on the pages read Bulbapedia, PokéBeach, TCGplayer’s price keys collector and industry usage
mirror, in English, as a pattern no Bulbapedia (three senses, below); TCGdex mirror collector term with several meanings
embossed no Bulbapedia’s Full Art page, PokéBeach collector term

None of the company terms is an era name. Bulbapedia’s Holofoil page holds eleven pattern headings; none of the eleven, except Cosmos, appears on a company page I read.4 So the statement that Bulbapedia names seven default English patterns is exactly that: the wiki’s account, built by collectors, and the reason every era name in this post carries that label. The pages I could search were limited; Section 8 lists what I could not reach.

“Galaxy” names two different things

Bulbapedia says Cosmos is “often referred to as Galaxy Holofoil” and dates Cosmos from Base Set 2 (February 24, 2000).83 TCGdex, the catalog, uses galaxy mostly for Fossil (October 10, 1999): 123 of its 131 galaxy variants are on 61 Fossil cards, 31 of them typed holo (15 cards) and 92 typed normal (46 cards), and a non-foil “normal” card cannot carry a foil. The other 8 are on five Scarlet & Violet sets of 2023 and 2024 (sv03, sv03.5, sv04, sv05 and sv06), seven typed holo and one reverse.5 Bulbapedia puts Fossil in Starlight.1 TCGdex files a single Fossil variant under starlight: card 1, a holo with a pre-release stamp, which also has a cosmos pre-release variant beside it.549 PokéBeach, in December 2022, used “galaxy holofoils” for the old look in general.24 The sources do not agree on what “galaxy” covers, and I would not print the word on a card page as a fact.

Starlight’s shape

The Holofoil page calls Starlight “starbursts of different sizes” and the Rarity page “different sized stars.”12 The same pattern, two words. The timeline figure draws four-point stars, which is my choice of shape, not a finding.

The Sword & Shield pattern’s name

The Holofoil page names it “Line” and cites PokéBeach’s January 2020 report, which called it “a vertical ‘line’ pattern like in Japan.” The Rarity page describes “a series of thin vertical stripes” with no name.1192 On my reading, “Line” is a fansite’s description that the wiki turned into a heading.

Cracked Ice’s first set

Three sources give four candidates for the earliest use, one of them a jumbo-size printing, and only the Holofoil page calls its use the first; I do not pick one:

Source Earliest Cracked Ice it names Does it say “first”? Date
Bulbapedia, Holofoil page the featured card of Platinum-series theme decks yes: “first used” Platinum opened February 11, 2009
Bulbapedia, Rarity page the Legendary Bird Pokémon ex cards of EX FireRed & LeafGreen no: an example, “such as”, among its uses September 1, 2004, in TCGdex’s set file
TCGdex, standard size EX Hidden Legends cards 93 to 100, eight cards no: the earliest set with a standard-size cracked-ice variant in the pinned copy June 1, 2004
TCGdex, jumbo size Skyridge cards 146, 147, 149 and 150, jumbo-size printings only no: an earlier set, but each of its four cracked-ice variants is marked size: 'jumbo', and each card’s standard holo names no foil May 12, 2003

Sources: the two Bulbapedia pages, the parsed English list for Platinum, and the pinned TCGdex copy for its dates and sizes. A scan of every English variant that carries a size finds 214 marked jumbo and 1 marked standard, and cracked-ice on a jumbo variant only on these four Skyridge cards and on the promos DP26 and DP27 (Diamond & Pearl, 2007); the other 58 cracked-ice variants carry no size, and the API reports a variant without one as standard. TCGdex itself records no cracked-ice variant in EX FireRed & LeafGreen.12355049 The Skyridge cards add a wrinkle: Bulbapedia’s Crystal Pokémon page lists Skyridge 145 to 150 as the set’s six Crystal Pokémon, and its Rarity page says that Crystal Pokémon “had the cosmos holofoil treatment” and were secret rares.512 Of those six, TCGdex gives four (146, 147, 149 and 150) a jumbo-size printing marked Cracked Ice, and their standard holos name no foil; 145 and 148 have no jumbo printing and no named foil.5049

“Mirror”: one company term, three Bulbapedia senses, one catalog value

  • pokemon-card.com: ミラー仕様, an extra mirror printing (2019 to 2025); deluxe and ball-patterned on the pages from 151 (2023) on.373841
  • Bulbapedia, Japanese “Mirror cards”: the Black & White page says “Mirror cards introduced in the HeartGold Collection and SoulSilver Collection were also discontinued” with that series.23
  • Bulbapedia, 151 and Mega Evolution: the Japanese 151 ball-pattern “Mirror Holofoil variants,” and Mega Evolution’s reintroduced “Mirror Holofoil variants of cards, last seen during the Black & White Series”; one Mega Evolution League promo is listed as a “Reverse Mirror-Holofoil” printing.3121
  • Bulbapedia, the reverse note: the “mirror foil base” of Sword & Shield to Crown Zenith reverses, which “lack any of the color scattering expected from holofoil cards.”1
  • TCGdex: mirror on two Diamond & Pearl promos only, DP26 and DP27. On both, the mirror variant and a cracked-ice one are jumbo-size printings, beside a standard holo named cosmos.55049

On my reading, the Japanese company term is the one to follow, and the English uses are descriptions; a card page that says “mirror” should say whose word it is.

Rainbow and gold start later in the catalog than on the cards

Bulbapedia dates the Rainbow Rare to Sun & Moon (2017).18 TCGdex’s rainbow (151 variants in 13 sets) and gold (134 variants in 26 sets) both start at Rebel Clash, swsh2 (May 1, 2020), and neither appears on any Sun & Moon set.95 That is a gap in the catalog, not a disagreement about the cards.

Who prints the cards, and the patents I found

The companies say little about how a foil is made, and this post does not try to. What the sources say about printers:

  • Cartamundi, the Belgian card maker, names Pokémon among the “existing partners such as Magic The Gathering, Pokémon, Yu-Gi-Oh and Flesh & Blood” served by its Turnhout expansion, in a release whose dateline reads “Turnhout, October 18, 2024”; it does not say which languages or products.52
  • Millennium Print Group: PokéBeach (a lead, not a company page) reported in December 2025, in its own words, that Millennium Print Group, which it says TPCi bought in 2022, prints “the Pokemon TCG and other trading card games at multiple facilities in North Carolina and the Netherlands”; the emailed company statement the article quotes is about a new manufacturing campus, not about what the company prints. I fetched no company page that says either.53

Who prints Japanese cards, I did not find. Nor did I find a patent on a card foil assigned to The Pokémon Company, Creatures, Nintendo or The Pokémon Company International. I ran one web search and did not query Google Patents by assignee, so this is a gap, not a finding. The two documents I did read belong to others:

  • US 5,517,336, “Display card with interactive imagery and method of producing same,” is assigned to Upper Deck Co LLC (priority September 3, 1993; filed February 1, 1995; granted May 14, 1996). Its first claim covers a display card on which a printed image and “an embossed holographic reproduction” formed in a “hot stamping layer” meet to make one composite picture.54 My reading: it shows that trading cards of the 1990s could carry a hologram as a hot-stamped layer beside the print. It says nothing about Pokémon cards.
  • US 2002/0043764 A1, “Educational trading card game and method,” an individual’s application (priority January 25, 2000; published April 18, 2002; listed as abandoned), is not about foil at all. Its background notes of Pokémon cards that “there is a limited number of holographic foil cards produced, and such rarity commands a higher price for such cards when traded.”55 It is an outsider’s description from 2000, not a source on printing.

Where value comes up, as it does in that patent and in the catalog’s price keys: nothing in this post is financial advice, and a finish named here is not a claim about what a card is worth.

6. What the catalog records about finishes, measured

Kiradex is mine: “a card collector’s app that we had in TestFlight on October 2,” as the post that introduced it puts it.56 Its card index is built from TCGdex, a free online catalog of trading cards. For this post I pinned TCGdex’s source repository, tcgdex/cards-database, at commit c5c0a8a (committed September 30, 2026), read every card file in it with a script, and joined the result to Kiradex’s two bundled index files, CardIndex-en.json and CardIndex-ja.json (dated October 2, 2026 on disk).957 Every index card was found in the pinned copy: 21,256 English and 12,781 Japanese.9

What the public reference documents, and what the files hold

TCGdex’s public card reference documents four booleans per card: variants.normal, variants.reverse (“Reverse holofoil version available”), variants.holo (“Holofoil version available”) and variants.firstEdition.32 The API’s responses carry a fifth, wPromo, that the reference table does not list.58 The database’s schema holds more: a variant may carry a foil from a closed list, documented as “for the holo & reverse, optional indicate which foil is used on the card.”57 The list has 22 values: pokeball, greatball, ultraball, masterball, gold, cosmos, galaxy, starlight, energy, cracked-ice, mirror, league, player-reward, professor-program, tinsel, loveball, friendball, quickball, team-rocket, duskball, rainbow, glitter.575 The API returns these as variants_detailed, a field the reference does not document; one saved response, sv03.5-001, shows a reverse variant with "foil": "cosmos".58

Read as a vocabulary, the list mixes four kinds of thing. Five are patterns with a collector name (cosmos, galaxy, starlight, tinsel, cracked-ice); ten are motifs (eight ball names, team-rocket and energy); three are channels a card came through (league, player-reward, professor-program); and four are finishes (gold, rainbow, glitter, mirror).5 On my reading, only the patterns could ever say what a set’s ordinary holo looks like, and the catalog almost never uses them that way.

How often a foil is named

Measure (one denominator each) Count Share
English card files in the pinned copy with no variants at all 8,566 of 23,873 35.9%
English card files using the old four-boolean form 296 of 23,873 1.2%
English card files naming a foil on any variant 1,396 of 23,873 5.8%
Asian card files naming a foil on any variant 627 of 18,443 3.4%
Kiradex English index cards naming a foil on any variant 1,396 of 21,256 6.6%
Kiradex Japanese index cards naming a foil on any variant 626 of 12,781 4.9%
English index cards with a holo variant and no foil named on it 5,345 of 6,094 87.7%
Japanese index cards with a holo variant and no foil named on it 4,108 of 4,108 100.0%

Counts are from the measurement script; shares are computed with the denominator in each row.95 By TCGdex series, the English index cards that name any foil are concentrated where the patterned printings are: 503 of 3,698 in Scarlet & Violet, 342 of 3,675 in Sword & Shield, 191 of 1,264 in Mega Evolution, 154 of 1,727 in EX; none in Black & White (1,437 cards), XY (1,932), Neo (383), Gym (264), Legendary Collection (110) or Call of Legends (106), and 2 of 2,917 in Sun & Moon.9 In Japanese, the cards naming a foil are 417 of 3,677 in SV, 118 of 1,924 in M and 91 of 1,796 in S; none in SM, PMCG, neo, VS, web, e, PCG or XY.9

Each value, first set to last

A line per TCGdex foil value on English cards from its first set's release to its last set's, with the count of variants: cosmos 1996 to 2026, 477; galaxy 1999 to 2024, 131; starlight 1999, 1; cracked-ice 2003 to 2023, 64; energy 2004 to 2026, 271; mirror 2007, 2; league 2007 to 2025, 59; player-reward 2009 to 2024, 3; professor-program 2010, 2; rainbow 2020 to 2022, 151; gold 2020 to 2026, 134; pokeball 2023 to 2026, 303; tinsel 2023 to 2025, 11; masterball 2025, 211; and duskball, loveball, friendball, quickball and team-rocket in 2026 only.

Each foil value TCGdex records on English cards, by the release dates of its first and last sets; jumbo-size printings are included, among them the first cracked-ice variants and both mirror ones.59

foil (English) Variants Holo / reverse / other First set (date) Last set (date) Sets
cosmos 477 415 / 61 / 1 miscp (1996-01-01), then basep (1999-07-01) me05 (2026-07-17) 61
pokeball 303 0 / 303 / 0 sve (2023-03-31) me02.5 (2026-01-30) 5
energy 271 2 / 269 / 0 ex5 (2004-06-01) me02.5 (2026-01-30) 3
masterball 211 0 / 211 / 0 sv08.5 (2025-01-17) sv10.5w (2025-07-17) 3
rainbow 151 151 / 0 / 0 swsh2 (2020-05-01) swsh12 (2022-11-11) 13
gold 134 133 / 0 / 1 swsh2 (2020-05-01) me04 (2026-05-22) 26
galaxy 131 38 / 1 / 92 base3 (1999-10-10) sv06 (2024-05-24) 6
cracked-ice 64 44 / 20 / 0 ecard3 (2003-05-12) sve (2023-03-31) 17
league 59 7 / 47 / 5 dp3 (2007-11-01) me01 (2025-09-26) 16
duskball, loveball, friendball, quickball, team-rocket 26, 25, 23, 22, 10 all reverse me02.5 (2026-01-30) me02.5 1 each
tinsel 11 3 / 8 / 0 sve (2023-03-31) sv10.5w (2025-07-17) 3
player-reward 3 0 / 3 / 0 pl1 (2009-02-11) sv05 (2024-03-22) 2
mirror 2 2 / 0 / 0 dpp (2007-05-01) dpp 1
professor-program 2 0 / 2 / 0 hgss1 (2010-02-10) hgss1 1
starlight 1 1 / 0 / 0 base3 (1999-10-10) base3 1

Dates are TCGdex’s set release dates, which can differ from the company’s by a day: TCGdex dates Black Bolt and White Flare July 17, 2025, a day before pokemon.com’s launch date (Section 1)17; “other” is a variant typed something other than holo or reverse, almost all “normal.”9 In the Asian card files: pokeball on 424 variants from S9a (February 25, 2022) to M2a (November 28, 2025), masterball on 401 from SV2a (June 16, 2023) to SV11W (June 6, 2025), energy and the five other ball and team values on M2a only, and glitter (4 variants) and cosmos (1) on one Miscellaneous promo.9 English cosmos is the promo pattern of Section 4 in catalog form: 80 of its 477 variants are on the Sword & Shield promo set and 51 on Scarlet & Violet’s.9 By set release date, 89 of the 477 are in sets released before 2011 and 388 in sets released from 2011 on, and no English cosmos variant is in a set released between Unleashed (hgss2, May 12, 2010) and the Sword & Shield promos (swshp, November 15, 2019), a span that takes in the 2011 to 2019 sets whose files are mostly empty (below).95 In the table, the first set for cracked-ice and the only set for mirror hold jumbo-size printings: the four Skyridge cracked-ice variants and both mirror variants (DP26 and DP27) are marked size: 'jumbo', and the earliest standard-size cracked-ice is on EX Hidden Legends (June 1, 2004), as Section 5 sets out.50

On my reading, the catalog names special variants, not defaults: it can tell an app that a card was also printed as a ball-pattern parallel or as a cosmos-foil promo, and it cannot tell it what the card’s ordinary holo looks like.

The hole: 2011 to 2019, measured

The default holo is the catalog’s blind spot, and the blind spot has a measured size. Assigning every English index set to an era by its TCGdex series (Section 1’s eras; trainer kits, McDonald’s sets and miscellaneous products unassigned), and counting for each index card whether its file in the pinned copy (commit c5c0a8a, committed September 30, 2026) carries any variants at all:76

Horizontal bars for each English holofoil era in Kiradex's index, showing index cards, the cards TCGdex lists with a holo variant, and the cards whose TCGdex file carries no variants at all: Starlight 47 holo, 0 empty, of 228; Cosmos 1,341 holo, 0 empty, of 5,463; Tinsel 16 holo, 1,417 empty, of 1,437; Sheen 0 holo, 1,819 empty, of 1,819; Evolutions 0 holo, 113 empty, of 113; Water Web 142 holo, 2,495 empty, of 2,917; Line 1,909 holo, 0 empty, of 3,675; Mirage 1,815 holo, 0 empty, of 3,698; Mega Evolution 662 holo, 0 empty, of 1,264; other products 162 holo, 241 empty, of 642. Eras are assigned by TCGdex series, so the year spans in the labels leave out a few promo sets: the Wizards Black Star Promos of 1999 count in Cosmos, the XY Black Star Promos and the Kalos Starter Set of 2013 in Sheen, and the Sword & Shield Black Star Promos of 2019 in Line.

Kiradex’s English index by era: index cards, cards TCGdex lists with a holo variant, and cards whose TCGdex file carries no variants, which is missing data, not a non-holo card. Eras are assigned by TCGdex series, so a series’ promo sets count in its era even when dated outside the years shown: the Wizards Black Star Promos (1999) in Cosmos, the XY Black Star Promos and the Kalos Starter Set (2013) in Sheen, and the Sword & Shield Black Star Promos (2019) in Line.60

Era (collector term) Index cards File carries no variants With a holo variant in TCGdex Holo only (no plain print) With a reverse variant
Starlight (base1 to base3) 228 0 (0.0%) 47 (20.6%) 47 0
Cosmos (Wizards promos, Base Set 2 to Call of Legends) 5,463 0 (0.0%) 1,341 (24.5%) 1,130 3,255
Tinsel (Black & White) 1,437 1,417 (98.6%) 16 (1.1%) 16 5
Sheen (XY, without Evolutions) 1,819 1,819 (100.0%) 0 (0.0%) 0 0
Evolutions 113 113 (100.0%) 0 (0.0%) 0 0
Water Web (Sun & Moon) 2,917 2,495 (85.5%) 142 (4.9%) 138 121
Line (Sword & Shield) 3,675 0 (0.0%) 1,909 (51.9%) 1,886 2,034
Mirage (Scarlet & Violet) 3,698 0 (0.0%) 1,815 (49.1%) 1,705 2,159
Mega Evolution (no default named) 1,264 0 (0.0%) 662 (52.4%) 606 621
Other products, unassigned 642 241 (37.5%) 162 (25.2%) 137 0
All English 21,256 6,085 (28.6%) 6,094 8,195

Counts are from the two measurement scripts, which agree on every era’s index cards; each percentage uses that row’s index cards as its one denominator, and the eras sum to the index’s 21,256 cards.765 The assignment is by series, so the Cosmos row includes the Wizards Black Star Promos (from July 1, 1999), and the XY row includes 16 sets, among them the XY promos and Generations.5

So the hole runs from Black & White (2011) through Sun & Moon (2019), not only through XY. Of the 6,085 English index cards whose files carry no variants, 5,844 (96.0%) are in four eras: 1,417 of the 1,437 Black & White-era cards, all 1,819 XY-era cards, all 113 Evolutions cards and 2,495 of the 2,917 Sun & Moon-era cards; together, 5,844 of those eras’ 6,286 index cards (93.0%).65 The other 241 are trainer-kit cards: one in a 2010 kit and all 240 in the eight XY trainer kits of 2014 to 2016.6 Starlight, Cosmos, Sword & Shield, Scarlet & Violet and Mega Evolution have none.6

Sun & Moon splits by set. The era’s promo set (smp) and Burning Shadows (sm3) carry variants for every index card, and they hold all 142 of the era’s index cards with a holo variant (72 and 70); in the era’s other 16 sets, 2,495 of 2,500 index cards have empty files, beginning with sm1-1.65 So the Sun & Moon count of 142 index cards with a holo variant is a count over the 422 filled files, not over the era, and the difference from Sword & Shield’s 1,909 of 3,675 is mostly missing data. How many holos the era printed, the catalog does not say, and I have not counted it from another source.

In Japanese the gap is small and sits elsewhere: 210 of 12,781 index cards (1.6%) have empty files, 181 of them in Scarlet & Violet-era sets (all of SVK, SVLN, SVLS and SV9a, and one SV8 card) and 29 in sets of 2000 to 2002 (neo3, neo4, VS1 and E2).65 Every Japanese card the index holds from the XY (CP1 and CP2), SM and S series has a filled file; the index holds no Japanese Black & White-era set.67

What an empty file looks like to the app

An empty file is not a blank to the app; it is a card printed in normal only. TCGdex’s compiler, in the pinned copy, gives a card with no variants the value normal: true and a single variant of type normal whose variantId is generated.10 Four saved responses show it: xy1-1, xy1-5, bw1-1 and bw1-10 all return normal: true, holo: false, reverse: false, and their variants_detailed is that one generated normal variant.58 The same API answer comes from one other kind of file, an old-form file whose only true boolean is normal; one English index card has such a file, so 6,086 English index cards and 210 Japanese ones answer with exactly one generated normal variant. A second count, which parses the files with a separate tokenizer and applies the compiler’s rule directly, gives the same 6,086 and 210, and it predicts the variant ids of all seven saved responses.6615

The rarity strings on the empty files do not fill the gap. None of the XY-era strings contains “holo”: they are Uncommon 484, Common 428, Rare 374, Ultra Rare 252, Promo 216, None 40 and Secret Rare 25.75 On the empty Sun & Moon files the strings are Uncommon 614, Common 610, Rare 581, Ultra Rare 370, Secret Rare 234 and Shiny rare 86, and none of them says whether a card was holo either.6 To the catalog’s API, then, every XY Rare Holo in the index is a “Rare” answered as normal only, and so are most Black & White and Sun & Moon holo rares; the file is silent, and the API fills the silence with its default. On my reading, 6,085 is a count of cards the catalog says nothing about, not a count of cards that were not holo; what was printed on them is a question for another source.

7. What Kiradex draws today

Kiradex shows each card as a 3D object you can turn over, and its face carries a foil drawn by one Metal surface shader.6263 I read the code on a Mac on October 5, 2026, at 16:53 Pacific time, when the branch head was commit cf3beb1, and read some of its files again at 17:49, when it was commit 5a344e3, without changing or running it; the app was being worked on that day, so each footnote gives the time of its read and cites the code by name rather than by line wherever a line could move.11

Choosing the foil: five styles from a rarity and four booleans

FoilStyle has five cases: none, artWindow (“Classic holo rare: the art window shines, the frame is flat”), reverse (“Reverse holo: the frame shines, the art window is flat”), full and etched.11 Its initializer reads, in order: ten rarity strings that mean etched foil (“ultra rare”, “secret rare”, “hyper rare”, “mega hyper rare”, “illustration rare”, “special illustration rare”, “shiny ultra rare”, “full art trainer”, “black white rare”, “crown”); twelve that mean smooth full-face foil; then a holo variant with no plain print; then the word “holo” in the rarity; then a reverse variant with no plain print; and otherwise none.11 Its own comment states the limit: “The catalog has no foil masks, so the style is read from what it does record: the rarity, and which finishes the card was printed in.”11 The inspector builds it from the card’s live catalog detail, and CardDetail.Variants decodes the four booleans only; variants_detailed and its foil are not read.6465

Drawing the foil: one shader

kiraSurface reads the style and a strength from the material’s custom parameter.63 It masks the foil with two rectangles in card coordinates: the art window, from 0.085 to 0.915 across and 0.105 to 0.525 down, and the printed area, from 0.045 to 0.955 and 0.032 to 0.968; a reverse holo is “everything else inside the border,” the printed area minus the window, and full and etched cover the whole face.63 On a 63 by 88 mm card, the window is 52.3 by 37.0 mm, 34.9% of the face, and the reverse mask is 50.3% of it.5

Four card outlines drawn to scale at 63 by 88 millimeters. The first fills only the art window, 52.3 by 37.0 millimeters in the upper half. The second fills the printed area except the art window. The third fills the whole face. The fourth fills only a ring between the card edge and the printed area, about 2.8 millimeters wide, which is the proposed border-foil flag.

The shader’s three masks to scale, and the border ring the brief adds; rectangles from the shader’s constants.66

Inside the mask the foil is the same for every style: “Rainbow bands that slide across the card as it tilts,” “A soft bar of light that sweeps the face,” and glitter, “one fleck per cell, each catching the light at its own angle.”63 The glitter grid is the card’s 63 by 88 millimeters times 0.75: 47.25 by 66 cells, one cell per 1.333 mm, about 3,118 cells of which half can light.5 etched adds “two crossed sets of fine ridges, about three to the millimetre,” a sine of period 2π/19, which is 0.33 mm or 3.02 ridges per millimeter, and cuts the glitter to 15% because “Etched cards carry no loose glitter.”635 Everything moves with the eye direction in the card’s frame; the shader has no time input, no texture but the card’s scan, and no normal of its own: the etched ridges brighten the emissive glow and do not change the lighting.63

CardRig builds the material with RealityKit’s clearcoat lighting model and sets the custom value to SIMD4(foil.rawValue, 1, 0, 0): strength is always 1, and the third and fourth components are unused.62 MotionTilt adds up to 0.45 radians of phone tilt, 25.8 degrees, sampled at 60 Hz, so the foil moves “the way a real card’s does in your hand”; with Reduce Motion on, the card’s idle sway stops, and the phone’s tilt still turns it, since CardStage starts the tilt reader whatever the setting and the rig adds the phone’s tilt to the card’s turn every frame. The idle sway itself runs only where no gyroscope can be read, as in the Simulator.6768625

The town draws every card the same way

Kiradex World, the app’s pixel town, holds cards up on its plaza, in its hall and in show-and-tell. Every one of those stages passes .artWindow for every card: three places in PlazaStage.swift, two in HallView.swift, one in ShowAndTellView.swift; the rig’s Dressing, which carries the faces of a room’s case or a hall’s pedestals, holds one foil for all of them.12 A Special Illustration Rare on a hall pedestal shines like a 1999 holo rare. Show-and-tell draws its cards through CardStage, which reads Reduce Motion; the plaza and the hall draw through PlazaStage (the hall is a PlazaStage with pedestals), which does not, and the rig turns their cards on its own clock: the case and pedestal cards in turnShowcase, the card a collector holds up in holdCard and liftCard.1268

A copy’s finish is recorded, and not drawn

The collector can record how a copy was printed: CardFinish is normal, holo, reverseHolo or firstEdition, shown as “Normal,” “Holo,” “Reverse Holo” and “1st Edition.” Nothing passes it to FoilStyle.69 The roadmap says the rest in one line: “Foil is one procedural pattern; per-era patterns are future work.”13 Two tests touch FoilStyle: foilStyleFollowsRarityAndFinishes holds nine rarity and variant cases, and cardDetailReadsNumberPriceAndFoil checks that a saved base1-4 detail comes out .artWindow. No test asserts anything about how the foil is drawn. Every 3D card face in the app, in the inspector, the full-screen viewer, show-and-tell and the town, is drawn through CardRig’s material, and so through this shader; the Dex’s grids and the lists draw their cards without it. By my count, 13 of the 34 tests in KiradexUITests.swift, one of the three files in the app’s UI-test target, save a screenshot with a card on screen: in the inspector, the full-screen viewer or show-and-tell, on a hall pedestal, or held up in the plaza. Two of them go to a foil card on purpose, both only when the live catalog is switched on: testLiveWalkToAHoloCard, which walks “to a card with real foil,” base1-4, and testLiveFoilGallery, which opens three cards, one in smooth full foil and two etched by its own comment, and saves two frames of each “for looking at the shader.” None of the 13 asserts anything about the foil. Their assertions are about screens, records and prices: a card that reads as owned, a graded copy’s “PSA 10” label, the illustrator’s credit, a card that stays on the want list and, on the walk to base1-4, a “TCGplayer market” price credit, the Have button selected and a Collection Value shown in dollars. The one test that reads pixels, testTheViewerShowsTheCardEveryTime, checks only that the full-screen viewer is not black. The target’s other two files assert nothing about the foil either: five of the eight tests in ScreenshotTour.swift stop on a card in the inspector or the full-screen viewer and ask the Mac to capture the Simulator, asserting only that the screens appear, and the tests in MotionWalkTests.swift read the town’s motion log and save no picture. The screenshots are written only when a folder for them is set.7062

Applied to the index

I transcribed FoilStyle into Python and fed it TCGdex’s rarity and variant types from the pinned files. The app reads the API’s four booleans, which on my reading are generated from those same variant lists; I checked that on the seven saved API responses, not on every card.758 Per English era, the number of index cards drawn each way:

Stacked horizontal bars, one per English era, showing the share of index cards Kiradex draws with no foil, the art-window holo, the reverse mask, full foil or etched foil. Starlight 181 none and 47 art window; Cosmos 4,249 none, 1,135 art window, 32 reverse, 44 full, 3 etched; Tinsel 1,338 none, 7 art window, 92 etched; Sheen 1,542 none and 277 etched; Evolutions 83 none and 30 etched; Water Web 2,089 none, 86 art window, 86 full, 656 etched; Line 1,782 none, 686 art window, 505 full, 702 etched; Mirage 1,988 none, 430 art window, 382 full, 898 etched; Mega Evolution 658 none, 207 art window, 100 full, 299 etched.

What the app’s foil choice draws for each English era today; the table below has every count.71

English era none artWindow reverse full etched
Starlight 181 47 0 0 0
Cosmos 4,249 1,135 32 44 3
Tinsel 1,338 7 0 0 92
Sheen 1,542 0 0 0 277
Evolutions 83 0 0 0 30
Water Web 2,089 86 0 86 656
Line 1,782 686 0 505 702
Mirage 1,988 430 0 382 898
Mega Evolution 658 207 0 100 299
Other products 505 137 0 0 0
Japanese series none artWindow reverse full etched
PMCG, neo, VS, web, e, PCG (1996 to 2006) 1,652 497 0 20 15
XY (CP1 and CP2 only) 41 16 0 4 0
SM 1,963 326 0 203 647
S 968 382 0 147 299
SV 2,375 641 0 224 437
M 1,496 52 0 77 299

Both tables are the measurement script’s output.7 Three findings follow.

No XY holo rare shines. The XY era draws 1,542 cards with no foil and 277 etched, and no card gets the art-window holo.7 The 277 are the era’s 252 “Ultra Rare” and 25 “Secret Rare” cards.5 TCGdex uses “Ultra Rare” in this era for regular Pokémon-EX prints as well as full arts: card xy1-1 is “Ultra Rare” in the saved API response, with holo: false and normal: true, while Bulbapedia’s XY list labels the same card, 1/146, a “Rare Holo ex” row and its full-art print, 141/146, “Rare Ultra.”5872 So the catalog carries no printing data for a holo EX, its API answers normal only under the rarity “Ultra Rare,” and the app etches it. Bulbapedia’s etching sentence is about “most Full Art Pokémon-EX,” so on my reading the regular ones are drawn etched when they should carry the era’s holo.47 Black & White draws seven cards with the art-window holo.7

Reverse almost never fires. The reverse mask needs a reverse variant with no plain print, but a reverse is a second printing of a card that also exists plain, so the catalog lists both. 8,195 English index cards have a reverse variant in TCGdex; 32 of 21,256 (0.2%) are drawn as reverse, all in the Cosmos era.75 A collector who records a reverse-holo copy sees the plain card’s foil, or none.

One pattern for every era. Where the app does draw foil, Starlight, Cosmos, Water Web, Line and Mirage look the same: rainbow bands, a diagonal sweep and glitter.63 On the measured counts, the app draws any foil on 15.2% of XY-era cards and 51.5% of Sword & Shield-era cards, with one look for both.5

8. What is measured and what is not

Measured for this post, by scripts in the author’s evidence folder for this post and the working folder beside it, run on October 5, 15 and 16, 2026:974543

  • every foil value in the TCGdex database at commit c5c0a8a, by variant type, set and release date, in both regions, joined to Kiradex’s index;
  • the release dates of the sets that open and close each era, from Bulbapedia’s saved English and Japanese expansion lists;
  • Kiradex’s index by era, with holo and reverse variants per era and a Python copy of FoilStyle applied to every card;
  • for every index card in both languages, whether its TCGdex file carries any variants, by era and by set, and which API answer such a file compiles to, read from TCGdex’s own compiler in the pinned copy;
  • the catalog records of every card the brief’s checks name;
  • the variant sets of every card file in Japanese 151 and English Prismatic Evolutions;
  • which saved pages use which pattern name, grouped by publisher, and Bulbapedia’s 11 pattern headings and 20 plus 5 reverse entries;
  • every share, duration and day count in this post, each with its denominator, in one arithmetic script.

Not verified, or weaker than it reads:

  • No card was looked at. Every description of a pattern is Bulbapedia’s or a company page’s words. None was checked against a physical card, a scan or a photograph, and this post shows no card.
  • Bulbapedia is the backbone, and it is a wiki. Its Holofoil and Rarity pages disagree in places (Section 5), and three of the pages used here carry an “incomplete” banner: the Rarity page, the Cosmos page and the Full Art page.2847 PokéBeach is a fansite and is used as a lead.
  • No company page names a default pattern. The four company names found (キラ, ミラー, “parallel” and “cosmos foil”), and “etched textures” as a description of a finish, are not era names.4
  • Mega Evolution’s default pattern is not named in the pages I read, and the brief’s fallback for it is an assumption.
  • Japanese patterns before Black & White are not named in the pages I read.
  • Black Bolt and White Flare’s Tinsel: the Rarity page and the set page read differently (Section 1).
  • The printers. Cartamundi names Pokémon as a partner without saying which products; the Millennium Print Group account, and its purchase by TPCi in 2022, are PokéBeach’s report. Who prints Japanese cards was not found.
  • Patents. One web search, no assignee search on Google Patents, and no foil patent by The Pokémon Company, Creatures, Nintendo or The Pokémon Company International found. The one foil patent read belongs to Upper Deck and says nothing about Pokémon cards.54
  • No grader article. A search found no PSA or Beckett article on holo patterns.42
  • Unreachable pages. pokemon.com’s card-list PDFs for two sets returned a bot-wall page instead of a PDF; tcg.pokemon.com’s Black Bolt and White Flare page and pokemon-card.com’s S9a and S11a pages returned 404; tcg.pokemon.com’s Paradox Rift page saved as a bot wall; a TCGplayer article on holo patterns rendered no text without JavaScript; three Bulbapedia titles returned 404 and three more returned redirects that were not followed.42
  • What the empty files hide. How many of the 6,085 English index cards with empty files were printed holo is not counted: the catalog does not say, and I read no other source for it card by card.
  • TCGdex’s database against its API. The joins read the database files at one commit; the app reads the live API. That the API’s four booleans follow the database’s variant lists is my reading of the compiler in the pinned copy, checked on seven saved responses; the live service was not queried card by card.1058
  • FoilStyle in Python is my transcription of the Swift, not the Swift.
  • Costs. No frame time, memory or battery figure for the shader, today’s or proposed, was measured; Section 10 marks each one unmeasured.
  • Translations of pokemon-card.com sentences are mine.

9. The craft, as rules with numbers

Element Rule Source
Default English holo Seven named defaults: Starlight (1999); Cosmos across every series from Base Set 2 to Call of Legends (2000 to 2011); then one per series from 2011: Tinsel (2011), Sheen (2014), Water Web (2017), Line (2020), Mirage (2023); none named for Mega Evolution (2025). All seven names are collector terms recorded by Bulbapedia Bulbapedia, Holofoil and Rarity pages; parsed list123
The long one Cosmos: 10.96 years from Base Set 2 (February 24, 2000) to Call of Legends (February 9, 2011); Tinsel, Sheen, Water Web and Line 2.78 to 3.14 years each, opening set to next opening set, each closing with its series; Mirage 2.49 years to Mega Evolution’s opening, whose default no source names arithmetic on Bulbapedia’s dates5
Direction Horizontal stripes: Black & White era. Diagonal sheen: XY era, international bottom right to top left over the art, Japanese bottom left to top right over the whole card. Thin vertical lines: Sword & Shield era. Broad horizontal sheen with silver foil border: Scarlet & Violet era Bulbapedia12
Japanese border A foiled border on a Japanese holo: Black & White, Sun & Moon or Sword & Shield era; English standard holo borders stayed plain in those three eras; Scarlet & Violet holo rares gained a silver foil border Bulbapedia12
Japan first Japanese opening sets led English ones by 129, 54, 56, 63 and 70 days for Tinsel to Mirage arithmetic on Bulbapedia’s lists5
Every Rare a holo Japan from December 17, 2010; English from March 31, 2023; 4,487 days apart Bulbapedia; arithmetic15
Reverse holo One per pack from Legendary Collection (May 24, 2002), two from Scarlet & Violet; foil everywhere but the art, except from EX Hidden Legends to EX Power Keepers, when it moved into the art behind the Pokémon (EX Dragon Frontiers on the Pokémon) Bulbapedia13
Parallels A ball-pattern treatment of their own, in words that overlap the reverse’s: ミラー in Japan (151, June 16, 2023, the earliest ball-pattern statement read), “parallel” in English (Prismatic Evolutions, January 17, 2025), filed by TCGdex as reverse variants. Japanese 151 has them in place of an ordinary reverse; Prismatic Evolutions has both pokemon-card.com; tcg.pokemon.com; Bulbapedia; TCGdex38403643
Full arts “etched textures” in the company’s words; “embossed etching” on most English full-art EX and all full-art GX and V in Bulbapedia’s pokemon.com; Bulbapedia1747
Promo pattern Cosmos after 2011, by Bulbapedia’s account; in TCGdex, 388 of the 477 English cosmos variants are in sets released from 2011 on (all of them from November 15, 2019) and 89 in earlier sets; “cosmos foil” on a company prize page Bulbapedia; TCGdex; play.pokemon.com89545
Names Four company terms: キラ, ミラー, “parallel,” “cosmos foil.” Everything else is a collector term; “galaxy” is unsafe (Cosmos to Bulbapedia; mostly Fossil to TCGdex, 123 of 131 variants) measured search; TCGdex45
Catalog TCGdex names a foil on 6.6% of English and 4.9% of Japanese index cards. Its files carry no variants for 6,085 of 21,256 English index cards (28.6%): 1,417 of 1,437 Black & White-era, all 1,819 XY-era, all 113 Evolutions and 2,495 of 2,917 Sun & Moon-era cards, and 241 trainer-kit cards. Japanese: 210 of 12,781 (1.6%). Missing data, not non-holo cards measured join96
App today One pattern for every era; no art-window holo on any XY card; 32 of 21,256 English cards ever drawn as reverse measured transcription; Kiradex763
What chooses a pattern (proposed) The copy’s recorded finish, then the catalog’s named foil, then the etched mask, then the set-and-language era default; the higher level wins when two disagree Section 11, item 1

10. The Apple way: what the shader has to work with

Kiradex draws the card with RealityKit, and everything the brief asks for fits in the surface shader it already has, on my reading of the code.62 The interfaces below are quoted from the iOS SDK in Xcode 27.0 (build 27A266a), read on October 5, 2026; costs are unmeasured, and I say so for each.73

  • CustomMaterial with a surface shader. Declared “@available(macOS 12.0, iOS 15.0, macCatalyst 15.0, tvOS 26.0, *)” and unavailable on visionOS in this SDK; its lighting models include clearcoat, the one Kiradex uses.7362 The card’s face is the base-color texture; there is no second texture today.62
  • custom_parameter(), in the shader header: “Returns a float4 value, which you set on a model’s CustomMaterial,” and “You can use this for any purpose, as its value has no pre-existing meaning within RealityKit.”73 Kiradex uses one of its four components for the mask and sets the strength to 1; the other two are free, which is all the room the brief needs.62
  • uniforms().time(): “Returns the current simulation time, which you can use to animate other values,” and “Time is expressed as seconds since RealityKit began rendering.”73 The shader does not read it today.63 It is what a slow drift needs on stages where nobody is tilting the card.
  • set_normal(): “Sets the tangent-space normal of the current fragment,” and “You can set this value to influence lighting calculations.”73 Today’s etched ridges only brighten the glow; a perturbed normal would let them catch the scene’s light under the clearcoat as well.63
  • Core Motion. CMMotionManager is declared available from iOS 4.0 in the header; Kiradex samples device motion at 1/60 s and caps the added turn at 0.45 radians.7367
  • Reduce Motion. UIKit’s UIAccessibilityIsReduceMotionEnabled is declared from iOS 8.0, and SwiftUI exposes accessibilityReduceMotion in the environment, which CardStage already reads to stop the idle sway.7368 PlazaStage, which draws the plaza and the hall, does not read it today.12 The same flag should stop any time-driven drift, on every stage (item 9).

Costs. Unmeasured. Nothing here was run on a phone for this post: there is no frame time, no GPU time, no memory figure and no battery figure for today’s shader or a patterned one. On my reading of the code, every proposed pattern is a few arithmetic lines per fragment in the same function, with no texture fetch beyond the face, so the proposal needs no additional foil texture. Its total memory cost, the per-set fields it adds to the index included (brief item 2), is unmeasured, and whether frame time grows is a measurement for the app’s own capture (brief item 9).63

11. The brief: what Kiradex builds and the checks it must pass

The app has moved since October 5. Everything below was written against the app at commits cf3beb1 and 5a344e3 (October 5, 2026), and every sentence that says “today” means those reads. By commit fc9d4876 on October 15 (17:45 Pacific) the UI-test target held six files, not three: KiradexUITests.swift with 39 functions named test..., ScreenshotTour.swift with 9, MotionWalkTests.swift with 11, and three files added since October 5, LensWalkTests.swift (4), StoreWalkTests.swift (3) and SandboxWalkTests.swift (1). The counts in Section 7 and in its note on the UI tests are the October 5 counts and are dated there. By the same commit the plaza also holds up other collectors’ cards, through a fourth CardRig.makeCard call and a second liftCard, which item 9’s Reduce Motion rule covers too, and the inspector, when a card’s catalog detail has not loaded or carries no rarity, takes the rarity from the card’s price data. That price data is a second per-printing source: by the same commit the price readout (PriceStore.swift) reads prices from the app’s own store, “built from Scrydex’s catalog,” and titles each printing from the store’s variant key, among them “Poké Ball Reverse,” “Master Ball Reverse” and “Cosmos Holo”; item 12 now renames the two ball titles. The bundled English index has moved too: at the same commit CardIndex-en.json holds 204 sets, 21,358 cards and 36 cards whose names carry a ball name, against the October 2 index’s 201, 21,256 and 33; item 2’s counts are the October 2 index’s.74 The brief stands as the record of what was asked and as the acceptance checks.75

This is what the app should do with the facts above. None of it has shipped. Each item ends with a check that a capture, a log line or a script can verify. Every pattern is Kiradex’s own procedural shader code, written from a description of what a pattern looks like; nothing is traced or sampled from a card, and no card scan, foil photograph, set logo, Energy or type symbol, or ball motif enters the shader or the app’s assets.

1. Keep the mask; resolve the pattern in one order

FoilStyle stays, as the mask: where the foil is.11 A new HoloPattern says what the foil looks like. Pattern names are Kiradex’s own descriptive names; the collector term appears only as a label on the card page (item 10).

One resolver chooses both, FoilChoice.resolve(setID:language:rarity:variants:detailed:copyFinish:). Its inputs are the card’s set and language, its rarity string, the four booleans the app decodes today, the catalog’s variant list with each variant’s type, foil, size and variantId (variants_detailed, decoded as item 11 describes), and the copy’s recorded finish, if there is one. It returns the mask, the pattern and the level that decided.116958 The levels, highest first:

  1. The copy’s recorded finish. It decides the mask (item 6). A copy recorded as a patterned parallel, a CardFinish case the app does not have today, draws the reverse mask and takes pattern 11 here, and nothing below is read. Without a recorded finish, or with “1st Edition,” the mask is today’s FoilStyle choice.
  2. The catalog’s named foil, read from one variant type that the mask chooses: the holo variants for an artWindow or full mask, the reverse variants for a reverse mask. An etched mask skips this level, because level 3 answers it, and a none mask skips it too. starlight gives pattern 1, cosmos 2, tinsel 3, cracked-ice 8, league, player-reward and professor-program 9, and the ball, team and energy values 11; galaxy (unsafe, Section 5), gold, rainbow, glitter and mirror name no pattern here. The level answers only when the mask’s type has at least one variant, every one of them names a foil, and all those foils give the same pattern; so the pokeball and masterball reverses of a Japanese 151 card, both pattern 11, answer 11. A variant with no foil counts as a plain one, so a plain holo beside a cracked-ice holo, or a plain reverse beside ball-pattern ones, disagree, and only the copy could say which printing the collector has. Only standard-size variants count: a variant whose size is jumbo is a separate oversized printing and is left out (the API reports a size on every variant, standard where the file names none). In the pinned copy, leaving them out changes the level-2 answer of four English index cards, the promos DP24, DP26, DP27 and DP40, from no answer to pattern 2, the pattern their era default gives anyway.4950 When the level does not answer, the choice passes down.
  3. The mask. A none mask draws nothing: the resolver returns no pattern, and the deciding level is 1 if a “Normal” copy set the mask and 3 otherwise. An etched mask, which today’s ten etched rarity strings produce, takes pattern 10.
  4. The era default, from the set and language alone, through the table below: patterns 1 to 7f for the holo masks, and for a reverse mask the set’s reverse default, patterns 12 to 16, because a reverse’s treatment is its own fact per era and not the holo pattern of the same years (the reverse defaults below). This is the only level the per-set field stores (item 2). Rarity words never choose it; they reach the pattern only through the mask, at levels 2 and 3. A set in an unassigned product (the trainer kits, McDonald’s collections and other sets outside the expansion series, as the measurement script classes them) has no era default and no reverse default, and its cards that reach this level keep today’s look on either mask, called pattern 0 here.

After the levels, the set’s flags apply to the mask they name: the whole-face flag turns an artWindow mask into full (Japanese XY), and the border flag adds the border ring to an artWindow mask (item 4); full and etched already cover the ring. When two levels disagree, the higher one wins; items 1, 6, 7 and 8 each check a card where that happens.

The resolver, as one table: the first row says how each mask arises, and each later row says what that level reads and returns for it. In it, today’s choice means FoilStyle from the rarity and the four booleans, used when no copy is recorded or the copy is “1st Edition.”

Step none artWindow reverse full etched
Mask, from level 1 or today’s choice a “Normal” copy, or today’s choice a “Holo” copy whose rarity calls for neither full nor etched foil, or today’s choice a “Reverse Holo” or parallel copy, or today’s choice a “Holo” copy whose rarity calls for full foil, or today’s choice a “Holo” copy whose rarity calls for etched foil, or today’s choice
Level 1 pattern none none 11 for a parallel copy, and stop none none
Level 2 reads skipped holo variants reverse variants holo variants skipped
Level 3 no pattern; nothing draws passes passes passes 10
Level 4 not reached era default, or 0 for an unassigned product reverse default, or 0 for an unassigned product era default, or 0 for an unassigned product not reached
Set flags none apply whole face makes it full; border adds the ring; the direction flag passes to the shader none apply the direction flag passes to the shader none apply
Id Kiradex name Collector term (label only) Level that gives it, and from what Set flags (item 2) Shape, as the app draws it
1 scattered stars Starlight 4: base1 to base3, and xy12 (sharper); 2: foil starlight none named four-point stars of several sizes on a jittered grid, slightly soft, each lighting at its own angle
2 dots and rings Cosmos 4: the base series after base1 to base3 (Base Set 2 on, and the Wizards Black Star Promos, basep, from July 1, 1999), and the gym, neo, lc, ecard, ex, pop, dp, pl, hgss and col series; 2: foil cosmos none named discs and thin rings of mixed radius on a jittered grid, a rare swirl, sparkle per cell
3 horizontal stripes Tinsel 4: bw; 2: foil tinsel border (Japanese) fine horizontal stripes whose phase follows vertical tilt
4 diagonal sheen Sheen 4: xy whole face and reversed direction (Japanese) one broad diagonal band; English art window only, bottom right to top left; Japanese whole face, bottom left to top right
5 waves Water Web 4: sm border (Japanese) stripes warped by a sine of the other axis
6 vertical lines Line 4: swsh border (Japanese) fine vertical lines whose brightness sweeps top to bottom with vertical tilt
7 horizontal sheen Mirage 4: sv border, both languages on my reading (Bulbapedia names holo rares and no language) one broad horizontal band
7f horizontal sheen, fallback none named 4: me none named pattern 7’s function, marked in code as an assumption until a source names the Mega Evolution default
8 shards Cracked Ice 2: foil cracked-ice Voronoi cells, each with its own facing, lit one at a time
9 crosshatch Crosshatch 2: foil league, player-reward or professor-program (my reading of “cards awarded at Play! Pokémon events”) two crossed sets of diagonal lines; today’s etch function already draws this
10 etched (company words: “etched textures”) 3: the etched mask today’s crossed ridges, plus a perturbed normal (item 5)
11 icon tiles none: the company’s motif is not used 1: a copy recorded as a patterned parallel, on the reverse mask; 2: a ball, team or energy foil Kiradex’s own kira star in a tiled grid of varied sizes; never a ball, a type symbol or a logo
12 plain reverse none 4, reverse mask: the plain-foil reverse eras, Japanese sets, and the deferred sets below today’s rainbow and sweep with no pattern field
13 star tiles none: the source’s tiles hold type symbols 4, reverse mask: Emerging Powers to Steam Siege Kiradex’s kira star, one size, in an even grid over the reverse mask
14 one large star none 4, reverse mask: Sun & Moon to Cosmic Eclipse one large kira star on the left half of the face, the rest plain
15 mirror tiles none 4, reverse mask: Sword & Shield to Crown Zenith pattern 13’s grid on a mirror base: an uncolored sheen, no rainbow
16 mixed tiles none 4, reverse mask: Scarlet & Violet to Black Bolt and White Flare pattern 13’s grid with stars of three sizes

Reverse defaults. Bulbapedia’s reverse list (Section 3) gives each run of English sets its own reverse treatment, and the reverse mask takes that, not the holo pattern: Expedition Base Set to EX Team Magma vs Team Aqua (ecard1 to ex4) a flat foil, pattern 12; Diamond & Pearl to Black & White (dp1 to bw1) plain again, 12; Emerging Powers to Steam Siege (bw2 to xy11) the card’s type symbol in the background, drawn as Kiradex’s own star tiles, 13; Evolutions (xy12) plain, 12; Sun & Moon to Cosmic Eclipse (sm1 to sm12) a large type symbol on the left, drawn as one large star, 14; Sword & Shield to Crown Zenith (swsh1 to swsh12.5) tiles on “a mirror foil base” that lacks “any of the color scattering expected from holofoil cards,” so pattern 15 draws its tiles with no rainbow; Scarlet & Violet to Black Bolt and White Flare (sv01 to sv10.5w) “a more intricate tile design” with symbols “of different sizes,” 16, keeping the rainbow, because the mirror sentence is not extended to them (Section 3); Mega Evolution on (me01 and later) plain, 12.1 The set ids are TCGdex’s, and a run means every set from the first id to the last in the order Kiradex’s index lists them, its promos included where the index lists them inside the run (bwp, swshp and swsh12.5gg, listed just outside their runs, get 12); the trainer kits and McDonald’s collections inside a run are unassigned products, take no field and keep today’s look (0) on either mask, 30 sets in all.7 Two runs are deferred and labeled, not drawn as the source describes. Legendary Collection’s reverse covers the card “aside from the card’s artwork,” today’s reverse mask, so only its “fireworks” design is deferred: it gets pattern 12, marked in code as not the source’s treatment. EX Hidden Legends to EX Power Keepers (ex5 to ex16) put the reverse foil inside the art window, on my reading of the wiki’s entries (behind the Pokémon in Hidden Legends, the art’s background without the Pokémon from Delta Species on, the Pokémon itself in EX Dragon Frontiers), with patterns among them energy symbols, balls and set logos; those sets get 12 on today’s reverse mask, marked as neither the source’s treatment nor its mask, until a mask for foil inside the art exists. Treatments the list gives to single cards or card types (Team Plasma and Double Crisis cards plain, Ancient Trait cards plain only in the name area and the bottom quarter, Ancient and Future cards plain, gold foil on some EX Rare reverses) are not drawn; that is my simplification. Every Japanese set, and every assigned English set the runs above do not name, gets 12, with a code comment that no source I read names a Japanese reverse treatment.

The era assignment is the one the measurement script uses, by TCGdex series id and language.7 Japanese series before Black & White (PMCG, neo, VS, web, e, PCG; 2,184 index cards) get pattern 2 at level 4, with a code comment and a card-page line saying that no source dates their foil.7 The Black Bolt and White Flare question (Section 1) stays open: those sets get pattern 7 at level 4, and the three cards both TCGdex and Bulbapedia’s set page record as Tinsel get pattern 3 at level 2, through their holo variant’s foil, once a Holo copy is recorded. Each of the three is also printed plain, so with no copy its mask is none and nothing draws.57616

Check (unit test). Level 4 alone: HoloPattern.era(setID:language:) returns 1 for base1, base2 and base3; 2 for base4, neo1, ecard1, ex1, hgss1 and col1; 3 for bw1; 4 for xy1 with no flags, and 4 with the reversed-direction and whole-face flags for the Japanese CP1; 1 for xy12; 5 for sm1, with the border flag for the Japanese SM sets; 6 for swsh1; 7 with the border flag for sv01 and for the Japanese SV1S; 7f for me01, marked fallback; no era default for tk-xy-n (a trainer kit). HoloPattern.reverseDefault(setID:language:) returns no reverse default for tk-xy-n and 2015xy, unassigned products inside the 13 run, and 12 for ecard1, ex4, dp1, bw1, xy12 and me01; 13 for bw2 and xy11; 14 for sm1 and sm12; 15 for swsh1 and swsh12.5; 16 for sv01 and sv10.5w; 12, marked deferred, for lc, ex5 and ex16; and 12 for the Japanese SV1S. With the Japanese CP1’s flags, a Holo copy of a CP1 holo resolves to mask full. The resolver, on fixtures copied from the pinned catalog’s records for these cards:77

  • swsh3-44 (a plain print, one holo variant named cracked-ice, one plain reverse; era default 6): with no copy, mask none, today’s choice; with a Holo copy, mask artWindow and pattern 8 from level 2, over level 4’s 6; with a Reverse Holo copy, mask reverse and pattern 15 from level 4’s reverse default, because its one reverse variant names no foil; not the holo era’s 6.
  • ecard3-146 (two holo variants, one plain and one cracked-ice that the file marks as jumbo-size, and one plain reverse; era default 2): mask artWindow; level 2 leaves the jumbo variant out and finds one plain holo, so it does not answer; pattern 2 from level 4.
  • sv01-244 (a Special Illustration Rare with one holo variant, no foil named; era default 7): mask etched, pattern 10 from level 3, over level 4’s 7.
  • sv10.5w-011 (a plain print, a plain reverse, a pokeball and a masterball reverse, and one holo named tinsel; era default 7): with no copy, mask none and nothing draws; with a Holo copy, mask artWindow and pattern 3 from level 2; with a Reverse Holo copy, pattern 16 from level 4’s reverse default, because its three reverse variants disagree; recorded as a patterned parallel, pattern 11 from level 1.
  • SV2a-001 (Japanese 151, a Common: a plain print, a pokeball and a masterball reverse, no plain reverse; era default 7, Japanese reverse default 12): with no copy, mask none and nothing draws; with a Reverse Holo copy, mask reverse and pattern 11 from level 2, because both reverse foils give 11, not level 4’s plain 12.43
  • base1-4 (four holo variants, none named; era default 1): mask artWindow, pattern 1 from level 4.

2. Store the era default in the index

The era default, level 4 and nothing else, is computed when the index is built and stored as one small field per set in CardIndex-en.json and CardIndex-ja.json: a pattern id, the reverse default and the set flags (border 1, reversed direction 2, whole face 8), so the app does not recompute it per card. A set in an unassigned product gets no field. The copy’s finish, the named foil and the mask are card-level, and the resolver reads them when a card’s detail loads (item 1).

Check (script). A script over both index files asserts that every set the era table assigns has a field, that every set in an unassigned product has none, that a field holds only a pattern id from 1 to 7f, a reverse default from 12 to 16 and the three set flags, that every assigned English set inside item 1’s reverse runs carries its run’s reverse default (the 30 unassigned sets inside them carry no field), and prints cards per era. Against the October 2, 2026 index, the English counts per era must equal Section 6’s: 228; 5,463; 1,437; 1,819; 113; 2,917; 3,675; 3,698; 1,264; and 642 cards in unassigned products, which carry no field. The Japanese counts per series group must equal the measurement’s: 2,184 (pattern 2), 61 (4), 3,139 (5), 1,796 (6), 3,677 (7) and 1,924 (7f), every Japanese set assigned.7

3. One shader, small pattern functions

kiraSurface keeps its mask code and its “wake” term; the line that builds the rainbow bands and the sweep becomes a call to one function per pattern, each returning a 0 to 1 field the rainbow is multiplied by. Pattern 15 alone multiplies an uncolored sheen instead of the rainbow, because its source describes mirror foil without color scattering.631 Today’s look becomes one pattern among several, not the default for everything. The custom parameter carries mask, strength, pattern id and flags: x the mask (0 to 4, as now), y the strength, z the pattern id, w small integer flags for border foil (1), sheen direction reversed (2) and time drift allowed (4). The set’s whole-face flag (8) never reaches the shader: the resolver has already turned the mask to full.6273

Check (capture and script). A debug scene renders a mid-gray face with each pattern at three tilts and saves the emissive buffer as a PNG. A tilt is written as the shader’s tilt, the eye direction in the card’s own frame: x across the card’s width, y along its height, as the shader builds it from the mesh, whose x spans the 63 mm side.63 The three tilts are (0, 0), (0.3, 0), a horizontal tilt, and (0, 0.3), a vertical one. A script computes each image’s dominant orientation with a structure tensor: pattern 3 within 10 degrees of horizontal, pattern 6 within 10 degrees of vertical, pattern 4 diagonal with the sign set by the direction flag, pattern 7 horizontal; patterns 1, 2 and 8 have no dominant orientation (coherence below a threshold the script prints). Phase is then tested on the axis each pattern’s row names. Patterns 3 and 6, whose rows say their phase follows vertical tilt, must move between the (0, 0) and (0, 0.3) frames. Patterns 4, 5 and 7, whose rows name no axis, must move between (0, 0) and at least one of the two tilted frames. Patterns 1, 2 and 8 have no band or stripe, and patterns 9, 10 and 11 draw crossed lines, ridges or tiles with no phase in their rows, so those six are not tested for phase; nor are the reverse patterns 12 to 16. Color is tested instead for the reverse patterns, each rendered on the reverse mask: pattern 15’s emissive has a mean saturation below a threshold the script prints, and patterns 12, 13, 14 and 16 are above it.

4. The Japanese border, and Sheen’s direction

When the border flag is set and the mask is artWindow, the foil also fills the ring between the card’s edge and the printed area, about 2.8 mm wide at the shader’s current rectangles; for Japanese Sheen, the whole-face flag makes the mask full and the direction flag reverses the band.512 The flags are per set, so in a Scarlet & Violet set the border reaches every art-window mask, including a Holo copy of a card below Rare, where Bulbapedia names only holo rares; that is my simplification, and the card page does not describe the border.

Check (capture and script). Rendered at the same tilt, a Japanese Sun & Moon-era holo and an English Sun & Moon-era holo differ in the ring: the script’s mean emissive in the ring is above a printed threshold for the Japanese card and zero for the English one; an English Scarlet & Violet holo rare is above it too.

5. Etched ridges that catch the light

Pattern 10 also writes a perturbed tangent-space normal with set_normal, from the same ridge function, so the ridges respond to the scene light and not only to the glow.7363

Check (capture and script, debug scene). The same etched card, on item 3’s mid-gray face, is rendered twice per light position, once with the perturbed normal and once with set_normal left flat, every other input identical: the face, mask, strength, tilt, base color, roughness and camera, with the emissive term zeroed in a debug build. A none card is not the control, because the shader also lowers its base color and roughness with the mask (mix(0.45, 0.2, mask)).63 The key light moves from left to right in five steps. A script takes each pair’s difference image and measures it at the ridge scale: the mean absolute luminance difference between ridge crests and the troughs beside them, from the ridge function’s own phase, must exceed a printed threshold at every light position, and must change sign or size as the light crosses; the flat-normal frames, compared with each other across light positions, show no ridge-scale structure above the same threshold.

6. The copy’s recorded finish comes first (level 1)

When the collector has recorded a copy’s finish, it decides the mask: a “Reverse Holo” copy draws the reverse mask; a “Holo” copy draws the art-window mask, except that a rarity calling for full or etched foil keeps that mask; a “Normal” copy draws none; “1st Edition” says nothing about foil and leaves the mask to the catalog.69 CardFinish gains one case, parallel, for a patterned parallel printing: it draws the reverse mask, which is where TCGdex files those printings (its ball-pattern variants are reverse variants, Section 6), and takes pattern 11 at level 1. This fixes the reverse that almost never fires: 32 of 21,256 English index cards today.7

Check (UI test, on fixtures). The test launches with -fixtureCatalog, whose catalog today holds only six invented kira1 cards; for this item and items 7 and 8 it gains the named cards’ details as the pinned compiler answers them (for an empty file, the one generated normal variant), each in its own language, from the same pinned copy item 1’s resolver tests use, so the result does not change when TCGdex fills a card’s variants. swsh3-44, whose catalog record has a plain print, a plain reverse and one holo variant named cracked-ice: with no copy it opens with mask none, today’s choice; with an owned copy marked Reverse Holo, with mask reverse and pattern 15, the Sword & Shield reverse default; marked Holo, with mask artWindow and pattern 8, where the copy overrides the catalog’s plain-print answer and the named foil overrides the Sword & Shield era default. The debug value item 8 adds to the inspector’s card stage reports the mask, pattern and deciding level each time.7778

7. Where the catalog is silent, say so

The rule is the file’s, as the app can see it: a card whose variants_detailed is a single normal variant whose variantId is generated. That is what TCGdex’s compiler makes of a file that carries no variants, and of an old-form file whose only true boolean is normal; in the pinned copy it covers 6,086 English index cards (6,085 empty files and one old-form file) and 210 Japanese ones, by two counts that agree.10661 For such a card the inspector shows “Finish not in the catalog” and offers the copy’s finish picker. It does not guess a holo, and it does not call the card non-holo. The mask still follows item 1: with no copy recorded it is today’s choice, so a rarity that calls for full or etched foil still draws it, etched with pattern 10, and every other such card draws none. That keeps Section 7’s over-etch on the XY era’s 252 “Ultra Rare” and 25 “Secret Rare” cards, all with empty files, and a Holo copy does not lift it, because item 6 keeps a rarity’s etched mask; the fix waits on the per-card flag named in the last list of this brief. Once a finish is recorded, level 1 decides the mask, level 2 finds no named foil (the generated variant names none), and the era default gives the pattern.7558

Check (UI test, on fixtures). On item 6’s fixture catalog, with each named card’s details as the pinned compiler answers them (for an empty file, the one generated normal variant), in its own language, the line “Finish not in the catalog” appears for one card from each era with empty files, as the saved index and the pinned copy hold them: bw1-10 (Black & White), xy1-5 (XY), xy12-1 (Evolutions), sm1-1 (Sun & Moon) and tk-xy-n-1 (a trainer kit) in English, and SV9a-001 (Scarlet & Violet) and neo4-013 (the series before Black & White, which share pattern 2) in Japanese. It does not appear for sm3-28 or smp-SM01, Sun & Moon cards whose files are filled, or for PMCG2-002, whose file writes its one normal variant as variants : [ and so gets a hashed id. bw1-10 and xy1-5, both “Rare” with no foil today, draw nothing until a finish is chosen; choosing Holo then draws the art window with pattern 3 on bw1-10 and pattern 4 on xy1-5, the copy overriding the catalog’s normal-only answer. xy12-1, an “Ultra Rare,” shows the line and draws mask etched with pattern 10 from level 3, with no copy and with a Holo copy alike. Masks, patterns and levels are read from the stage’s debug value (item 8).77 A script that applies the same rule to the compiled answers of the pinned copy flags exactly 6,086 English and 210 Japanese index cards.661

8. The town shows each card’s own foil

The plaza, the hall and show-and-tell resolve each shown card with item 1’s resolver, from the card’s catalog detail loaded as the inspector loads it, and pass its mask and pattern instead of .artWindow for all; the rig’s Dressing carries one mask and pattern per face instead of one foil for every face.1264 The hall knows another collector’s card only by its key, not their copy, so their cards resolve from level 2 down; the player’s own card can use level 1.12

Check (UI test, on fixtures, with the town’s server). A debug build exposes each pedestal card’s mask, pattern and deciding level as an accessibility value, and the inspector’s card-stage element, whose accessibility value today is the pose VoiceOver reads (“Front”), carries the same three after the pose; items 6 and 7 read that one. On item 6’s fixture catalog, with the town’s server running (KIRADEX_PLAZA=1, as the hall’s test already needs) and showing these two cards’ keys, a test puts sv01-244, a Scarlet & Violet Special Illustration Rare, on a hall pedestal and reads mask 4 (etched), pattern 10, level 3, where its era default is 7; on the next pedestal, ecard3-146 reads mask 1 (art window), pattern 2, level 4.77

9. A slow drift where nobody holds the card, never under Reduce Motion

On stages where no hand tilts the card (the plaza, the hall, show-and-tell), the shader may move its light slowly with time() when flag 4 is set.73 Reduce Motion has to be read in two places. Show-and-tell draws through CardStage, which already reads it and stops the idle sway; there CardStage clears flag 4 as well.68 The plaza and the hall draw through PlazaStage, which reads no Reduce Motion flag today. It gains the same accessibilityReduceMotion read beside its displayScale one and passes the value to the rig, which clears flag 4 on every card it builds (every CardRig.makeCard call; three on October 5) and, on my reading of what Reduce Motion asks, holds still the turns it already gives those cards in turnShowcase and in holdCard and liftCard.12

Check (capture, in the Simulator). With Reduce Motion on, two frames one second apart at a fixed camera are byte-identical in the card’s region for a hall pedestal card, for a card held up in the plaza and for a show-and-tell card; with it off, they differ. The capture runs in the Simulator because the show-and-tell card also follows the phone’s tilt: CardStage starts the tilt reader whatever the setting, and the rig adds the tilt to the card’s turn every frame. That turn is the user’s own motion, and on my reading Reduce Motion rightly leaves it on. The Simulator has no gyroscope, so there the tilt adds nothing. On a phone lying still the reader still eases the turn toward each new gyroscope reading, and the shader’s glitter and bands follow the eye direction, so sensor noise alone could change a byte.68626763 Check (Instruments, on a device). Three 10-second Instruments captures of the inspector on one test device with today’s shader, and three with the patterned one, log frame time; the patterned shader passes when its dropped frames, averaged over its three captures, exceed today’s average by no more than 1% of the frames a 10-second capture holds at the device’s refresh rate (6 at 60 frames a second). All six numbers are recorded, because today they are unmeasured.

10. A finish line on the card page, with whose word it is

Under the card: for example, “Holo pattern: horizontal stripes (collectors call it Tinsel), Black & White era, 2011 to 2013.” The collector term is labeled as one and sourced to Bulbapedia; company terms are given as the company uses them (キラ, ミラー, “parallel,” “cosmos foil”). For Japanese cards before Black Collection (December 2010): “No source we read names this era’s foil.” For Mega Evolution: “No source we read names this series’ default pattern.” The word “galaxy” is never printed as a fact (Section 5).

Check (snapshot test). The strings for one card per era match a fixture, each collector term followed by “(collectors call it …),” and no line in those fixtures, and no string-catalog entry, contains “galaxy.” The resolver may still name galaxy in code, as a catalog value that gives no pattern (item 1).

11. “Also printed as,” from the catalog’s variant list

CardDetail also decodes variants_detailed[].foil (optional) to show special printings in words without marks, worded from the foil and the variant’s type: for example, “Also printed as a cosmos-foil reverse holo” for a reverse variant named cosmos, or “Also printed as a special-pattern parallel (see the set’s product page),” with a link to the official product page where one exists, and never the ball’s name. A variant’s stamp is a mark printed on the card, not a finish, and produces no line.5857

Check (unit test). Decoding the saved response for sv03.5-001 yields exactly one line, “Also printed as a cosmos-foil reverse holo” for its reverse variant named cosmos, and no line for its normal variant stamped set-logo; a fixture with foil: "pokeball" yields the special-pattern line, and none of the lines it yields contains “ball.”

12. Rights, by script

Check (script). The card shader, kiraSurface, samples no texture other than the card face; the app’s one other surface shader, the town’s glowSurface, samples its own pictures of light and fireflies, which are not foil, and the check leaves it out by name.6379 The asset catalog gains no foil image. No string literal in the app target’s Swift code and no string-catalog entry contains “Poké Ball,” “Master Ball” or “Pokéball,” in any case and with or without the accent or the space, comments left out, with two exclusions. Catalog values are excluded: the resolver and item 11’s decoder may name pokeball and masterball, which that match catches, as catalog values that give pattern 11, just as item 10 leaves the resolver free to name galaxy, and the price readout looks prices up by its store’s variant keys, pokeBallReverseHolofoil and masterBallReverseHolofoil among them; so a literal that is exactly one of the catalog’s foil values or one of the store’s variant keys passes.975 Catalog card names are excluded because they are the catalog’s words, not the app’s: the October 2 index held 33 cards whose names carry one of the three, 26 with “Poké Ball” and 7 with “Master Ball” (36 at fc9d4876), and the card grid prints each card’s name as the index gives it. Price titles are not excluded: by October 15 the price readout’s table of variant titles holds “Poké Ball Reverse” and “Master Ball Reverse,” so this item renames those two titles, in my naming “Ball-pattern Reverse” and “Ball-pattern Reverse, rarer,” as item 11 words a patterned printing without the ball’s name; until they are renamed the check fails, and a scan of the committed app at fc9d4876 finds exactly those two titles beside the two keys.7580 On October 5, at commit 5a344e3, no string literal in the app’s Swift code carried one of the three, and the app had no string catalog.80 Pattern 11 draws only Kiradex’s own kira star, the one the town’s design notes already list for the app’s badges, “drawn in our own language (the kira star, holo foil, enamel-pin look).”81

13. Measure the centering gauge on foiled borders before trusting it there

This is a risk for my centering post’s gauge that the facts above raise, and it is unmeasured: Japanese holos of the Black & White, Sun & Moon and Sword & Shield eras, and Scarlet & Violet holo rares (in both languages, on my reading; Bulbapedia’s sentence names no language), foil the very border the gauge measures.12 The gauge finds the border by walking in from the edge until two colors differ by more than a fixed contrast of 38, and the roadmap already lists “glare on foil” as unproven.8213 Glare on a foiled border could move that edge; whether it does, and by how much, nobody has measured.

Check (capture and script). Before any change to the gauge: photograph a set of foiled-border cards and plain-border cards at three tilts each, run the gauge on every frame, and have a script report the spread of each card’s reading across tilts. The item closes when the spread for foiled borders is recorded beside the spread for plain ones.

Not in this brief

  • Recreating any real foil stock: no pattern sheet, no holographic texture sampled from a scan, no description of how a foil is manufactured.
  • A “real or fake” foil checker of any kind.
  • Any price or value claim tied to a finish. TCGplayer’s finish keys (holofoil, reverse-holofoil) stay what they are in the app’s catalog model: labels on prices, which are not advice.65
  • Ball motifs, type or Energy symbols, set logos or creature names in any pattern or asset, or in any string the app writes about a foil; card names stay as the catalog gives them.
  • Fixing the XY “Ultra Rare” over-etch (Section 7): it needs a per-card full-art flag the catalog does not have; xy1-1 and xy1-141 are the fixtures once a source for the flag exists.
  • Naming a Mega Evolution or pre-Black & White Japanese default pattern as fact.

Key Takeaways

If you collect

  • Date a holo by its shine before its symbol: horizontal stripes are the Black & White era (2011 to 2013), a diagonal sheen XY (2014 to 2016), wavy lines Sun & Moon (2017 to 2019), fine vertical lines Sword & Shield (2020 to 2023), a broad horizontal band with a silver border Scarlet & Violet (from 2023). Those are Bulbapedia’s descriptions, under collector names.12
  • On a Japanese holo, look at the border: a foiled border points to the Black & White, Sun & Moon or Sword & Shield eras, where English standard holos had plain ones, unless it is a Scarlet & Violet holo rare, whose silver foil border both languages share on my reading; a Japanese XY holo foils the whole card.12
  • Starlight, Cosmos, Tinsel, Sheen, Water Web, Line and Mirage are collectors’ names. The company’s own words are キラ (kira) for a holo, ミラー (mirror) for extra mirror printings (ball-patterned from 151, 2023), “parallel” for the English patterned ones, and “cosmos foil” on a prize page.4
  • Do not trust “galaxy”: Bulbapedia means Cosmos by it, and TCGdex uses it mostly for Fossil (123 of its 131 galaxy variants).85
  • A reverse holo is foil everywhere but the art (from 2002, one per pack; from 2023, two), except from EX Hidden Legends to EX Power Keepers, when the foil sat in the art behind the Pokémon (EX Dragon Frontiers put it on the Pokémon); the ball-pattern cards, on company pages from 2023 (TCGdex also files two Japanese sets of 2022), are a treatment of their own, called mirror or parallel, which Japanese 151 has in place of an ordinary reverse and Prismatic Evolutions has beside one.138403643
  • After 2011, a Cosmos card is usually a promo, a collector-box card or a prize.845
  • A catalog that lists no holo does not tell you a card was not holo: TCGdex’s files carry no printing data for 5,844 of the 6,286 Black & White, XY, Evolutions and Sun & Moon-era cards in Kiradex’s index, and its API then answers “normal only.”610
  • Nothing here is about value; a finish is a fact about a printing, not a price.

If you build the app

  • Separate where the foil is (the mask) from what it looks like (the pattern), and resolve the pattern in one stated order: the copy’s recorded finish, then the catalog’s named foil, then the etched mask, then the set-and-language era default, which for a reverse is the set’s own reverse treatment, not the holo pattern of the same years. Rarity words choose the mask, never the era.11
  • Let the collector’s recorded finish override the catalog: a mask that needs a reverse variant and no plain print fires on 32 of 21,256 cards.7
  • Where the catalog is silent (6,085 English index cards, 28.6%, whose files carry no variants: all but one from sets released 2011 to 2019, and 96.0% in the Black & White, XY, Evolutions and Sun & Moon eras), show that, and ask the collector; do not guess holo, and do not call the card non-holo.65
  • Use the catalog’s foil values for special printings only; they name 6.6% of English and 4.9% of Japanese index cards and almost never a default.9
  • Label every pattern name with whose word it is, and keep company motifs out of your own effects.4
  • Measure what the foil costs on a phone before shipping more of it; today nobody has.

FAQ

What are the different holo patterns on Pokémon cards?

Bulbapedia, the fan wiki, names seven default English patterns: Starlight (Base Set, Jungle and Fossil, 1999), Cosmos (Base Set 2 in 2000 to Call of Legends in 2011), Tinsel (Black & White, from 2011), Sheen (XY, from 2014), Water Web (Sun & Moon, from 2017), Line (Sword & Shield, from 2020) and Mirage (Scarlet & Violet, from 2023). It also names four special patterns: Cracked Ice (theme decks and blister promos), Crosshatch (Play! Pokémon prizes), Sequin (General Mills promos) and Pixel or Confetti (McDonald’s sets). All of these are collector terms; the one the publisher also uses is “cosmos foil,” on a prize page, and no company page I read names the patterns era by era.134

How can I tell what era a holo Pokémon card is from by its foil?

Look at the direction of the shine. On Bulbapedia’s descriptions, horizontal stripes are Tinsel (Black & White era), a diagonal sheen is Sheen (XY era), a wavy pattern is Water Web (Sun & Moon), thin vertical lines are Line (Sword & Shield), and a broad horizontal sheen with a silver foil border is Mirage (Scarlet & Violet). Scattered blurry stars are the 1999 Starlight sets; dots and rings are Cosmos, the default from 2000 to 2011 and a promo pattern since.128

What is the difference between a holo and a reverse holo?

A holo has the foil on the picture; a reverse holo, in Bulbapedia’s definition, has “Holofoil printing on the background of the card but not on the image of the Pokémon, Trainer card, or Special Energy card.” Reverse holos began with Legendary Collection (May 24, 2002), one per booster pack, and Scarlet & Violet made it two. Their background pattern changed every few sets, from “fireworks” to plain foil to type-symbol tiles, and from Mega Evolution the background is plain again.213

Are Japanese Pokémon card holos different from English ones?

In several eras, yes. Bulbapedia records the pattern on the border of Japanese holos in the Black & White, Sun & Moon and Sword & Shield eras, while English standard holos kept plain borders; Japanese XY holos shine across the whole card, diagonally from bottom left to top right, while English ones cover only the art and run the other way. Japan also made every booster Rare a holo from December 17, 2010, more than 12 years before English cards.125

What is a “mirror” or “parallel” Pokémon card?

On The Pokémon Company’s pages, ミラー (mirror) and “parallel” name printings of a set’s cards with a special ball or symbol pattern in the foil: Japan’s 151 (June 16, 2023) and later sets, and English Prismatic Evolutions (January 17, 2025) and later. They are a treatment of their own, but the words overlap with the reverse holo’s: Bulbapedia calls Prismatic Evolutions’ ordinary reverse treatment a “regular parallel holofoil variant,” and TCGdex files the ball patterns as reverse variants. Japanese 151 prints them beside the normal card with no ordinary reverse; Prismatic Evolutions prints them beside its regular one. Bulbapedia uses “mirror” in three senses of its own, one of them the plain foil base of Sword & Shield-era reverse holos, and TCGdex has a mirror foil value on jumbo-size printings of two promos, so ask whose word it is.38403643123

What does “Cosmos holo” mean on a modern Pokémon card?

Cosmos was the default holo pattern from 2000 to 2011, by Bulbapedia’s account. Since then, the wiki says, “it became a common Holofoil pattern used for promotional cards,” and Bulbapedia’s set pages list Cosmos Holo versions as collector-box exclusives and League prizes; play.pokemon.com itself offers “cosmos foil versions” of Prize Pack cards.820211645

Does the Pokémon Company name its holo patterns?

Not as an era-by-era scheme, in anything I read; one name does appear. The Japanese pages call a holo card キラ (kira) and extra mirror printings ミラー (mirror), ball-patterned from 151 (2023); the English pages say “parallel” and, on a prize page, “cosmos foil”; pokemon.com describes the first full arts as “full-art foil cards with etched textures and a solid-color background.” So Cosmos is the exception, used by the company for prize printings, not as the name of an era’s default; Starlight, Tinsel, Sheen, Water Web, Line and Mirage appear on no company page I searched.417

Related on this site: Pokémon Card Rarity and Set Symbols, English and Japanese is the companion guide to the bottom line of the card, and it meets this one at three points: the Bandit Ring ladder that marks every holo tier キラ, the Scarlet & Violet change that made every Rare a holo, and the rarity words FoilStyle reads; the two agree on every date they share. How Card Centering Is Judged, and How to Measure It is the guide to the border this post says Japanese holos foil, and item 13 of the brief above is the risk it adds to that post’s gauge. Prepare Your App for iPhone Duo: A Worked Example introduced Kiradex, and Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew, Pixel-Art People: Characters and a Creator on iPhone and Pixel-Art Structures: Houses, Halls and Interiors on iPhone cover Kiradex World, the town whose stages this brief asks to show each card’s own foil.

Sources


  1. Bulbapedia, “Holofoil,” raw wikitext saved October 5, 2026 (bulba-holofoil-raw.txt in the author’s evidence folder for this post), https://bulbapedia.bulbagarden.net/wiki/Holofoil. Carries the definition; e-Card-era Japanese non-holos and the e-Reader; the Black Collection and White Collection change and “over 12 years later”; the eleven “Holofoil Patterns” headings (Starlight, Cosmos, Tinsel, Sheen, Cracked Ice, Crosshatch, Water Web, Line, Mirage, Sequin, Pixel) with their descriptions and the Japanese and Korean differences for Tinsel, Sheen and Line; the nine Sword & Shield Cracked Ice theme-deck rows and the Sequin rows; the Reverse Holofoil section (Legendary Collection, 1st Edition, Wizards of the Coast and Magic: The Gathering, two per pack from Scarlet & Violet, the exclusions) and the “Reverse Holofoil Patterns” list with the “mirror foil base” note on the Sword & Shield to Crown Zenith entry. Bulbapedia is a fan wiki under CC BY-NC-SA; every pattern name it records is a collector term. Card images embedded in the page were not saved. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  2. Bulbapedia, “Rarity (TCG),” raw wikitext saved October 4, 2026 (bulba-rarity-tcg-raw.txt, saved for the earlier rarity post and reused), https://bulbapedia.bulbagarden.net/wiki/Rarity_(TCG). Carries the reverse holo definition and its start; the Holofoil Rare and the Scarlet & Violet guarantee; the holofoil paragraph by era (Starlight’s “different sized stars,” Evolutions, Cosmos’s “occasional swirl” and promo use, Tinsel and its 2025 “once-off” return, Sheen “From XY to Steam Siege,” “Water-Web” and Japanese borders, the unnamed vertical stripes, Mirage and silver borders, Cracked Ice’s other names and uses); the finishes of Pokémon-ex, Pokémon Star, LV.X, LEGEND, BREAK, Radiant and Crystal Pokémon; secret rares’ “alternate holofoil scheme.” The page carries an “incomplete” banner. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Author’s measurement, run October 5 and October 16, 2026: measure_holo_eras.py section 1 in the author’s evidence folder for this post, over Bulbapedia’s English and Japanese expansion lists saved as raw wikitext on October 4, 2026; output measure_holo_eras.out.txt. Release dates of the sets that open and close each era (English: Base Set 1999-01-09, Jungle 1999-06-16, Fossil 1999-10-10, Base Set 2 2000-02-24, Legendary Collection 2002-05-24, Expedition Base Set 2002-09-15, EX Ruby & Sapphire 2003-07-18, EX Emerald 2005-05-09, Platinum 2009-02-11, Call of Legends 2011-02-09, Black & White 2011-04-25, Legendary Treasures 2013-11-06, XY 2014-02-05, Steam Siege 2016-08-03, Evolutions 2016-11-02, Sun & Moon 2017-02-03, Cosmic Eclipse 2019-11-01, Sword & Shield 2020-02-07, Crown Zenith 2023-01-20, Scarlet & Violet 2023-03-31, Prismatic Evolutions 2025-01-17, Mega Evolution 2025-09-26; Japanese: Expansion Pack 1996-10-20, Black Collection / White Collection 2010-12-17, Collection X / Y 2013-12-13, Collection Sun / Moon 2016-12-09, Sword / Shield 2019-12-06, Scarlet ex / Violet ex 2023-01-20, Pokémon Card 151 2023-06-16, Battle Region 2022-02-25, Black Bolt / White Flare 2025-06-06, Terastal Fest ex 2024-12-06, MEGA Dream ex 2025-11-28). The list parse finds no row for English 151 or Black Bolt; those dates come from the product pages cited where they are used. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Author’s measurement, run October 5, 2026: measure_terms.py in the author’s evidence folder for this post, which searches every saved page for each pattern name and groups the hits by publisher (The Pokémon Company and The Pokémon Company International, the printer, Bulbapedia, TCGdex, PokéBeach); output measure_terms.out.txt. Company hits: キラ on four pokemon-card.com pages, ミラー on five, “parallel” on tcg.pokemon.com’s Prismatic Evolutions page, “cosmos” on play.pokemon.com’s Prize Pack gallery, “etched” and “texture” on pokemon.com’s Black Bolt and White Flare article; no company hit for starlight, galaxy, tinsel, sheen, water web, line holofoil, mirage, cracked ice, crosshatch, sequin, pixel or confetti, reverse holo, English “mirror” or embossed. Also prints Bulbapedia’s 11 “Holofoil Patterns” headings and its 20 top-level and 5 sub-bullets of “Reverse Holofoil Patterns.” ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  5. Author’s arithmetic, October 5 and October 15, 2026: arith.py in the author’s working folder for this post, with output arith.out.txt. It reads the two measurement outputs, reuses the measurement scripts’ own parsing of the pinned TCGdex copy and Kiradex’s index, and reads the constants in the Kiradex repository’s Kiradex/Inspector/KiraSurface.metal; its Kiradex inputs are the copies stored in commit 5a344e3. It computes, each with its denominator: era lengths and day gaps from Bulbapedia’s dates; shares of the index per era; the coverage shares; the 22 foil values and their grouping; the card numbers behind galaxy, starlight, cracked-ice, mirror and tinsel; the XY era’s rarity strings; the shader’s grid, ridge period, mask areas and tilt limit; row counts in Bulbapedia’s saved set pages (Cracked Ice, Sequin, Crosshatch, Cosmos Holo, Pixel Cosmos Holofoil, Snowflake Holo), one row per balanced Setlist/nmentry template wherever it starts on a line, since some pages put two on one line or one after a header; and, from the empty-file measurement, the per-era shares of index cards whose files carry no variants, the Sun & Moon index cards with a holo variant by set, the day counts from S9a and S11a to Pokémon Card 151, the split of galaxy between Fossil and the Scarlet & Violet sets, and Mirage’s span to Mega Evolution; the 1,396 English index cards with a named foil in five classes, each card in the first that fits (on a promo set by the set’s index name; every named foil rainbow or gold; only energy, in EX Hidden Legends or EX FireRed & LeafGreen; only galaxy, in Fossil; everything else), with each class’s rarity strings, foils and sets, and, for the energy class, the variant type that carries the foil; and the English cosmos variants by set release date before and from 2011, from the per-set line of measure_tcgdex_foil.out.txt. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  6. Author’s measurement, October 5, 2026: r1_no_variants_by_era.py in the author’s evidence folder for this post; output r1_no_variants_by_era.out.txt. It reuses the era mapping of measure_holo_eras.py and the variant parse of measure_tcgdex_foil.py on the TCGdex copy at commit c5c0a8a (committed 2026-09-30T08:41:20Z) and Kiradex’s two index files, and prints, for English and Japanese separately: per era, the index cards and those whose card file carries no variants, with one denominator each; per set, the same, with the first empty card; the rarity strings of the empty cards; and, by the file’s form, how many index cards the pinned compiler answers with exactly one generated normal variant (English: 6,085 empty files and 1 old-form normal-only file; Japanese: 210 empty files). The card files are parsed with the key patterns described under measure_tcgdex_foil.py, so the 47 files of the Japanese set PMCG2 that write variants : [ count as filled. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  7. Author’s measurement, run October 5, 2026: measure_holo_eras.py section 2 in the author’s evidence folder for this post, joining the Kiradex repository’s Kiradex/Resources/CardIndex-en.json and CardIndex-ja.json (dated October 2, 2026 on disk, read only) to the TCGdex database at commit c5c0a8a. Each set is assigned an era by its TCGdex series id; for each era it prints index cards, cards with a holo variant, cards holo-only, cards with a reverse variant, and the count drawn by each FoilStyle case, using a hand transcription of the Swift FoilStyle.init(rarity:variants:) fed TCGdex’s rarity and variant types. Output measure_holo_eras.out.txt. No index card was missing from the TCGdex commit. The card files are parsed with the key patterns described under measure_tcgdex_foil.py. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  8. Bulbapedia, “Cosmos Holofoil (TCG),” raw wikitext saved October 5, 2026 (bulba-cosmos-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Cosmos_Holofoil_(TCG). “Often referred to as Galaxy Holofoil”; default from Base Set 2 until “the start of the Black & White Series in April 2011”; the promo use afterward; the EX Delta Species exception. The page carries an “incomplete” banner. ↩↩↩↩↩↩↩↩↩↩↩↩

  9. Author’s measurement, run October 5, 2026: measure_tcgdex_foil.py in the author’s evidence folder for this post, over the TCGdex cards-database tarball at commit c5c0a8a63fe81746d05b9c95e8f51ed6931f7e78 (committed 2026-09-30T08:41:20Z), downloaded from GitHub; output measure_tcgdex_foil.out.txt. Card files and their variants form per region; every foil value with variant counts, holo, reverse and other types, first and last set with dates, and every set; the join to Kiradex’s index (21,256 English and 12,781 Japanese cards, all found), cards with a named foil per series, and holo variants with no foil named. The script’s key patterns accept every spelling that a survey of the pinned copy found (r2_key_spellings.py, output r2_key_spellings.out.txt): a space before the colon, which 47 Japanese files of one 1997 set (PMCG2) write as variants : [, and a quoted key, which 322 Japanese files of three 2025 and 2026 sets (M1L, M2 and M3) write as "type":. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  10. TCGdex cards-database at commit c5c0a8a, server/compiler/utils/cardUtil.ts in the pinned copy: a card whose file has no variants gets normal: true (lines 101 to 108), and its variants_detailed is built by variantsToVariantsDetailed (lines 54 to 80, used at line 120), which adds one normal variant with the id generated; array-form variants get a hashed id instead (variantUtil.ts, variantToIdentifier). https://github.com/tcgdex/cards-database/blob/c5c0a8a63fe81746d05b9c95e8f51ed6931f7e78/server/compiler/utils/cardUtil.ts. ↩↩↩↩↩

  11. Kiradex, the Kiradex repository’s Kiradex/Models/FoilStyle.swift: the enum’s five cases with their comments, the twelve full-foil rarity strings (fullFoilRarities) and the ten etched ones (etchedRarities), and init(rarity:variants:) with its comment; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. No git was run and the app was not built or run. The file was last modified on disk on October 1, 2026. ↩↩↩↩↩↩↩↩

  12. Kiradex, the Kiradex repository’s Kiradex/World/PlazaStage.swift (three foil: .artWindow arguments: one in PlazaView, the plaza, and two in RoomView, a room’s stage and its PlazaRig.Dressing), Kiradex/World/HallView.swift (two, in the PlazaStage it builds and in its PlazaRig.Dressing, whose pedestals make it the hall; a card on show is a HallView.Entry, a handle and the card’s key) and Kiradex/World/ShowAndTellView.swift (one, in its CardStage); PlazaStage reads displayScale from its environment and reads no Reduce Motion setting, and neither does PlazaRig; Kiradex/World/PlazaRig.swift: Dressing, whose one foil serves every face of a room’s case or the hall’s pedestals, the three CardRig.makeCard calls (two in dress, one for the held card), turnShowcase, and holdCard and liftCard, which turn the held card; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. ↩↩↩↩↩↩↩

  13. Kiradex, the Kiradex repository’s docs/ROADMAP.md: the line “Foil is one procedural pattern; per-era patterns are future work.” and the open item “Run it on a phone,” with “glare on foil” among what is unproven; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line, since the file was being edited that day. ↩↩↩

  14. Figure by figures.py in the author’s working folder for this post, from measure_holo_eras.out.txt (dates), the Holofoil and Rarity pages (the descriptions the swatches draw, asserted in the script), and pokemon.com’s launch date for Black Bolt and White Flare, where the mark is labeled as the Rarity page’s report, disputed by the set page. Generic shapes only. ↩

  15. Bulbapedia, “Base Set 2 (TCG),” raw wikitext saved October 5, 2026 (bulba-base2-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Base_Set_2_(TCG). “Base Set 2 was the first English expansion to use the Cosmos Holofoil.” ↩

  16. Bulbapedia, “Black Bolt & White Flare (TCG),” raw wikitext saved October 5, 2026 (bulba-blackbolt-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Black_Bolt_%26_White_Flare_(TCG). The two ball-pattern parallel variants “alongside the regular parallel holofoil variant”; three “Tinsel Holo … Poster Collection exclusive” rows (001, 011, 021); Cosmos Holo League prize rows. ↩↩↩↩↩↩↩

  17. The Pokémon Company International, pokemon.com, “Reshiram and Zekrom Dazzle in New Pokémon TCG Artwork,” July 2025, saved October 5, 2026 (pkmn-reshiram-zekrom-artwork.txt), https://www.pokemon.com/us/pokemon-news/reshiram-and-zekrom-dazzle-in-new-pokemon-tcg-artwork. The first full arts as “full-art foil cards with etched textures and a solid-color background”; Black White Rare cards with “unique foil and texture treatments”; the sets’ launch on July 18, 2025. ↩↩↩↩↩

  18. Bulbapedia, “Sun & Moon (TCG),” raw wikitext saved October 5, 2026 (bulba-sm-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Sun_%26_Moon_(TCG). The three prints of a Pokémon-GX and their finishes; “Secret Rainbow Rare card (called Hyper Rare card in Japan)”; “The Sheen Holofoil was changed to Water Web Holofoil.” ↩↩↩↩

  19. PokéBeach, “‘Sword & Shield’ Reverse Holo Pattern Revealed, Other Cosmetic Changes!,” January 2020, saved October 5, 2026 (pokebeach-swsh-reverse.txt), https://www.pokebeach.com/2020/01/sword-shield-reverse-holo-pattern-revealed-other-cosmetic-changes. A fansite, cited by Bulbapedia and used here as a lead: the “tile” reverse, the vertical “line” holo, and holofoil exposed on Japanese borders. ↩↩↩↩

  20. Bulbapedia, “Scarlet & Violet (TCG),” raw wikitext saved October 5, 2026 (bulba-sv-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Scarlet_%26_Violet_(TCG). Quotes pokemon.com’s 2022 announcement (gray borders “to match the cards released in Japan,” three guaranteed holofoil cards per pack); product rows naming Cosmos Holo (8) and Snowflake Holo (3) Fall 2023 Collector Chest exclusives. ↩↩↩↩

  21. Bulbapedia, “Mega Evolution (TCG),” raw wikitext saved October 5, 2026 (bulba-me-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Mega_Evolution_(TCG). “Reintroduces Mirror Holofoil variants of cards, last seen during the Black & White Series”; product rows naming Cosmos Holo (10), Pixel Cosmos Holofoil (4, including Fall 2025 Collector Chest exclusives) and one “Reverse Mirror-Holofoil” League promo; League participation prizes. No default holo pattern named. ↩↩↩↩↩↩↩

  22. Bulbapedia, “Shining Pokémon (TCG),” raw wikitext saved October 5, 2026 (bulba-shining-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Shining_Pok%C3%A9mon_(TCG). The Neo Destiny foil treatment; the Shining Legends pattern; the CoroCoro promo’s glitter coating; the “special textured foil treatment” of the Celebrations and 30th Celebration reprints. ↩↩↩

  23. Bulbapedia, “Black & White (TCG),” raw wikitext saved October 5, 2026 (bulba-bw-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Black_%26_White_(TCG). Full Art cards with “Holofoil covering the entire card”; English borders yellow, Japanese gray; Japanese “Mirror cards” of HeartGold Collection and SoulSilver Collection discontinued; product rows naming Crosshatch (17, the first of them Pokémon League prizes of May to July 2011) and Cracked Ice (14). ↩↩↩↩↩↩

  24. PokéBeach, “Scarlet & Violet Holo Effects Revealed, Includes Foil Card Borders!,” December 2022, saved October 5, 2026 (pokebeach-sv-holo.txt), https://www.pokebeach.com/2022/12/scarlet-violet-holo-effects-revealed-includes-foil-card-borders. A lead: the glittery layer on some Japanese cards, and “galaxy holofoils” for the older look. ↩↩

  25. Blake Crosley, “Pokémon Card Rarity and Set Symbols, English and Japanese,” blakecrosley.com, October 5, 2026, https://blakecrosley.com/blog/pokemon-card-rarity-and-set-symbols. Its sections on the Rare in Scarlet & Violet and the Bandit Ring ladder. ↩

  26. The Pokémon Company, pokemon-card.com, Bandit Ring (XY7) article on UR cards, release June 20, 2015 per the page, saved October 4, 2026 for the earlier rarity post (pcard-xy7-ur.html), https://www.pokemon-card.com/products/xy/xy7/xy7_000144.html. The rarity ladder with キラ on UR, SR, RR and R. Translations are the author’s. ↩

  27. The Pokémon Company, pokemon-card.com, Sword and Shield (S1) product page, release December 6, 2019 per the page, saved October 5, 2026 (pcard-ex-s1.txt), https://www.pokemon-card.com/ex/s1/. “プレミアムキラ” promos for two boxes. ↩

  28. The Pokémon Company, pokemon-card.com, VMAX Climax (S8b) product page, release December 3, 2021 per the page, saved October 5, 2026 (pcard-ex-s8b.txt), https://www.pokemon-card.com/ex/s8b/. One “基本エネルギーカード(キラ)” per pack. ↩↩

  29. The Pokémon Company, pokemon-card.com, Black Bolt and White Flare (SV11B, SV11W) product page, release June 6, 2025 per the page, saved October 4, 2026 (pcard-ex-sv11.txt), https://www.pokemon-card.com/ex/sv11/. The mirror sentence shared with 151; the card file set’s promo marked (キラ). ↩↩

  30. The Pokémon Company, pokemon-card.com, Sun & Moon SR article, saved October 5, 2026 (pcard-sm1-sr.txt), https://www.pokemon-card.com/products/sm/sm1/sm1_000552.html. SR cards with a special treatment on the illustration, unnamed. ↩

  31. Bulbapedia, “151 (TCG),” raw wikitext saved October 5, 2026 (bulba-151-raw.txt), https://bulbapedia.bulbagarden.net/wiki/151_(TCG). Full-art etched and gold etched counts; Cosmos Holo product rows (13); the English set’s reverse holos; the Japanese, Korean and Traditional Chinese “Mirror Holofoil variants”; Thai and Indonesian packs without them. ↩↩↩↩↩

  32. TCGdex, “Card” reference, https://tcgdex.dev/reference/card, saved October 5, 2026 (tcgdex-ref-card.txt). The four documented variants booleans and TCGplayer’s price keys by finish, including reverse-holofoil. ↩↩

  33. Bulbapedia, “Legendary Collection (TCG),” raw wikitext saved October 5, 2026 (bulba-legendary-collection-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Legendary_Collection_(TCG). The first reverse holos and their fireworks-like pattern. ↩

  34. Bulbapedia, “Expedition Base Set (TCG),” raw wikitext saved October 5, 2026 (bulba-expedition-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Expedition_Base_Set_(TCG). The plain “refractor” reverse. ↩

  35. Bulbapedia, “EX Hidden Legends (TCG),” raw wikitext saved October 5, 2026 (bulba-hidden-legends-raw.txt), https://bulbapedia.bulbagarden.net/wiki/EX_Hidden_Legends_(TCG). The reverse design with energy symbols on the artwork. ↩

  36. Bulbapedia, “Prismatic Evolutions (TCG),” raw wikitext saved October 5, 2026 (bulba-prismatic-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Prismatic_Evolutions_(TCG). The parallel variants and the five gold etched hyper rares. ↩↩↩↩↩↩↩

  37. The Pokémon Company, pokemon-card.com, TAG TEAM GX All Stars (SM12a) product page, release October 4, 2019 per the page, saved October 5, 2026 (pcard-ex-sm12a.txt), https://www.pokemon-card.com/ex/sm12a/. “ミラー仕様” beside “SR仕様.” ↩↩

  38. The Pokémon Company, pokemon-card.com, Pokémon Card 151 (SV2a) product page, release June 16, 2023 per the page, saved October 5, 2026 (pcard-ex-sv2a.txt), https://www.pokemon-card.com/ex/sv2a/. The deluxe mirror-specification cards with a ball-pattern treatment. Translation is the author’s. ↩↩↩↩↩↩

  39. The Pokémon Company, pokemon-card.com, 「テラスタルフェスex」 (Terastal Fest ex, SV8a) product page, release December 6, 2024 per the page, saved October 5, 2026 (pcard-ex-sv8a.txt), https://www.pokemon-card.com/ex/sv8a/. The “豪華プレミアムミラー仕様のカード” panel. ↩

  40. The Pokémon Company International, tcg.pokemon.com, Prismatic Evolutions expansion page, saved October 5, 2026 (tpc-prismatic.txt), https://tcg.pokemon.com/en-us/expansions/prismatic-evolutions/. “Premium parallel cards” and the side-to-side motif. Release date from Bulbapedia’s English list. ↩↩↩↩

  41. The Pokémon Company, pokemon-card.com, MEGA Dream ex (M2a) product page, release November 28, 2025 per the page, saved October 5, 2026 (pcard-ex-m2a.txt), https://www.pokemon-card.com/ex/m2a/. Deluxe mirror cards with Energy-symbol and ball patterns. ↩↩

  42. What could not be reached on October 5, 2026: pokemon.com’s card-list PDFs sm7_web_cardlist_en.pdf and swsh11_web_cardlist_en.pdf returned an HTML bot-wall page instead of a PDF; tcg.pokemon.com’s Black Bolt and White Flare expansion page returned 404; pokemon-card.com’s S9a and S11a product pages returned 404; tcg.pokemon.com’s Paradox Rift page saved as a bot wall (tpc-paradox.txt); TCGplayer’s “Holo Swirl” article rendered no text without JavaScript; a search found no PSA or Beckett article on holo patterns; Bulbapedia’s “Reverse Holofoil card,” “Rainbow Rare (TCG)” and “Gold card (TCG)” returned 404, and “Pokémon Star (TCG),” “Pokémon Card 151 (TCG)” and “Scarlet ex (TCG)” returned redirects that were not followed; one web search found no card-foil patent assigned to The Pokémon Company, Creatures, Nintendo or The Pokémon Company International, and Google Patents was not searched by assignee. ↩↩↩↩

  43. TCGdex cards-database at commit c5c0a8a, data-asia/SV/SV2a/001.ts in the pinned copy, read October 15, 2026 (its variants list, from line 49: normal, then reverse with foil: "pokeball" and reverse with foil: "masterball"). Author’s survey of the folder’s 210 card files, run October 15, 2026: sv2a_variants.py in the author’s evidence folder for this post, output sv2a_variants.out.txt: 128 normal with both ball reverses, 25 holo with both, 57 holo only, and no reverse variant without a named foil. The same survey of the English Prismatic Evolutions folder (data/Scarlet & Violet/Prismatic Evolutions, 180 card files): 100 carry a reverse variant with no foil named, every one of them beside a pokeball reverse. ↩↩↩↩↩↩

  44. Bulbapedia, “Paldean Fates (TCG),” raw wikitext saved October 5, 2026 (bulba-paldean-fates-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Paldean_Fates_(TCG). The gold raised foil hyper rares; Cosmos Holo product rows (10); reverse holos in the English set structure. ↩↩

  45. The Pokémon Company International, play.pokemon.com, Prize Pack gallery, saved October 5, 2026 (play-prize-pack-gallery.txt), https://play.pokemon.com/en-us/rewards/gallery/. “Stamped, cosmos foil versions” of two Trainer cards. ↩↩↩↩

  46. Bulbapedia, “Matrix design (TCG),” raw wikitext saved October 5, 2026 (bulba-matrix-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Matrix_design_(TCG). The nickname, the first Japanese and English sets, and the three designs. ↩↩

  47. Bulbapedia, “Full Art card (TCG),” raw wikitext saved October 5, 2026 (bulba-full-art-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Full_Art_card_(TCG). “A special embossed etching treatment” on most English full-art Pokémon-EX and all full-art GX and V. The page carries an “incomplete” banner. ↩↩↩↩

  48. Bulbapedia, “Special illustration rare card (TCG),” raw wikitext saved October 5, 2026 (bulba-sir-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Special_illustration_rare_card_(TCG). The additional layer of glitter foil. ↩

  49. TCGdex cards-database at commit c5c0a8a, card and set files read in the pinned copy: data/Base/Fossil/1.ts (holo variants under galaxy, and pre-release variants under cosmos and starlight), data/Base/Fossil/20.ts (normal variants under galaxy), data/EX/FireRed & LeafGreen.ts (id ex6, release 2004-09-01), data/E-Card/Skyridge/146.ts lines 105 to 112 (a holo variant with foil: 'cracked-ice' and size: 'jumbo', beside a holo and a reverse that name no foil), 145.ts and 148.ts in the same folder (a holo and a reverse, no foil, no size), data/Diamond & Pearl/DP Black Star Promos/DP26.ts lines 88 to 103 (a holo named cosmos, and a cracked-ice holo and a mirror holo, both size: "jumbo"; DP27 has the same three), interfaces.d.ts lines 62 to 67 (size?: 'standard' | 'jumbo'), and server/compiler/utils/variantUtil.ts lines 35 to 37 (a variant without a size is reported as standard), https://github.com/tcgdex/cards-database/tree/c5c0a8a63fe81746d05b9c95e8f51ed6931f7e78/data/Base/Fossil. ↩↩↩↩↩

  50. Author’s measurement, October 5, 2026: cr_variant_sizes.py in the author’s evidence folder for this post; output cr_variant_sizes.out.txt. Over the TCGdex copy at commit c5c0a8a, with the key patterns of measure_tcgdex_foil.py, every card variant that carries a size field, with the card’s other variants: in the English files, 215 variants on 206 cards (214 jumbo, 1 standard), none in the Asian files; and every cracked-ice variant by size: 64 in all, 6 jumbo (Skyridge 146, 147, 149 and 150; DP26 and DP27) and 58 with no size, the earliest of them on EX Hidden Legends (ex5, 2004-06-01), cards 93 to 100. It also runs the brief’s level 2 on every English index card’s holo and reverse variants with and without jumbo-size variants: the answer changes for four cards, DP24, DP26, DP27 and DP40, each from no answer to cosmos. ↩↩↩↩↩

  51. Bulbapedia, “Crystal Pokémon (TCG),” raw wikitext saved October 5, 2026 (bulba-crystal-raw.txt), https://bulbapedia.bulbagarden.net/wiki/Crystal_Pok%C3%A9mon_(TCG). Skyridge 145 to 150 as the set’s six Crystal Pokémon, all secret cards. ↩

  52. Cartamundi, “Cartamundi expands production facility in Turnhout to accommodate growing demand for collectible cards, creating 50 new jobs,” dated October 18, 2024, saved October 5, 2026 (cartamundi-turnhout.txt), https://cartamundi.com/en/press/cartamundi-expands-production-facility-in-turnhout-to-accommodate-growing-demand-for-collectible-cards-creating-50-new-jobs/. ↩

  53. PokéBeach, report on Millennium Print Group’s new printing campus, December 2025, saved October 5, 2026 (pokebeach-mpg.txt), https://www.pokebeach.com/2025/12/millennium-print-group-officially-confirms-massive-new-printing-campus-expanding-capacity-for-pokemon-tcg-fans. A fansite’s report; the printing facilities and TPCi’s purchase of the company in 2022 are the article’s own words, and the emailed statement it quotes is about the new campus. A lead only. ↩

  54. US Patent 5,517,336, “Display card with interactive imagery and method of producing same,” Google Patents page saved October 5, 2026 (gpat-US5517336.txt), https://patents.google.com/patent/US5517336A/en. Assignee Upper Deck Co LLC; priority 1993-09-03, filed 1995-02-01, granted 1996-05-14; claim 1. Not a Pokémon document; the reading in the post is the author’s. ↩↩

  55. US Patent Application 2002/0043764 A1, “Educational trading card game and method,” Google Patents page saved October 5, 2026 (gpat-US20020043764.txt), https://patents.google.com/patent/US20020043764A1/en. An individual applicant; priority 2000-01-25, filed 2001-01-24, published 2002-04-18; status abandoned. Not a foil patent; its background paragraph on holographic foil Pokémon cards. ↩

  56. Blake Crosley, “Prepare Your App for iPhone Duo: A Worked Example,” blakecrosley.com, the description of Kiradex, https://blakecrosley.com/blog/prepare-your-app-for-iphone-duo. ↩

  57. TCGdex cards-database, interfaces.d.ts at commit c5c0a8a, saved October 5, 2026 (tcgdex-interfaces.d.ts), https://github.com/tcgdex/cards-database/blob/c5c0a8a63fe81746d05b9c95e8f51ed6931f7e78/interfaces.d.ts. The foil?: union of 22 values and its comment; the old variants booleans. ↩↩↩↩

  58. TCGdex API v2, seven card responses saved October 5, 2026 (tcgdex-card-base1-4.json, bw1-1, bw1-10, sv03.5-001, swsh1-1, xy1-1, xy1-5), e.g. https://api.tcgdex.net/v2/en/cards/xy1-5. The four booleans plus wPromo; variants_detailed with foil (sv03.5-001’s cosmos reverse) and generated normal-only variants for the XY and Black & White cards; xy1-1’s rarity “Ultra Rare.” ↩↩↩↩↩↩↩↩↩

  59. Figure by figures.py in the author’s working folder for this post, from measure_tcgdex_foil.out.txt (English values, first and last set dates, variant counts). ↩

  60. Figure by figures.py in the author’s working folder for this post, from measure_holo_eras.out.txt section 2 (index cards and holo variants per era) and r1_no_variants_by_era.out.txt (empty files per era); the script asserts that the two agree on every era’s index cards and that the empty files sum to 6,085. A note line on the figure says that eras are assigned by TCGdex series and names the promo sets dated outside the labels’ years. ↩

  61. Author’s measurement, October 5, 2026: r2_empty_crosscheck.py in the author’s evidence folder for this post; output r2_empty_crosscheck.out.txt. A second count of the index cards whose API answer is exactly one generated normal variant, made without the measurement scripts’ patterns: a small tokenizer reads each card file’s top-level keys, skipping comments and strings, and the rule of the pinned cardUtil.ts (lines 54 to 80 and 101 to 120) is applied to what it finds. English 6,086 (6,085 files without variants, one old-form file), Japanese 210, both equal to r1_no_variants_by_era.py’s counts; for the seven saved API responses, the predicted number and kind of variant ids (generated or hashed) match the response in every case. ↩↩↩

  62. Kiradex, the Kiradex repository’s Kiradex/Inspector/CardRig.swift: frontMaterial(face:foil:), a CustomMaterial with the surface shader kiraSurface and the .clearcoat lighting model, and custom.value = SIMD4(foil.rawValue, 1, 0, 0) (if the shader cannot be built, the face falls back to plain glossy stock); makeCard(face:foil:) and show(face:foil:) both build the face with it, and the app’s card stages and the town’s rig draw every card through them; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. Read again at 17:49 Pacific time on October 5, 2026, when the branch head was commit 5a344e3: step(deltaTime:) adds tilt.sample() to the card’s turn every frame, and adds the idle sway only when idles is set and tilt.isAvailable is false. ↩↩↩↩↩↩↩↩↩↩

  63. Kiradex, the Kiradex repository’s Kiradex/Inspector/KiraSurface.metal (122 lines, last modified on disk on October 1, 2026, so its line numbers are given): custom parameter (lines 10, 11, 54 to 56), card space and the eye direction in the card’s frame, tilt = eye.xy (38 to 41 and 47 to 52), masks (58 to 70), rainbow and sweep (72 to 78), glitter (80 to 88), etching (90 to 105), the wake term and outputs (107 to 121); no time input, no texture but the face, no normal. Kiradex/Inspector/CardGeometry.swift: width is 0.063 m, and the mesh maps a point’s x to the face’s u as point.x / width + 0.5. Read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  64. Kiradex, the Kiradex repository’s Kiradex/Views/Card/CardInspectorView.swift: the FoilStyle(rarity: loaded?.rarity, variants: loaded?.variants) call, and the .task that loads the card’s detail from the catalog; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. ↩↩

  65. Kiradex, the Kiradex repository’s Kiradex/Models/CatalogModels.swift: CardDetail.Variants with four optional booleans (normal, holo, reverse, firstEdition), and the comment on TCGplayer’s finish keys; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. ↩↩

  66. Figure by figures.py in the author’s working folder for this post, from the rectangles in KiraSurface.metal (asserted in the script); areas from arith.py. ↩

  67. Kiradex, the Kiradex repository’s Kiradex/Inspector/MotionTilt.swift: limit, 0.45 radians, and deviceMotionUpdateInterval = 1 / 60; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. Read again at 17:49 Pacific time on October 5, 2026, when the branch head was commit 5a344e3: isAvailable carries the comment “False on hardware without a gyroscope, and in the Simulator.” In the copy committed at 5a344e3, sample(), which the rig calls once a frame, takes the newest attitude relative to the first one it read and moves the turn a fifth of the way toward it on every call (offset += (target - offset) * 0.2), and returns the turn unchanged, zero from the start, while there is no reading, as in the Simulator, where start() does not start updates. ↩↩↩

  68. Kiradex, the Kiradex repository’s Kiradex/Inspector/CardStage.swift: @Environment(\.accessibilityReduceMotion) and rig.idles = !reduceMotion; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. Read again at 17:49 Pacific time on October 5, 2026, when the branch head was commit 5a344e3: the stage’s onAppear calls rig.tilt.start(), and its onDisappear rig.tilt.stop(), with no Reduce Motion condition. ↩↩↩↩↩

  69. Kiradex, the Kiradex repository’s Kiradex/Models/CardCopy.swift: CardFinish and its display names; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. ↩↩↩

  70. Kiradex, the Kiradex repository’s KiradexTests/CatalogTests.swift: cardDetailReadsNumberPriceAndFoil, whose last expectation is .artWindow for the base1-4 fixture, and foilStyleFollowsRarityAndFinishes with nine cases; no other test file names FoilStyle. KiradexUITests/KiradexUITests.swift, one of the three files in the UI-test target (project.yml puts the whole KiradexUITests folder in it), with 34 tests, read whole: the 13 that save a screenshot with a card on screen are testAddingACardFromTheDexPutsItInTheCollection, testWideScreenShowsAWallThenSplitsForTheInspector, testTheViewerShowsTheCardEveryTime, testThePlazaSpikeOpensAndWalks, testTheShowHallHasEveryonesCards, testShowAndTellPutsTheirCardOnYourWantList, testScanningAGradedCardKeepsItsLabel and six that need the live catalog (KIRADEX_LIVE): testLiveWalkToAHoloCard (base1-4), testLiveSetWithoutCatalogScans, testLiveJapaneseDex, testLiveTheCreditOpensTheIllustrator, testLiveALinkOpensACardAndAnIllustrator and testLiveFoilGallery (swsh11-131, swsh11-212 and swsh7-215, two frames each); the hall and show-and-tell tests need the town’s server (KIRADEX_PLAZA). Two room tests may catch cards in a room’s case and are not counted. No test in the file names FoilStyle; its only pixel check, in testTheViewerShowsTheCardEveryTime, asserts that more than a tenth of the viewer’s sampled points are brighter than near-black. The file’s save writes nothing unless KIRADEX_SHOT_DIR is set. Which tests count is the author’s reading, listed test by test, with the rule, in r3_ui_test_card_frames.txt in the author’s evidence folder for this post; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. Read again at 17:49 Pacific time on October 5, 2026, when the branch head was commit 5a344e3: testLiveWalkToAHoloCard asserts a “TCGplayer market” credit, the Have button selected and a “Collection Value” whose label contains a dollar sign; among the other counted tests, assertions check a card that reads as owned, a “PSA 10” grade read from a slab, the illustrator’s credit and page, and “On Your Want List”; no assertion names the foil or the shader. The target’s other two files, counted in each commit’s own copy: ScreenshotTour.swift holds 8 tests at both commits, the same file at both. Five of them, testTour, testPoseTour, testFixtureTour, testHoldTour and testViewerTour, wait for the inspector’s card stage or the viewer’s close button and then call snap, which writes a request that the host’s scripts/screenshots/tour.sh answers by capturing the Simulator, and only when KIRADEX_TOUR_DIR is set; all but testFixtureTour run on the live catalog. Their assertions are that the Dex, a set, a card’s button and the card stage appear. MotionWalkTests.swift holds 10 tests at cf3beb1 and 11 at 5a344e3; they read the town’s motion log, and none saves a picture. Neither file names FoilStyle, the foil or the shader. ↩

  71. Figure by figures.py in the author’s working folder for this post, from measure_holo_eras.out.txt section 2. Colors were checked with a palette validator for contrast and color-vision separation; the table beside the figure carries every count. ↩

  72. Bulbapedia, “XY (TCG),” raw wikitext saved October 5, 2026 (bulba-xy-raw.txt), https://bulbapedia.bulbagarden.net/wiki/XY_(TCG). The set list’s rows 1/146 (“Rare Holo ex”) and 141/146 (“Rare Ultra”), row labels in Bulbapedia’s list. ↩

  73. Apple, iOS SDK in Xcode 27.0 (build 27A266a), read October 5, 2026 by apple_sdk.py in the author’s working folder for this post (output apple_sdk.out.txt): RealityKitSurfaceShader.h lines 146 to 152 (time()), 185 to 188 (custom_parameter()) and 508 to 516 (set_normal()); RealityFoundation’s interface, CustomMaterial availability and the clearcoat lighting model; CMMotionManager.h line 86; UIAccessibility.h line 566; SwiftUICore’s accessibilityReduceMotion. ↩↩↩↩↩↩↩↩↩↩

  74. Author’s count, October 16, 2026: index_at_commits.py in the author’s evidence folder for this post, output index_at_commits.out.txt, reading Kiradex/Resources/CardIndex-en.json from the stored objects of commits 5a344e3 and fc9d4876: 201 sets, 21,256 cards and 33 ball-name cards (26 “Poké Ball,” 7 “Master Ball”) at the first; 204 sets, 21,358 cards and 36 (29 and 7) at the second, the three new ones clb-023, clc-021 and clv-021, each “Poké Ball.” ↩

  75. Author’s reading of the Kiradex repository on October 15, 2026 at 22:40 Pacific, with no git command: commit fc9d4876 (refs/heads/main, committed 17:45 Pacific) read from its tree objects, and the working tree beside it. The six .swift files in KiradexUITests/, counted by the lines that declare a function whose name begins with test (func test): at the commit, KiradexUITests.swift 39, ScreenshotTour.swift 9, MotionWalkTests.swift 11, LensWalkTests.swift 4, StoreWalkTests.swift 3, SandboxWalkTests.swift 1; the working tree’s KiradexUITests.swift was still being edited that night and is not the cited state (40 functions at 22:40, 41 at 23:41); the other five are byte-identical to the commit. At the same commit, read from its tree objects on October 15, 2026: Kiradex/World/PlazaRig.swift calls CardRig.makeCard at lines 324, 347, 1239 and 1264, the last in showCard(for:face:foil:), “Another collector holds a card up,” whose card liftCard(_ id:) (1313) raises and turns as liftCard() (1307) does the player’s; Kiradex/World/PlazaStage.swift and PlazaRig.swift contain no Reduce Motion read; Kiradex/Views/Card/CardInspectorView.swift line 75 builds FoilStyle(rarity: loaded?.rarity ?? prices?.r, variants: loaded?.variants), prices being the card’s CardPrices; Kiradex/Services/PriceStore.swift (not present at 5a344e3) says in its opening comment that the prices come from “store.kiradex.app” and are “built from Scrydex’s catalog,” and its variant-title table (line 211) holds "pokeBallReverseHolofoil": "Poké Ball Reverse" and "masterBallReverseHolofoil": "Master Ball Reverse", with "cosmosHolofoil": "Cosmos Holo" and "energyReverseHolofoil": "Energy Reverse" beside them. The post’s other Kiradex readings are of cf3beb1 and 5a344e3 and are dated. ↩↩↩

  76. Author’s measurement, October 5, 2026: r2_resolver_edges.py in the author’s evidence folder for this post; output r2_resolver_edges.out.txt. From the pinned TCGdex copy and Kiradex’s index: the three English index cards with a holo variant whose foil is tinsel (sv10.5b-001, sv10.5w-011 and sv10.5w-021), each also printed plain, so each draws mask none until a Holo copy is recorded; and, among the index cards whose mask today is full (1,117 English, 675 Japanese) or etched (2,957 English, 1,697 Japanese), none whose holo variants all name one foil that maps to a pattern. ↩

  77. Author’s lookup, October 5, 2026: r1_brief_fixtures.py in the author’s evidence folder for this post; output r1_brief_fixtures.out.txt. For each card the brief’s checks name, from the pinned TCGdex copy and Kiradex’s index: in the index or not, era, rarity, the form of variants, each variant’s type and foil, and the mask today’s FoilStyle draws (the Python transcription). The card files are parsed with the key patterns described under measure_tcgdex_foil.py, so PMCG2-002, whose file writes its one normal variant as variants : [, reads as filled, and neo4-013’s file carries no variants key. ↩↩↩↩

  78. Kiradex, the Kiradex repository’s Kiradex/Services/Catalog.swift: FixtureCatalog, built only in debug builds and chosen by its launchArgument, -fixtureCatalog, “a tiny offline catalog for UI tests and previews, the same in every language”: one set, kira1, “Kira Base,” with six invented cards, kira1-1 to kira1-6, each a “Rare” whose only variant is holo; asked for any other card, it throws. Kiradex/Inspector/CardStage.swift: the stage’s identifier defaults to “card-stage”, and its accessibility value is pose.description, “Front” or “Back” with the zoom when zoomed (CardRig.Pose). KiradexUITests/KiradexUITests.swift: testTheShowHallHasEveryonesCards launches with -fixtureCatalog and -plazaHall and skips unless KIRADEX_PLAZA is 1, because “the show hall needs the server.” Read on October 15, 2026 from the copies stored in commits cf3beb1 and 5a344e3, which hold the same three files. ↩

  79. Kiradex, the Kiradex repository’s Kiradex/World/Glow.metal: glowSurface, which samples its material’s base-color texture, and Kiradex/World/Air.swift, which builds it from the app’s default Metal library and gives it the town’s “glow” and “firefly” pictures; the app target’s only other Metal source is KiraSurface.metal; read from the files on disk at 17:49 Pacific time on October 5, 2026, when the branch head was commit 5a344e3; cited by name rather than by line. ↩

  80. Author’s measurement, run at 17:50 Pacific time on October 5, 2026, when the Kiradex branch head was commit 5a344e3: kiradex_ball_names.py in the author’s evidence folder for this post, with output kiradex_ball_names.out.txt. It reads the app’s bundled English index, Kiradex/Resources/CardIndex-en.json (201 sets and 21,256 cards; file dated October 2, 2026), and lists the 33 card names that contain “Poké Ball” (26) or “Master Ball” (7), matched without regard to case or accent, base2-64 and gym2-116 among them, and none that contains “Pokéball”; it finds none of the three in the other bundled resource files or in any string literal in the app target’s 88 Swift files, and no string catalog in the repository. The app loads the index from its bundle and gives each card the index’s name (Kiradex/Scanner/CardIndex.swift), and Kiradex/Views/Card/CardGrid.swift prints that name with Text(card.name). The same scan, run on October 16, 2026 over the app folder as stored in commit fc9d4876 (output kiradex_ball_names.fc9d4876.out.txt), with comment lines left out, finds four literals, all on line 211 of Kiradex/Services/PriceStore.swift: the keys pokeBallReverseHolofoil and masterBallReverseHolofoil and the titles “Poké Ball Reverse” and “Master Ball Reverse”; run over 5a344e3’s stored copy it gives the October 5 result again. ↩↩

  81. Kiradex, the Kiradex repository’s docs/WORLD.md: the app’s badges “drawn in our own language (the kira star, holo foil, enamel-pin look)”; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. ↩

  82. Kiradex, the Kiradex repository’s Kiradex/Scanner/CardStudy.swift: the border finder’s contrast threshold, contrast = 38.0, “out of 441 between black and white” in its comment; read from the files on disk at 16:53 Pacific time on October 5, 2026, when the branch head was commit cf3beb1, while the app’s working tree was being edited; cited by name rather than by line. The gauge is described in the centering post linked from item 13. ↩

Powiązane artykuły

Pokémon Card Rarity and Set Symbols, English and Japanese

How to read a Pokémon card's bottom line: English rarity symbols by era, Japanese codes, set codes, secret numbers, and …

104 min czytania

The Illustrators of Pokémon Cards, by the Numbers

Who draws Pokémon cards, counted: 392 English and 314 Japanese illustrator names in one card index, by era, year and set…

118 min czytania

Pixel-Art Worlds on iPhone: What the 16-Bit Masters Knew

How Final Fantasy VI, Pokémon and today's best pixel-art games were made, the rules that follow, and a tested recipe for…

62 min czytania