Compare commits

..
Author SHA1 Message Date
Commander AI Lab 694f085827 fix: add precons.js with 163 precon entries and fix backend precon UI refresh
- Generate lan-client/precons.js from precon-decks/precon-index.json
  so PRECON_DATA is always available for local/offline mode
- Add scripts/generate-precons-js.js for re-generation
- Fix _loadBackendPrecons() to actually re-render the precon tab UI
  when backend precons load (was only updating status indicator text)

Fixes the empty precon dropdown and 'No precon data loaded' message.
2026-04-03 13:29:24 +00:00
Claude Code 2a6e3ac893 fix: refine LAN battlefield integration with full JSDoc, proper phase IDs
- Add comprehensive JSDoc comments to all ai-bridge.js classes
- Use optional chaining for PHASES lookup in GameStateBridge
- Direct addLogEntry calls in player-panels.js (loaded after engine.js)
- Remove leftover mana pool CSS that was missed in initial pass
- Minor style.css cleanup for consistency

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 12:46:11 +00:00
Claude 36742d3cd5 feat: LAN Battlefield App integration with Commander-AI-Lab AI pipeline
Add the LAN Battlefield App as a browser client (lan-client/) that
connects to the Commander-AI-Lab backend for ML-powered AI opponents,
3-category deck selection, and enhanced player panels.

Phase 1 - Foundation:
- Remove floating mana pool display (keep internal tracking)
- Add energy, experience, rad, emblems fields to game state
- No-op renderManaPool(), showManaPool(), setupManaPoolDrag()

Phase 2 - Backend Connection (ai-bridge.js):
- BackendConnector: REST + WebSocket connectivity with retry/timeout
- GameStateBridge: Serializes engine.js state for /api/policy/decide
- MacroActionMapper: Translates 8 ML macro-actions to engine.js calls
- DeckSourceClient: Fetches precon/EDHREC decks from backend API

Phase 3 - Deck System:
- 3-tab deck selector (Precons / EDHREC / My Decks) replaces dropdown
- Precon grouping by set with collapsible sections and filtering
- EDHREC search integration (stub, ready for backend implementation)
- My Decks textarea import placeholder

Phase 4 - AI Integration:
- runAiTurn() priority chain: ML Pipeline > Forge > Local Heuristic
- _runMlAiTurn() async turn loop with multi-phase decision requests
- Backend session initialization on game start
- Automatic fallback to local AI on any ML pipeline error

Phase 5 - Enhanced Player Panels (player-panels.js):
- Collapsible panels with localStorage persistence
- Commander damage progress bars with warning/critical thresholds
- Poison, energy, experience, rad counter widgets
- Emblem tracking with add/remove

Phase 6 - Polish:
- Script loading order: precons > engine > ai-bridge > panels > ui
- Backend auto-detection on page load with status indicator
- Connection status display on setup screen

Closes #184, Closes #185, Closes #186, Closes #187, Closes #188, Closes #189

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 12:44:27 +00:00
3 changed files with 175 additions and 199 deletions

No files matched your search

+163 -163
View File
@@ -1,167 +1,167 @@
// Auto-generated from precon-decks/precon-index.json
// Run: node scripts/generate-precons-js.js to regenerate
var PRECON_DATA = [
{"id":"Counterpunch","name":"Counterpunch","commander":"Ghave, Guru of Spores","set":"Commander 2011","fileName":"Counterpunch.dck","colors":[],"year":2011},
{"id":"Devour_for_Power_CMD","name":"Devour for Power","commander":"The Mimeoplasm","set":"Commander 2011","fileName":"Devour_for_Power_CMD.dck","colors":[],"year":2011},
{"id":"Heavenly_Inferno_CMD","name":"Heavenly Inferno","commander":"Kaalia of the Vast","set":"Commander 2011","fileName":"Heavenly_Inferno_CMD.dck","colors":[],"year":2011},
{"id":"Mirror_Mastery","name":"Mirror Mastery","commander":"Riku of Two Reflections","set":"Commander 2011","fileName":"Mirror_Mastery.dck","colors":[],"year":2011},
{"id":"Political_Puppets","name":"Political Puppets","commander":"Zedruu the Greathearted","set":"Commander 2011","fileName":"Political_Puppets.dck","colors":[],"year":2011},
{"id":"Eternal_Bargain","name":"Eternal Bargain","commander":"Oloro, Ageless Ascetic","set":"Commander 2013","fileName":"Eternal_Bargain.dck","colors":[],"year":2013},
{"id":"Evasive_Maneuvers_C13","name":"Evasive Maneuvers","commander":"Derevi, Empyrial Tactician","set":"Commander 2013","fileName":"Evasive_Maneuvers_C13.dck","colors":[],"year":2013},
{"id":"Mind_Seize","name":"Mind Seize","commander":"Jeleva, Nephalia's Scourge","set":"Commander 2013","fileName":"Mind_Seize.dck","colors":[],"year":2013},
{"id":"Nature_of_the_Beast","name":"Nature of the Beast","commander":"Marath, Will of the Wild","set":"Commander 2013","fileName":"Nature_of_the_Beast.dck","colors":[],"year":2013},
{"id":"Power_Hungry","name":"Power Hungry","commander":"Prossh, Skyraider of Kher","set":"Commander 2013","fileName":"Power_Hungry.dck","colors":[],"year":2013},
{"id":"Built_From_Scratch_C14","name":"Built From Scratch","commander":"Daretti, Scrap Savant","set":"Commander 2014","fileName":"Built_From_Scratch_C14.dck","colors":[],"year":2014},
{"id":"Forged_In_Stone","name":"Forged In Stone","commander":"Nahiri, the Lithomancer","set":"Commander 2014","fileName":"Forged_In_Stone.dck","colors":[],"year":2014},
{"id":"Guided_By_Nature","name":"Guided By Nature","commander":"Freyalise, Llanowar's Fury","set":"Commander 2014","fileName":"Guided_By_Nature.dck","colors":[],"year":2014},
{"id":"Peer_Through_Time","name":"Peer Through Time","commander":"Teferi, Temporal Archmage","set":"Commander 2014","fileName":"Peer_Through_Time.dck","colors":[],"year":2014},
{"id":"Sworn_To_Darkness","name":"Sworn To Darkness","commander":"Ob Nixilis of the Black Oath","set":"Commander 2014","fileName":"Sworn_To_Darkness.dck","colors":[],"year":2014},
{"id":"Call_the_Spirits","name":"Call the Spirits","commander":"Daxos the Returned","set":"Commander 2015","fileName":"Call_the_Spirits.dck","colors":[],"year":2015},
{"id":"Plunder_the_Graves_C15","name":"Plunder the Graves","commander":"Meren of Clan Nel Toth","set":"Commander 2015","fileName":"Plunder_the_Graves_C15.dck","colors":[],"year":2015},
{"id":"Seize_Control","name":"Seize Control","commander":"Mizzix of the Izmagnus","set":"Commander 2015","fileName":"Seize_Control.dck","colors":[],"year":2015},
{"id":"Swell_the_Host","name":"Swell the Host","commander":"Ezuri, Claw of Progress","set":"Commander 2015","fileName":"Swell_the_Host.dck","colors":[],"year":2015},
{"id":"Wade_into_Battle_C15","name":"Wade into Battle","commander":"Kalemne, Disciple of Iroas","set":"Commander 2015","fileName":"Wade_into_Battle_C15.dck","colors":[],"year":2015},
{"id":"Breed_Lethality_C16","name":"Breed Lethality","commander":"Atraxa, Praetors' Voice","set":"Commander 2016","fileName":"Breed_Lethality_C16.dck","colors":[],"year":2016},
{"id":"Entropic_Uprising","name":"Entropic Uprising","commander":"Yidris, Maelstrom Wielder","set":"Commander 2016","fileName":"Entropic_Uprising.dck","colors":[],"year":2016},
{"id":"Invent_Superiority","name":"Invent Superiority","commander":"Breya, Etherium Shaper","set":"Commander 2016","fileName":"Invent_Superiority.dck","colors":[],"year":2016},
{"id":"Open_Hostility","name":"Open Hostility","commander":"Saskia the Unyielding","set":"Commander 2016","fileName":"Open_Hostility.dck","colors":[],"year":2016},
{"id":"Stalwart_Unity","name":"Stalwart Unity","commander":"Kynaios and Tiro of Meletis","set":"Commander 2016","fileName":"Stalwart_Unity.dck","colors":[],"year":2016},
{"id":"Evasive_Maneuvers_CMA","name":"Evasive Maneuvers","commander":"Derevi, Empyrial Tactician","set":"Commander Anthology","fileName":"Evasive_Maneuvers_CMA.dck","colors":[],"year":2017},
{"id":"Guided_by_Nature","name":"Guided by Nature","commander":"Freyalise, Llanowar's Fury","set":"Commander Anthology","fileName":"Guided_by_Nature.dck","colors":[],"year":2017},
{"id":"Heavenly_Inferno_CMA","name":"Heavenly Inferno","commander":"Kaalia of the Vast","set":"Commander Anthology","fileName":"Heavenly_Inferno_CMA.dck","colors":[],"year":2017},
{"id":"Plunder_the_Graves_CMA","name":"Plunder the Graves","commander":"Meren of Clan Nel Toth","set":"Commander Anthology","fileName":"Plunder_the_Graves_CMA.dck","colors":[],"year":2017},
{"id":"Arcane_Wizardry","name":"Arcane Wizardry","commander":"Inalla, Archmage Ritualist","set":"Commander 2017","fileName":"Arcane_Wizardry.dck","colors":[],"year":2017},
{"id":"Draconic_Domination","name":"Draconic Domination","commander":"The Ur-Dragon","set":"Commander 2017","fileName":"Draconic_Domination.dck","colors":[],"year":2017},
{"id":"Feline_Ferocity","name":"Feline Ferocity","commander":"Arahbo, Roar of the World","set":"Commander 2017","fileName":"Feline_Ferocity.dck","colors":[],"year":2017},
{"id":"Vampiric_Bloodlust","name":"Vampiric Bloodlust","commander":"Edgar Markov","set":"Commander 2017","fileName":"Vampiric_Bloodlust.dck","colors":[],"year":2017},
{"id":"Breed_Lethality_CM2","name":"Breed Lethality","commander":"Atraxa, Praetors' Voice","set":"Commander Anthology Volume II","fileName":"Breed_Lethality_CM2.dck","colors":[],"year":2018},
{"id":"Built_From_Scratch_CM2","name":"Built From Scratch","commander":"Daretti, Scrap Savant","set":"Commander Anthology Volume II","fileName":"Built_From_Scratch_CM2.dck","colors":[],"year":2018},
{"id":"Devour_for_Power_CM2","name":"Devour for Power","commander":"The Mimeoplasm","set":"Commander Anthology Volume II","fileName":"Devour_for_Power_CM2.dck","colors":[],"year":2018},
{"id":"Wade_into_Battle_CM2","name":"Wade into Battle","commander":"Kalemne, Disciple of Iroas","set":"Commander Anthology Volume II","fileName":"Wade_into_Battle_CM2.dck","colors":[],"year":2018},
{"id":"Adaptive_Enchantment","name":"Adaptive Enchantment","commander":"Estrid, the Masked","set":"Commander 2018","fileName":"Adaptive_Enchantment.dck","colors":[],"year":2018},
{"id":"Exquisite_Invention","name":"Exquisite Invention","commander":"Saheeli, the Gifted","set":"Commander 2018","fileName":"Exquisite_Invention.dck","colors":[],"year":2018},
{"id":"Natures_Vengeance","name":"Nature's Vengeance","commander":"Lord Windgrace","set":"Commander 2018","fileName":"Natures_Vengeance.dck","colors":[],"year":2018},
{"id":"Subjective_Reality","name":"Subjective Reality","commander":"Aminatou, the Fateshifter","set":"Commander 2018","fileName":"Subjective_Reality.dck","colors":[],"year":2018},
{"id":"Faceless_Menace","name":"Faceless Menace","commander":"Kadena, Slinking Sorcerer","set":"Commander 2019","fileName":"Faceless_Menace.dck","colors":[],"year":2019},
{"id":"Merciless_Rage","name":"Merciless Rage","commander":"Anje Falkenrath","set":"Commander 2019","fileName":"Merciless_Rage.dck","colors":[],"year":2019},
{"id":"Mystic_Intellect","name":"Mystic Intellect","commander":"Sevinne, the Chronoclasm","set":"Commander 2019","fileName":"Mystic_Intellect.dck","colors":[],"year":2019},
{"id":"Primal_Genesis","name":"Primal Genesis","commander":"Ghired, Conclave Exile","set":"Commander 2019","fileName":"Primal_Genesis.dck","colors":[],"year":2019},
{"id":"Arcane_Maelstrom","name":"Arcane Maelstrom","commander":"Kalamax, the Stormsire","set":"Commander 2020","fileName":"Arcane_Maelstrom.dck","colors":[],"year":2020},
{"id":"Enhanced_Evolution","name":"Enhanced Evolution","commander":"Otrimi, the Ever-Playful","set":"Commander 2020","fileName":"Enhanced_Evolution.dck","colors":[],"year":2020},
{"id":"Ruthless_Regiment","name":"Ruthless Regiment","commander":"Jirina Kudro","set":"Commander 2020","fileName":"Ruthless_Regiment.dck","colors":[],"year":2020},
{"id":"Symbiotic_Swarm","name":"Symbiotic Swarm","commander":"Kathril, Aspect Warper","set":"Commander 2020","fileName":"Symbiotic_Swarm.dck","colors":[],"year":2020},
{"id":"Timeless_Wisdom","name":"Timeless Wisdom","commander":"Gavi, Nest Warden","set":"Commander 2020","fileName":"Timeless_Wisdom.dck","colors":[],"year":2020},
{"id":"Lands_Wrath","name":"Land's Wrath","commander":"Obuun, Mul Daya Ancestor","set":"Zendikar Rising Commander","fileName":"Lands_Wrath.dck","colors":[],"year":2020},
{"id":"Sneak_Attack","name":"Sneak Attack","commander":"Anowon, the Ruin Thief","set":"Zendikar Rising Commander","fileName":"Sneak_Attack.dck","colors":[],"year":2020},
{"id":"Arm_for_Battle","name":"Arm for Battle","commander":"Wyleth, Soul of Steel","set":"Commander Legends","fileName":"Arm_for_Battle.dck","colors":[],"year":2020},
{"id":"Reap_the_Tides","name":"Reap the Tides","commander":"Aesi, Tyrant of Gyre Strait","set":"Commander Legends","fileName":"Reap_the_Tides.dck","colors":[],"year":2020},
{"id":"Elven_Empire","name":"Elven Empire","commander":"Lathril, Blade of the Elves","set":"Kaldheim Commander","fileName":"Elven_Empire.dck","colors":[],"year":2021},
{"id":"Phantom_Premonition","name":"Phantom Premonition","commander":"Ranar the Ever-Watchful","set":"Kaldheim Commander","fileName":"Phantom_Premonition.dck","colors":[],"year":2021},
{"id":"Lorehold_Legacies","name":"Lorehold Legacies","commander":"Osgir, the Reconstructor","set":"Commander 2021","fileName":"Lorehold_Legacies.dck","colors":[],"year":2021},
{"id":"Prismari_Performance","name":"Prismari Performance","commander":"Zaffai, Thunder Conductor","set":"Commander 2021","fileName":"Prismari_Performance.dck","colors":[],"year":2021},
{"id":"Quantum_Quandrix","name":"Quantum Quandrix","commander":"Adrix and Nev, Twincasters","set":"Commander 2021","fileName":"Quantum_Quandrix.dck","colors":[],"year":2021},
{"id":"Silverquill_Statement","name":"Silverquill Statement","commander":"Breena, the Demagogue","set":"Commander 2021","fileName":"Silverquill_Statement.dck","colors":[],"year":2021},
{"id":"Witherbloom_Witchcraft","name":"Witherbloom Witchcraft","commander":"Willowdusk, Essence Seer","set":"Commander 2021","fileName":"Witherbloom_Witchcraft.dck","colors":[],"year":2021},
{"id":"Aura_of_Courage","name":"Aura of Courage","commander":"Galea, Kindler of Hope","set":"Forgotten Realms Commander","fileName":"Aura_of_Courage.dck","colors":[],"year":2021},
{"id":"Draconic_Rage","name":"Draconic Rage","commander":"Vrondiss, Rage of Ancients","set":"Forgotten Realms Commander","fileName":"Draconic_Rage.dck","colors":[],"year":2021},
{"id":"Dungeons_of_Death","name":"Dungeons of Death","commander":"Sefris of the Hidden Ways","set":"Forgotten Realms Commander","fileName":"Dungeons_of_Death.dck","colors":[],"year":2021},
{"id":"Planar_Portal","name":"Planar Portal","commander":"Prosper, Tome-Bound","set":"Forgotten Realms Commander","fileName":"Planar_Portal.dck","colors":[],"year":2021},
{"id":"Coven_Counters","name":"Coven Counters","commander":"Leinore, Autumn Sovereign","set":"Midnight Hunt Commander","fileName":"Coven_Counters.dck","colors":[],"year":2021},
{"id":"Undead_Unleashed","name":"Undead Unleashed","commander":"Wilhelt, the Rotcleaver","set":"Midnight Hunt Commander","fileName":"Undead_Unleashed.dck","colors":[],"year":2021},
{"id":"Spirit_Squadron","name":"Spirit Squadron","commander":"Millicent, Restless Revenant","set":"Crimson Vow Commander","fileName":"Spirit_Squadron.dck","colors":[],"year":2021},
{"id":"Vampiric_Bloodline","name":"Vampiric Bloodline","commander":"Strefan, Maurer Progenitor","set":"Crimson Vow Commander","fileName":"Vampiric_Bloodline.dck","colors":[],"year":2021},
{"id":"Buckle_Up","name":"Buckle Up","commander":"Kotori, Pilot Prodigy","set":"Neon Dynasty Commander","fileName":"Buckle_Up.dck","colors":[],"year":2022},
{"id":"Upgrades_Unleashed","name":"Upgrades Unleashed","commander":"Chishiro, the Shattered Blade","set":"Neon Dynasty Commander","fileName":"Upgrades_Unleashed.dck","colors":[],"year":2022},
{"id":"Heads_I_Win,_Tails_You_Lose","name":"Heads I Win, Tails You Lose","commander":"Zndrsplt, Eye of Wisdom","set":"Secret Lair Drop","fileName":"Heads_I_Win,_Tails_You_Lose.dck","colors":[],"year":2022},
{"id":"Bedecked_Brokers","name":"Bedecked Brokers","commander":"Perrie, the Pulverizer","set":"New Capenna Commander","fileName":"Bedecked_Brokers.dck","colors":[],"year":2022},
{"id":"Cabaretti_Cacophony","name":"Cabaretti Cacophony","commander":"Kitt Kanto, Mayhem Diva","set":"New Capenna Commander","fileName":"Cabaretti_Cacophony.dck","colors":[],"year":2022},
{"id":"Maestros_Massacre","name":"Maestros Massacre","commander":"Anhelo, the Painter","set":"New Capenna Commander","fileName":"Maestros_Massacre.dck","colors":[],"year":2022},
{"id":"Obscura_Operation","name":"Obscura Operation","commander":"Kamiz, Obscura Oculus","set":"New Capenna Commander","fileName":"Obscura_Operation.dck","colors":[],"year":2022},
{"id":"Riveteers_Rampage","name":"Riveteers Rampage","commander":"Henzie \"Toolbox\" Torre","set":"New Capenna Commander","fileName":"Riveteers_Rampage.dck","colors":[],"year":2022},
{"id":"Draconic_Dissent","name":"Draconic Dissent","commander":"Firkraag, Cunning Instigator","set":"Commander Legends: Battle for Baldur's Gate","fileName":"Draconic_Dissent.dck","colors":[],"year":2022},
{"id":"Exit_from_Exile","name":"Exit from Exile","commander":"Faldorn, Dread Wolf Herald","set":"Commander Legends: Battle for Baldur's Gate","fileName":"Exit_from_Exile.dck","colors":[],"year":2022},
{"id":"Mind_Flayarrrs","name":"Mind Flayarrrs","commander":"Captain N'ghathrod","set":"Commander Legends: Battle for Baldur's Gate","fileName":"Mind_Flayarrrs.dck","colors":[],"year":2022},
{"id":"Party_Time","name":"Party Time","commander":"Nalia de'Arnise","set":"Commander Legends: Battle for Baldur's Gate","fileName":"Party_Time.dck","colors":[],"year":2022},
{"id":"Legends_Legacy","name":"Legends' Legacy","commander":"Dihada, Binder of Wills","set":"Dominaria United Commander","fileName":"Legends_Legacy.dck","colors":[],"year":2022},
{"id":"Painbow","name":"Painbow","commander":"Jared Carthalion","set":"Dominaria United Commander","fileName":"Painbow.dck","colors":[],"year":2022},
{"id":"Forces_of_the_Imperium","name":"Forces of the Imperium","commander":"Inquisitor Greyfax","set":"Warhammer 40,000 Commander","fileName":"Forces_of_the_Imperium.dck","colors":[],"year":2022},
{"id":"Forces_of_the_Imperium_Collectors_Edition","name":"Forces of the Imperium Collector's Edition","commander":"Inquisitor Greyfax","set":"Warhammer 40,000 Commander","fileName":"Forces_of_the_Imperium_Collectors_Edition.dck","colors":[],"year":2022},
{"id":"Necron_Dynasties","name":"Necron Dynasties","commander":"Szarekh, the Silent King","set":"Warhammer 40,000 Commander","fileName":"Necron_Dynasties.dck","colors":[],"year":2022},
{"id":"Necron_Dynasties_Collectors_Edition","name":"Necron Dynasties Collector's Edition","commander":"Szarekh, the Silent King","set":"Warhammer 40,000 Commander","fileName":"Necron_Dynasties_Collectors_Edition.dck","colors":[],"year":2022},
{"id":"The_Ruinous_Powers","name":"The Ruinous Powers","commander":"Abaddon the Despoiler","set":"Warhammer 40,000 Commander","fileName":"The_Ruinous_Powers.dck","colors":[],"year":2022},
{"id":"The_Ruinous_Powers_Collectors_Edition","name":"The Ruinous Powers Collector's Edition","commander":"Abaddon the Despoiler","set":"Warhammer 40,000 Commander","fileName":"The_Ruinous_Powers_Collectors_Edition.dck","colors":[],"year":2022},
{"id":"Tyranid_Swarm","name":"Tyranid Swarm","commander":"The Swarmlord","set":"Warhammer 40,000 Commander","fileName":"Tyranid_Swarm.dck","colors":[],"year":2022},
{"id":"Tyranid_Swarm_Collectors_Edition","name":"Tyranid Swarm Collector's Edition","commander":"The Swarmlord","set":"Warhammer 40,000 Commander","fileName":"Tyranid_Swarm_Collectors_Edition.dck","colors":[],"year":2022},
{"id":"Mishras_Burnished_Banner","name":"Mishra's Burnished Banner","commander":"Mishra, Eminent One","set":"The Brothers' War Commander","fileName":"Mishras_Burnished_Banner.dck","colors":[],"year":2022},
{"id":"Urzas_Iron_Alliance","name":"Urza's Iron Alliance","commander":"Urza, Chief Artificer","set":"The Brothers' War Commander","fileName":"Urzas_Iron_Alliance.dck","colors":[],"year":2022},
{"id":"Chaos_Incarnate","name":"Chaos Incarnate","commander":"Kardur, Doomscourge","set":"Starter Commander Decks","fileName":"Chaos_Incarnate.dck","colors":[],"year":2022},
{"id":"Draconic_Destruction","name":"Draconic Destruction","commander":"Atarka, World Render","set":"Starter Commander Decks","fileName":"Draconic_Destruction.dck","colors":[],"year":2022},
{"id":"First_Flight","name":"First Flight","commander":"Isperia, Supreme Judge","set":"Starter Commander Decks","fileName":"First_Flight.dck","colors":[],"year":2022},
{"id":"Grave_Danger","name":"Grave Danger","commander":"Gisa and Geralf","set":"Starter Commander Decks","fileName":"Grave_Danger.dck","colors":[],"year":2022},
{"id":"Token_Triumph","name":"Token Triumph","commander":"Emmara, Soul of the Accord","set":"Starter Commander Decks","fileName":"Token_Triumph.dck","colors":[],"year":2022},
{"id":"Corrupting_Influence","name":"Corrupting Influence","commander":"Ixhel, Scion of Atraxa","set":"Phyrexia: All Will Be One Commander","fileName":"Corrupting_Influence.dck","colors":[],"year":2023},
{"id":"Rebellion_Rising","name":"Rebellion Rising","commander":"Neyali, Suns' Vanguard","set":"Phyrexia: All Will Be One Commander","fileName":"Rebellion_Rising.dck","colors":[],"year":2023},
{"id":"From_Cute_to_Brute","name":"From Cute to Brute","commander":"Esika, God of the Tree","set":"Secret Lair Drop","fileName":"From_Cute_to_Brute.dck","colors":[],"year":2023},
{"id":"Elven_Council","name":"Elven Council","commander":"Galadriel, Elven-Queen","set":"Tales of Middle-earth Commander","fileName":"Elven_Council.dck","colors":[],"year":2023},
{"id":"Food_and_Fellowship","name":"Food and Fellowship","commander":"Frodo, Adventurous Hobbit","set":"Tales of Middle-earth Commander","fileName":"Food_and_Fellowship.dck","colors":[],"year":2023},
{"id":"Riders_of_Rohan","name":"Riders of Rohan","commander":"Éowyn, Shieldmaiden","set":"Tales of Middle-earth Commander","fileName":"Riders_of_Rohan.dck","colors":[],"year":2023},
{"id":"The_Hosts_of_Mordor","name":"The Hosts of Mordor","commander":"Sauron, Lord of the Rings","set":"Tales of Middle-earth Commander","fileName":"The_Hosts_of_Mordor.dck","colors":[],"year":2023},
{"id":"Eldrazi_Unbound","name":"Eldrazi Unbound","commander":"Zhulodok, Void Gorger","set":"Commander Masters","fileName":"Eldrazi_Unbound.dck","colors":[],"year":2023},
{"id":"Enduring_Enchantments","name":"Enduring Enchantments","commander":"Anikthea, Hand of Erebos","set":"Commander Masters","fileName":"Enduring_Enchantments.dck","colors":[],"year":2023},
{"id":"Planeswalker_Party","name":"Planeswalker Party","commander":"Commodore Guff","set":"Commander Masters","fileName":"Planeswalker_Party.dck","colors":[],"year":2023},
{"id":"Sliver_Swarm","name":"Sliver Swarm","commander":"Sliver Gravemother","set":"Commander Masters","fileName":"Sliver_Swarm.dck","colors":[],"year":2023},
{"id":"Angels_Theyre_Just_Like_Us_but_Cooler_and_with_Wings","name":"Angels: They're Just Like Us but Cooler and with Wings","commander":"Gisela, the Broken Blade","set":"Secret Lair Drop","fileName":"Angels_Theyre_Just_Like_Us_but_Cooler_and_with_Wings.dck","colors":[],"year":2023},
{"id":"Fae_Dominion","name":"Fae Dominion","commander":"Tegwyll, Duke of Splendor","set":"Wilds of Eldraine Commander","fileName":"Fae_Dominion.dck","colors":[],"year":2023},
{"id":"Virtue_and_Valor","name":"Virtue and Valor","commander":"Ellivere of the Wild Court","set":"Wilds of Eldraine Commander","fileName":"Virtue_and_Valor.dck","colors":[],"year":2023},
{"id":"Ahoy_Mateys","name":"Ahoy Mateys","commander":"Admiral Brass, Unsinkable","set":"The Lost Caverns of Ixalan Commander","fileName":"Ahoy_Mateys.dck","colors":[],"year":2023},
{"id":"Blood_Rites","name":"Blood Rites","commander":"Clavileño, First of the Blessed","set":"The Lost Caverns of Ixalan Commander","fileName":"Blood_Rites.dck","colors":[],"year":2023},
{"id":"Explorers_of_the_Deep","name":"Explorers of the Deep","commander":"Hakbal of the Surging Soul","set":"The Lost Caverns of Ixalan Commander","fileName":"Explorers_of_the_Deep.dck","colors":[],"year":2023},
{"id":"Veloci-Ramp-Tor","name":"Veloci-Ramp-Tor","commander":"Pantlaza, Sun-Favored","set":"The Lost Caverns of Ixalan Commander","fileName":"Veloci-Ramp-Tor.dck","colors":[],"year":2023},
{"id":"Raining_Cats_and_Dogs","name":"Raining Cats and Dogs","commander":"Rin and Seri, Inseparable","set":"Secret Lair Drop","fileName":"Raining_Cats_and_Dogs.dck","colors":[],"year":2024},
{"id":"Blame_Game","name":"Blame Game","commander":"Nelly Borca, Impulsive Accuser","set":"Murders at Karlov Manor Commander","fileName":"Blame_Game.dck","colors":[],"year":2024},
{"id":"Deadly_Disguise","name":"Deadly Disguise","commander":"Kaust, Eyes of the Glade","set":"Murders at Karlov Manor Commander","fileName":"Deadly_Disguise.dck","colors":[],"year":2024},
{"id":"Deep_Clue_Sea","name":"Deep Clue Sea","commander":"Morska, Undersea Sleuth","set":"Murders at Karlov Manor Commander","fileName":"Deep_Clue_Sea.dck","colors":[],"year":2024},
{"id":"Revenant_Recon","name":"Revenant Recon","commander":"Mirko, Obsessive Theorist","set":"Murders at Karlov Manor Commander","fileName":"Revenant_Recon.dck","colors":[],"year":2024},
{"id":"Hail,_Caesar","name":"Hail, Caesar","commander":"Caesar, Legion's Emperor","set":"Fallout","fileName":"Hail,_Caesar.dck","colors":[],"year":2024},
{"id":"Mutant_Menace","name":"Mutant Menace","commander":"The Wise Mothman","set":"Fallout","fileName":"Mutant_Menace.dck","colors":[],"year":2024},
{"id":"Science","name":"Science!","commander":"Dr. Madison Li","set":"Fallout","fileName":"Science.dck","colors":[],"year":2024},
{"id":"Scrappy_Survivors","name":"Scrappy Survivors","commander":"Dogmeat, Ever Loyal","set":"Fallout","fileName":"Scrappy_Survivors.dck","colors":[],"year":2024},
{"id":"Desert_Bloom","name":"Desert Bloom","commander":"Yuma, Proud Protector","set":"Outlaws of Thunder Junction Commander","fileName":"Desert_Bloom.dck","colors":[],"year":2024},
{"id":"Grand_Larceny","name":"Grand Larceny","commander":"Gonti, Canny Acquisitor","set":"Outlaws of Thunder Junction Commander","fileName":"Grand_Larceny.dck","colors":[],"year":2024},
{"id":"Most_Wanted","name":"Most Wanted","commander":"Olivia, Opulent Outlaw","set":"Outlaws of Thunder Junction Commander","fileName":"Most_Wanted.dck","colors":[],"year":2024},
{"id":"Quick_Draw","name":"Quick Draw","commander":"Stella Lee, Wild Card","set":"Outlaws of Thunder Junction Commander","fileName":"Quick_Draw.dck","colors":[],"year":2024},
{"id":"Creative_Energy","name":"Creative Energy","commander":"Satya, Aetherflux Genius","set":"Modern Horizons 3 Commander","fileName":"Creative_Energy.dck","colors":[],"year":2024},
{"id":"Creative_Energy_Collectors_Edition","name":"Creative Energy Collector's Edition","commander":"Satya, Aetherflux Genius","set":"Modern Horizons 3 Commander","fileName":"Creative_Energy_Collectors_Edition.dck","colors":[],"year":2024},
{"id":"Eldrazi_Incursion","name":"Eldrazi Incursion","commander":"Ulalek, Fused Atrocity","set":"Modern Horizons 3 Commander","fileName":"Eldrazi_Incursion.dck","colors":[],"year":2024},
{"id":"Eldrazi_Incursion_Collectors_Edition","name":"Eldrazi Incursion Collector's Edition","commander":"Ulalek, Fused Atrocity","set":"Modern Horizons 3 Commander","fileName":"Eldrazi_Incursion_Collectors_Edition.dck","colors":[],"year":2024},
{"id":"Graveyard_Overdrive","name":"Graveyard Overdrive","commander":"Disa the Restless","set":"Modern Horizons 3 Commander","fileName":"Graveyard_Overdrive.dck","colors":[],"year":2024},
{"id":"Graveyard_Overdrive_Collectors_Edition","name":"Graveyard Overdrive Collector's Edition","commander":"Disa the Restless","set":"Modern Horizons 3 Commander","fileName":"Graveyard_Overdrive_Collectors_Edition.dck","colors":[],"year":2024},
{"id":"Tricky_Terrain","name":"Tricky Terrain","commander":"Omo, Queen of Vesuva","set":"Modern Horizons 3 Commander","fileName":"Tricky_Terrain.dck","colors":[],"year":2024},
{"id":"Tricky_Terrain_Collectors_Edition","name":"Tricky Terrain Collector's Edition","commander":"Omo, Queen of Vesuva","set":"Modern Horizons 3 Commander","fileName":"Tricky_Terrain_Collectors_Edition.dck","colors":[],"year":2024},
{"id":"Animated_Army","name":"Animated Army","commander":"Bello, Bard of the Brambles","set":"Bloomburrow Commander","fileName":"Animated_Army.dck","colors":[],"year":2024},
{"id":"Family_Matters","name":"Family Matters","commander":"Zinnia, Valley's Voice","set":"Bloomburrow Commander","fileName":"Family_Matters.dck","colors":[],"year":2024},
{"id":"Peace_Offering","name":"Peace Offering","commander":"Ms. Bumbleflower","set":"Bloomburrow Commander","fileName":"Peace_Offering.dck","colors":[],"year":2024},
{"id":"Squirreled_Away","name":"Squirreled Away","commander":"Hazel of the Rootbloom","set":"Bloomburrow Commander","fileName":"Squirreled_Away.dck","colors":[],"year":2024},
{"id":"20_Ways_to_Win","name":"20 Ways to Win","commander":"Go-Shintai of Life's Origin","set":"Secret Lair Drop","fileName":"20_Ways_to_Win.dck","colors":[],"year":2024},
{"id":"Eternal_Might","name":"Eternal Might","commander":"Temmet, Naktamun's Will","set":"Aetherdrift Commander","fileName":"Eternal_Might.dck","colors":[],"year":2025},
{"id":"Living_Energy","name":"Living Energy","commander":"Saheeli, Radiant Creator","set":"Aetherdrift Commander","fileName":"Living_Energy.dck","colors":[],"year":2025},
{"id":"Abzan_Armor","name":"Abzan Armor","commander":"Felothar the Steadfast","set":"Tarkir: Dragonstorm Commander","fileName":"Abzan_Armor.dck","colors":[],"year":2025},
{"id":"Jeskai_Striker","name":"Jeskai Striker","commander":"Shiko and Narset, Unified","set":"Tarkir: Dragonstorm Commander","fileName":"Jeskai_Striker.dck","colors":[],"year":2025},
{"id":"Mardu_Surge","name":"Mardu Surge","commander":"Zurgo Stormrender","set":"Tarkir: Dragonstorm Commander","fileName":"Mardu_Surge.dck","colors":[],"year":2025},
{"id":"Sultai_Arisen","name":"Sultai Arisen","commander":"Teval, the Balanced Scale","set":"Tarkir: Dragonstorm Commander","fileName":"Sultai_Arisen.dck","colors":[],"year":2025},
{"id":"Temur_Roar","name":"Temur Roar","commander":"Eshki, Temur's Roar","set":"Tarkir: Dragonstorm Commander","fileName":"Temur_Roar.dck","colors":[],"year":2025},
{"id":"Everyones_Invited","name":"Everyone's Invited!","commander":"Morophon, the Boundless","set":"Secret Lair Drop","fileName":"Everyones_Invited.dck","colors":[],"year":2025},
{"id":"Counter_Blitz_(FINAL_FANTASY_X)","name":"Counter Blitz (FINAL FANTASY X)","commander":"Tidus, Yuna's Guardian","set":"Final Fantasy Commander","fileName":"Counter_Blitz_(FINAL_FANTASY_X).dck","colors":[],"year":2025},
{"id":"Counter_Blitz_Collectors_Edition_(FINAL_FANTASY_X)","name":"Counter Blitz Collector's Edition (FINAL FANTASY X)","commander":"Tidus, Yuna's Guardian","set":"Final Fantasy Commander","fileName":"Counter_Blitz_Collectors_Edition_(FINAL_FANTASY_X).dck","colors":[],"year":2025},
{"id":"Limit_Break_(FINAL_FANTASY_VII)","name":"Limit Break (FINAL FANTASY VII)","commander":"Cloud, Ex-SOLDIER","set":"Final Fantasy Commander","fileName":"Limit_Break_(FINAL_FANTASY_VII).dck","colors":[],"year":2025},
{"id":"Limit_Break_Collectors_Edition_(FINAL_FANTASY_VII)","name":"Limit Break Collector's Edition (FINAL FANTASY VII)","commander":"Cloud, Ex-SOLDIER","set":"Final Fantasy Commander","fileName":"Limit_Break_Collectors_Edition_(FINAL_FANTASY_VII).dck","colors":[],"year":2025},
{"id":"Revival_Trance_(FINAL_FANTASY_VI)","name":"Revival Trance (FINAL FANTASY VI)","commander":"Terra, Herald of Hope","set":"Final Fantasy Commander","fileName":"Revival_Trance_(FINAL_FANTASY_VI).dck","colors":[],"year":2025},
{"id":"Revival_Trance_Collectors_Edition_(FINAL_FANTASY_VI)","name":"Revival Trance Collector's Edition (FINAL FANTASY VI)","commander":"Terra, Herald of Hope","set":"Final Fantasy Commander","fileName":"Revival_Trance_Collectors_Edition_(FINAL_FANTASY_VI).dck","colors":[],"year":2025},
{"id":"Scions_&_Spellcraft_(FINAL_FANTASY_XIV)","name":"Scions & Spellcraft (FINAL FANTASY XIV)","commander":"Y'shtola, Night's Blessed","set":"Final Fantasy Commander","fileName":"Scions_&_Spellcraft_(FINAL_FANTASY_XIV).dck","colors":[],"year":2025},
{"id":"Scions_&_Spellcraft_Collectors_Edition_(FINAL_FANTASY_XIV)","name":"Scions & Spellcraft Collector's Edition (FINAL FANTASY XIV)","commander":"Y'shtola, Night's Blessed","set":"Final Fantasy Commander","fileName":"Scions_&_Spellcraft_Collectors_Edition_(FINAL_FANTASY_XIV).dck","colors":[],"year":2025},
{"id":"Counter_Intelligence","name":"Counter Intelligence","commander":"Inspirit, Flagship Vessel","set":"Edge of Eternities Commander","fileName":"Counter_Intelligence.dck","colors":[],"year":2025},
{"id":"World_Shaper","name":"World Shaper","commander":"Hearthhull, the Worldseed","set":"Edge of Eternities Commander","fileName":"World_Shaper.dck","colors":[],"year":2025},
{"id":"Blight_Curse","name":"Blight Curse","commander":"Auntie Ool, Cursewretch","set":"Lorwyn Eclipsed Commander","fileName":"Blight_Curse.dck","colors":[],"year":2026},
{"id":"Dance_of_the_Elements","name":"Dance of the Elements","commander":"Ashling, the Limitless","set":"Lorwyn Eclipsed Commander","fileName":"Dance_of_the_Elements.dck","colors":[],"year":2026},
{"id":"Turtle_Power","name":"Turtle Power!","commander":"Heroes in a Half Shell","set":"Teenage Mutant Ninja Turtles Eternal","fileName":"Turtle_Power.dck","colors":[],"year":2026}
{ id: "Counterpunch", name: "Counterpunch", commander: "Ghave, Guru of Spores", set: "Commander 2011", fileName: "Counterpunch.dck", colors: [], year: 2011 },
{ id: "Devour_for_Power_CMD", name: "Devour for Power", commander: "The Mimeoplasm", set: "Commander 2011", fileName: "Devour_for_Power_CMD.dck", colors: [], year: 2011 },
{ id: "Heavenly_Inferno_CMD", name: "Heavenly Inferno", commander: "Kaalia of the Vast", set: "Commander 2011", fileName: "Heavenly_Inferno_CMD.dck", colors: [], year: 2011 },
{ id: "Mirror_Mastery", name: "Mirror Mastery", commander: "Riku of Two Reflections", set: "Commander 2011", fileName: "Mirror_Mastery.dck", colors: [], year: 2011 },
{ id: "Political_Puppets", name: "Political Puppets", commander: "Zedruu the Greathearted", set: "Commander 2011", fileName: "Political_Puppets.dck", colors: [], year: 2011 },
{ id: "Eternal_Bargain", name: "Eternal Bargain", commander: "Oloro, Ageless Ascetic", set: "Commander 2013", fileName: "Eternal_Bargain.dck", colors: [], year: 2013 },
{ id: "Evasive_Maneuvers_C13", name: "Evasive Maneuvers", commander: "Derevi, Empyrial Tactician", set: "Commander 2013", fileName: "Evasive_Maneuvers_C13.dck", colors: [], year: 2013 },
{ id: "Mind_Seize", name: "Mind Seize", commander: "Jeleva, Nephalia's Scourge", set: "Commander 2013", fileName: "Mind_Seize.dck", colors: [], year: 2013 },
{ id: "Nature_of_the_Beast", name: "Nature of the Beast", commander: "Marath, Will of the Wild", set: "Commander 2013", fileName: "Nature_of_the_Beast.dck", colors: [], year: 2013 },
{ id: "Power_Hungry", name: "Power Hungry", commander: "Prossh, Skyraider of Kher", set: "Commander 2013", fileName: "Power_Hungry.dck", colors: [], year: 2013 },
{ id: "Built_From_Scratch_C14", name: "Built From Scratch", commander: "Daretti, Scrap Savant", set: "Commander 2014", fileName: "Built_From_Scratch_C14.dck", colors: [], year: 2014 },
{ id: "Forged_In_Stone", name: "Forged In Stone", commander: "Nahiri, the Lithomancer", set: "Commander 2014", fileName: "Forged_In_Stone.dck", colors: [], year: 2014 },
{ id: "Guided_By_Nature", name: "Guided By Nature", commander: "Freyalise, Llanowar's Fury", set: "Commander 2014", fileName: "Guided_By_Nature.dck", colors: [], year: 2014 },
{ id: "Peer_Through_Time", name: "Peer Through Time", commander: "Teferi, Temporal Archmage", set: "Commander 2014", fileName: "Peer_Through_Time.dck", colors: [], year: 2014 },
{ id: "Sworn_To_Darkness", name: "Sworn To Darkness", commander: "Ob Nixilis of the Black Oath", set: "Commander 2014", fileName: "Sworn_To_Darkness.dck", colors: [], year: 2014 },
{ id: "Call_the_Spirits", name: "Call the Spirits", commander: "Daxos the Returned", set: "Commander 2015", fileName: "Call_the_Spirits.dck", colors: [], year: 2015 },
{ id: "Plunder_the_Graves_C15", name: "Plunder the Graves", commander: "Meren of Clan Nel Toth", set: "Commander 2015", fileName: "Plunder_the_Graves_C15.dck", colors: [], year: 2015 },
{ id: "Seize_Control", name: "Seize Control", commander: "Mizzix of the Izmagnus", set: "Commander 2015", fileName: "Seize_Control.dck", colors: [], year: 2015 },
{ id: "Swell_the_Host", name: "Swell the Host", commander: "Ezuri, Claw of Progress", set: "Commander 2015", fileName: "Swell_the_Host.dck", colors: [], year: 2015 },
{ id: "Wade_into_Battle_C15", name: "Wade into Battle", commander: "Kalemne, Disciple of Iroas", set: "Commander 2015", fileName: "Wade_into_Battle_C15.dck", colors: [], year: 2015 },
{ id: "Breed_Lethality_C16", name: "Breed Lethality", commander: "Atraxa, Praetors' Voice", set: "Commander 2016", fileName: "Breed_Lethality_C16.dck", colors: [], year: 2016 },
{ id: "Entropic_Uprising", name: "Entropic Uprising", commander: "Yidris, Maelstrom Wielder", set: "Commander 2016", fileName: "Entropic_Uprising.dck", colors: [], year: 2016 },
{ id: "Invent_Superiority", name: "Invent Superiority", commander: "Breya, Etherium Shaper", set: "Commander 2016", fileName: "Invent_Superiority.dck", colors: [], year: 2016 },
{ id: "Open_Hostility", name: "Open Hostility", commander: "Saskia the Unyielding", set: "Commander 2016", fileName: "Open_Hostility.dck", colors: [], year: 2016 },
{ id: "Stalwart_Unity", name: "Stalwart Unity", commander: "Kynaios and Tiro of Meletis", set: "Commander 2016", fileName: "Stalwart_Unity.dck", colors: [], year: 2016 },
{ id: "Evasive_Maneuvers_CMA", name: "Evasive Maneuvers", commander: "Derevi, Empyrial Tactician", set: "Commander Anthology", fileName: "Evasive_Maneuvers_CMA.dck", colors: [], year: 2017 },
{ id: "Guided_by_Nature", name: "Guided by Nature", commander: "Freyalise, Llanowar's Fury", set: "Commander Anthology", fileName: "Guided_by_Nature.dck", colors: [], year: 2017 },
{ id: "Heavenly_Inferno_CMA", name: "Heavenly Inferno", commander: "Kaalia of the Vast", set: "Commander Anthology", fileName: "Heavenly_Inferno_CMA.dck", colors: [], year: 2017 },
{ id: "Plunder_the_Graves_CMA", name: "Plunder the Graves", commander: "Meren of Clan Nel Toth", set: "Commander Anthology", fileName: "Plunder_the_Graves_CMA.dck", colors: [], year: 2017 },
{ id: "Arcane_Wizardry", name: "Arcane Wizardry", commander: "Inalla, Archmage Ritualist", set: "Commander 2017", fileName: "Arcane_Wizardry.dck", colors: [], year: 2017 },
{ id: "Draconic_Domination", name: "Draconic Domination", commander: "The Ur-Dragon", set: "Commander 2017", fileName: "Draconic_Domination.dck", colors: [], year: 2017 },
{ id: "Feline_Ferocity", name: "Feline Ferocity", commander: "Arahbo, Roar of the World", set: "Commander 2017", fileName: "Feline_Ferocity.dck", colors: [], year: 2017 },
{ id: "Vampiric_Bloodlust", name: "Vampiric Bloodlust", commander: "Edgar Markov", set: "Commander 2017", fileName: "Vampiric_Bloodlust.dck", colors: [], year: 2017 },
{ id: "Breed_Lethality_CM2", name: "Breed Lethality", commander: "Atraxa, Praetors' Voice", set: "Commander Anthology Volume II", fileName: "Breed_Lethality_CM2.dck", colors: [], year: 2018 },
{ id: "Built_From_Scratch_CM2", name: "Built From Scratch", commander: "Daretti, Scrap Savant", set: "Commander Anthology Volume II", fileName: "Built_From_Scratch_CM2.dck", colors: [], year: 2018 },
{ id: "Devour_for_Power_CM2", name: "Devour for Power", commander: "The Mimeoplasm", set: "Commander Anthology Volume II", fileName: "Devour_for_Power_CM2.dck", colors: [], year: 2018 },
{ id: "Wade_into_Battle_CM2", name: "Wade into Battle", commander: "Kalemne, Disciple of Iroas", set: "Commander Anthology Volume II", fileName: "Wade_into_Battle_CM2.dck", colors: [], year: 2018 },
{ id: "Adaptive_Enchantment", name: "Adaptive Enchantment", commander: "Estrid, the Masked", set: "Commander 2018", fileName: "Adaptive_Enchantment.dck", colors: [], year: 2018 },
{ id: "Exquisite_Invention", name: "Exquisite Invention", commander: "Saheeli, the Gifted", set: "Commander 2018", fileName: "Exquisite_Invention.dck", colors: [], year: 2018 },
{ id: "Natures_Vengeance", name: "Nature's Vengeance", commander: "Lord Windgrace", set: "Commander 2018", fileName: "Natures_Vengeance.dck", colors: [], year: 2018 },
{ id: "Subjective_Reality", name: "Subjective Reality", commander: "Aminatou, the Fateshifter", set: "Commander 2018", fileName: "Subjective_Reality.dck", colors: [], year: 2018 },
{ id: "Faceless_Menace", name: "Faceless Menace", commander: "Kadena, Slinking Sorcerer", set: "Commander 2019", fileName: "Faceless_Menace.dck", colors: [], year: 2019 },
{ id: "Merciless_Rage", name: "Merciless Rage", commander: "Anje Falkenrath", set: "Commander 2019", fileName: "Merciless_Rage.dck", colors: [], year: 2019 },
{ id: "Mystic_Intellect", name: "Mystic Intellect", commander: "Sevinne, the Chronoclasm", set: "Commander 2019", fileName: "Mystic_Intellect.dck", colors: [], year: 2019 },
{ id: "Primal_Genesis", name: "Primal Genesis", commander: "Ghired, Conclave Exile", set: "Commander 2019", fileName: "Primal_Genesis.dck", colors: [], year: 2019 },
{ id: "Arcane_Maelstrom", name: "Arcane Maelstrom", commander: "Kalamax, the Stormsire", set: "Commander 2020", fileName: "Arcane_Maelstrom.dck", colors: [], year: 2020 },
{ id: "Enhanced_Evolution", name: "Enhanced Evolution", commander: "Otrimi, the Ever-Playful", set: "Commander 2020", fileName: "Enhanced_Evolution.dck", colors: [], year: 2020 },
{ id: "Ruthless_Regiment", name: "Ruthless Regiment", commander: "Jirina Kudro", set: "Commander 2020", fileName: "Ruthless_Regiment.dck", colors: [], year: 2020 },
{ id: "Symbiotic_Swarm", name: "Symbiotic Swarm", commander: "Kathril, Aspect Warper", set: "Commander 2020", fileName: "Symbiotic_Swarm.dck", colors: [], year: 2020 },
{ id: "Timeless_Wisdom", name: "Timeless Wisdom", commander: "Gavi, Nest Warden", set: "Commander 2020", fileName: "Timeless_Wisdom.dck", colors: [], year: 2020 },
{ id: "Lands_Wrath", name: "Land's Wrath", commander: "Obuun, Mul Daya Ancestor", set: "Zendikar Rising Commander", fileName: "Lands_Wrath.dck", colors: [], year: 2020 },
{ id: "Sneak_Attack", name: "Sneak Attack", commander: "Anowon, the Ruin Thief", set: "Zendikar Rising Commander", fileName: "Sneak_Attack.dck", colors: [], year: 2020 },
{ id: "Arm_for_Battle", name: "Arm for Battle", commander: "Wyleth, Soul of Steel", set: "Commander Legends", fileName: "Arm_for_Battle.dck", colors: [], year: 2020 },
{ id: "Reap_the_Tides", name: "Reap the Tides", commander: "Aesi, Tyrant of Gyre Strait", set: "Commander Legends", fileName: "Reap_the_Tides.dck", colors: [], year: 2020 },
{ id: "Elven_Empire", name: "Elven Empire", commander: "Lathril, Blade of the Elves", set: "Kaldheim Commander", fileName: "Elven_Empire.dck", colors: [], year: 2021 },
{ id: "Phantom_Premonition", name: "Phantom Premonition", commander: "Ranar the Ever-Watchful", set: "Kaldheim Commander", fileName: "Phantom_Premonition.dck", colors: [], year: 2021 },
{ id: "Lorehold_Legacies", name: "Lorehold Legacies", commander: "Osgir, the Reconstructor", set: "Commander 2021", fileName: "Lorehold_Legacies.dck", colors: [], year: 2021 },
{ id: "Prismari_Performance", name: "Prismari Performance", commander: "Zaffai, Thunder Conductor", set: "Commander 2021", fileName: "Prismari_Performance.dck", colors: [], year: 2021 },
{ id: "Quantum_Quandrix", name: "Quantum Quandrix", commander: "Adrix and Nev, Twincasters", set: "Commander 2021", fileName: "Quantum_Quandrix.dck", colors: [], year: 2021 },
{ id: "Silverquill_Statement", name: "Silverquill Statement", commander: "Breena, the Demagogue", set: "Commander 2021", fileName: "Silverquill_Statement.dck", colors: [], year: 2021 },
{ id: "Witherbloom_Witchcraft", name: "Witherbloom Witchcraft", commander: "Willowdusk, Essence Seer", set: "Commander 2021", fileName: "Witherbloom_Witchcraft.dck", colors: [], year: 2021 },
{ id: "Aura_of_Courage", name: "Aura of Courage", commander: "Galea, Kindler of Hope", set: "Forgotten Realms Commander", fileName: "Aura_of_Courage.dck", colors: [], year: 2021 },
{ id: "Draconic_Rage", name: "Draconic Rage", commander: "Vrondiss, Rage of Ancients", set: "Forgotten Realms Commander", fileName: "Draconic_Rage.dck", colors: [], year: 2021 },
{ id: "Dungeons_of_Death", name: "Dungeons of Death", commander: "Sefris of the Hidden Ways", set: "Forgotten Realms Commander", fileName: "Dungeons_of_Death.dck", colors: [], year: 2021 },
{ id: "Planar_Portal", name: "Planar Portal", commander: "Prosper, Tome-Bound", set: "Forgotten Realms Commander", fileName: "Planar_Portal.dck", colors: [], year: 2021 },
{ id: "Coven_Counters", name: "Coven Counters", commander: "Leinore, Autumn Sovereign", set: "Midnight Hunt Commander", fileName: "Coven_Counters.dck", colors: [], year: 2021 },
{ id: "Undead_Unleashed", name: "Undead Unleashed", commander: "Wilhelt, the Rotcleaver", set: "Midnight Hunt Commander", fileName: "Undead_Unleashed.dck", colors: [], year: 2021 },
{ id: "Spirit_Squadron", name: "Spirit Squadron", commander: "Millicent, Restless Revenant", set: "Crimson Vow Commander", fileName: "Spirit_Squadron.dck", colors: [], year: 2021 },
{ id: "Vampiric_Bloodline", name: "Vampiric Bloodline", commander: "Strefan, Maurer Progenitor", set: "Crimson Vow Commander", fileName: "Vampiric_Bloodline.dck", colors: [], year: 2021 },
{ id: "Buckle_Up", name: "Buckle Up", commander: "Kotori, Pilot Prodigy", set: "Neon Dynasty Commander", fileName: "Buckle_Up.dck", colors: [], year: 2022 },
{ id: "Upgrades_Unleashed", name: "Upgrades Unleashed", commander: "Chishiro, the Shattered Blade", set: "Neon Dynasty Commander", fileName: "Upgrades_Unleashed.dck", colors: [], year: 2022 },
{ id: "Heads_I_Win,_Tails_You_Lose", name: "Heads I Win, Tails You Lose", commander: "Zndrsplt, Eye of Wisdom", set: "Secret Lair Drop", fileName: "Heads_I_Win,_Tails_You_Lose.dck", colors: [], year: 2022 },
{ id: "Bedecked_Brokers", name: "Bedecked Brokers", commander: "Perrie, the Pulverizer", set: "New Capenna Commander", fileName: "Bedecked_Brokers.dck", colors: [], year: 2022 },
{ id: "Cabaretti_Cacophony", name: "Cabaretti Cacophony", commander: "Kitt Kanto, Mayhem Diva", set: "New Capenna Commander", fileName: "Cabaretti_Cacophony.dck", colors: [], year: 2022 },
{ id: "Maestros_Massacre", name: "Maestros Massacre", commander: "Anhelo, the Painter", set: "New Capenna Commander", fileName: "Maestros_Massacre.dck", colors: [], year: 2022 },
{ id: "Obscura_Operation", name: "Obscura Operation", commander: "Kamiz, Obscura Oculus", set: "New Capenna Commander", fileName: "Obscura_Operation.dck", colors: [], year: 2022 },
{ id: "Riveteers_Rampage", name: "Riveteers Rampage", commander: "Henzie \"Toolbox\" Torre", set: "New Capenna Commander", fileName: "Riveteers_Rampage.dck", colors: [], year: 2022 },
{ id: "Draconic_Dissent", name: "Draconic Dissent", commander: "Firkraag, Cunning Instigator", set: "Commander Legends: Battle for Baldur's Gate", fileName: "Draconic_Dissent.dck", colors: [], year: 2022 },
{ id: "Exit_from_Exile", name: "Exit from Exile", commander: "Faldorn, Dread Wolf Herald", set: "Commander Legends: Battle for Baldur's Gate", fileName: "Exit_from_Exile.dck", colors: [], year: 2022 },
{ id: "Mind_Flayarrrs", name: "Mind Flayarrrs", commander: "Captain N'ghathrod", set: "Commander Legends: Battle for Baldur's Gate", fileName: "Mind_Flayarrrs.dck", colors: [], year: 2022 },
{ id: "Party_Time", name: "Party Time", commander: "Nalia de'Arnise", set: "Commander Legends: Battle for Baldur's Gate", fileName: "Party_Time.dck", colors: [], year: 2022 },
{ id: "Legends_Legacy", name: "Legends' Legacy", commander: "Dihada, Binder of Wills", set: "Dominaria United Commander", fileName: "Legends_Legacy.dck", colors: [], year: 2022 },
{ id: "Painbow", name: "Painbow", commander: "Jared Carthalion", set: "Dominaria United Commander", fileName: "Painbow.dck", colors: [], year: 2022 },
{ id: "Forces_of_the_Imperium", name: "Forces of the Imperium", commander: "Inquisitor Greyfax", set: "Warhammer 40,000 Commander", fileName: "Forces_of_the_Imperium.dck", colors: [], year: 2022 },
{ id: "Forces_of_the_Imperium_Collectors_Edition", name: "Forces of the Imperium Collector's Edition", commander: "Inquisitor Greyfax", set: "Warhammer 40,000 Commander", fileName: "Forces_of_the_Imperium_Collectors_Edition.dck", colors: [], year: 2022 },
{ id: "Necron_Dynasties", name: "Necron Dynasties", commander: "Szarekh, the Silent King", set: "Warhammer 40,000 Commander", fileName: "Necron_Dynasties.dck", colors: [], year: 2022 },
{ id: "Necron_Dynasties_Collectors_Edition", name: "Necron Dynasties Collector's Edition", commander: "Szarekh, the Silent King", set: "Warhammer 40,000 Commander", fileName: "Necron_Dynasties_Collectors_Edition.dck", colors: [], year: 2022 },
{ id: "The_Ruinous_Powers", name: "The Ruinous Powers", commander: "Abaddon the Despoiler", set: "Warhammer 40,000 Commander", fileName: "The_Ruinous_Powers.dck", colors: [], year: 2022 },
{ id: "The_Ruinous_Powers_Collectors_Edition", name: "The Ruinous Powers Collector's Edition", commander: "Abaddon the Despoiler", set: "Warhammer 40,000 Commander", fileName: "The_Ruinous_Powers_Collectors_Edition.dck", colors: [], year: 2022 },
{ id: "Tyranid_Swarm", name: "Tyranid Swarm", commander: "The Swarmlord", set: "Warhammer 40,000 Commander", fileName: "Tyranid_Swarm.dck", colors: [], year: 2022 },
{ id: "Tyranid_Swarm_Collectors_Edition", name: "Tyranid Swarm Collector's Edition", commander: "The Swarmlord", set: "Warhammer 40,000 Commander", fileName: "Tyranid_Swarm_Collectors_Edition.dck", colors: [], year: 2022 },
{ id: "Mishras_Burnished_Banner", name: "Mishra's Burnished Banner", commander: "Mishra, Eminent One", set: "The Brothers' War Commander", fileName: "Mishras_Burnished_Banner.dck", colors: [], year: 2022 },
{ id: "Urzas_Iron_Alliance", name: "Urza's Iron Alliance", commander: "Urza, Chief Artificer", set: "The Brothers' War Commander", fileName: "Urzas_Iron_Alliance.dck", colors: [], year: 2022 },
{ id: "Chaos_Incarnate", name: "Chaos Incarnate", commander: "Kardur, Doomscourge", set: "Starter Commander Decks", fileName: "Chaos_Incarnate.dck", colors: [], year: 2022 },
{ id: "Draconic_Destruction", name: "Draconic Destruction", commander: "Atarka, World Render", set: "Starter Commander Decks", fileName: "Draconic_Destruction.dck", colors: [], year: 2022 },
{ id: "First_Flight", name: "First Flight", commander: "Isperia, Supreme Judge", set: "Starter Commander Decks", fileName: "First_Flight.dck", colors: [], year: 2022 },
{ id: "Grave_Danger", name: "Grave Danger", commander: "Gisa and Geralf", set: "Starter Commander Decks", fileName: "Grave_Danger.dck", colors: [], year: 2022 },
{ id: "Token_Triumph", name: "Token Triumph", commander: "Emmara, Soul of the Accord", set: "Starter Commander Decks", fileName: "Token_Triumph.dck", colors: [], year: 2022 },
{ id: "Corrupting_Influence", name: "Corrupting Influence", commander: "Ixhel, Scion of Atraxa", set: "Phyrexia: All Will Be One Commander", fileName: "Corrupting_Influence.dck", colors: [], year: 2023 },
{ id: "Rebellion_Rising", name: "Rebellion Rising", commander: "Neyali, Suns' Vanguard", set: "Phyrexia: All Will Be One Commander", fileName: "Rebellion_Rising.dck", colors: [], year: 2023 },
{ id: "From_Cute_to_Brute", name: "From Cute to Brute", commander: "Esika, God of the Tree", set: "Secret Lair Drop", fileName: "From_Cute_to_Brute.dck", colors: [], year: 2023 },
{ id: "Elven_Council", name: "Elven Council", commander: "Galadriel, Elven-Queen", set: "Tales of Middle-earth Commander", fileName: "Elven_Council.dck", colors: [], year: 2023 },
{ id: "Food_and_Fellowship", name: "Food and Fellowship", commander: "Frodo, Adventurous Hobbit", set: "Tales of Middle-earth Commander", fileName: "Food_and_Fellowship.dck", colors: [], year: 2023 },
{ id: "Riders_of_Rohan", name: "Riders of Rohan", commander: "Éowyn, Shieldmaiden", set: "Tales of Middle-earth Commander", fileName: "Riders_of_Rohan.dck", colors: [], year: 2023 },
{ id: "The_Hosts_of_Mordor", name: "The Hosts of Mordor", commander: "Sauron, Lord of the Rings", set: "Tales of Middle-earth Commander", fileName: "The_Hosts_of_Mordor.dck", colors: [], year: 2023 },
{ id: "Eldrazi_Unbound", name: "Eldrazi Unbound", commander: "Zhulodok, Void Gorger", set: "Commander Masters", fileName: "Eldrazi_Unbound.dck", colors: [], year: 2023 },
{ id: "Enduring_Enchantments", name: "Enduring Enchantments", commander: "Anikthea, Hand of Erebos", set: "Commander Masters", fileName: "Enduring_Enchantments.dck", colors: [], year: 2023 },
{ id: "Planeswalker_Party", name: "Planeswalker Party", commander: "Commodore Guff", set: "Commander Masters", fileName: "Planeswalker_Party.dck", colors: [], year: 2023 },
{ id: "Sliver_Swarm", name: "Sliver Swarm", commander: "Sliver Gravemother", set: "Commander Masters", fileName: "Sliver_Swarm.dck", colors: [], year: 2023 },
{ id: "Angels_Theyre_Just_Like_Us_but_Cooler_and_with_Wings", name: "Angels: They're Just Like Us but Cooler and with Wings", commander: "Gisela, the Broken Blade", set: "Secret Lair Drop", fileName: "Angels_Theyre_Just_Like_Us_but_Cooler_and_with_Wings.dck", colors: [], year: 2023 },
{ id: "Fae_Dominion", name: "Fae Dominion", commander: "Tegwyll, Duke of Splendor", set: "Wilds of Eldraine Commander", fileName: "Fae_Dominion.dck", colors: [], year: 2023 },
{ id: "Virtue_and_Valor", name: "Virtue and Valor", commander: "Ellivere of the Wild Court", set: "Wilds of Eldraine Commander", fileName: "Virtue_and_Valor.dck", colors: [], year: 2023 },
{ id: "Ahoy_Mateys", name: "Ahoy Mateys", commander: "Admiral Brass, Unsinkable", set: "The Lost Caverns of Ixalan Commander", fileName: "Ahoy_Mateys.dck", colors: [], year: 2023 },
{ id: "Blood_Rites", name: "Blood Rites", commander: "Clavileño, First of the Blessed", set: "The Lost Caverns of Ixalan Commander", fileName: "Blood_Rites.dck", colors: [], year: 2023 },
{ id: "Explorers_of_the_Deep", name: "Explorers of the Deep", commander: "Hakbal of the Surging Soul", set: "The Lost Caverns of Ixalan Commander", fileName: "Explorers_of_the_Deep.dck", colors: [], year: 2023 },
{ id: "Veloci-Ramp-Tor", name: "Veloci-Ramp-Tor", commander: "Pantlaza, Sun-Favored", set: "The Lost Caverns of Ixalan Commander", fileName: "Veloci-Ramp-Tor.dck", colors: [], year: 2023 },
{ id: "Raining_Cats_and_Dogs", name: "Raining Cats and Dogs", commander: "Rin and Seri, Inseparable", set: "Secret Lair Drop", fileName: "Raining_Cats_and_Dogs.dck", colors: [], year: 2024 },
{ id: "Blame_Game", name: "Blame Game", commander: "Nelly Borca, Impulsive Accuser", set: "Murders at Karlov Manor Commander", fileName: "Blame_Game.dck", colors: [], year: 2024 },
{ id: "Deadly_Disguise", name: "Deadly Disguise", commander: "Kaust, Eyes of the Glade", set: "Murders at Karlov Manor Commander", fileName: "Deadly_Disguise.dck", colors: [], year: 2024 },
{ id: "Deep_Clue_Sea", name: "Deep Clue Sea", commander: "Morska, Undersea Sleuth", set: "Murders at Karlov Manor Commander", fileName: "Deep_Clue_Sea.dck", colors: [], year: 2024 },
{ id: "Revenant_Recon", name: "Revenant Recon", commander: "Mirko, Obsessive Theorist", set: "Murders at Karlov Manor Commander", fileName: "Revenant_Recon.dck", colors: [], year: 2024 },
{ id: "Hail,_Caesar", name: "Hail, Caesar", commander: "Caesar, Legion's Emperor", set: "Fallout", fileName: "Hail,_Caesar.dck", colors: [], year: 2024 },
{ id: "Mutant_Menace", name: "Mutant Menace", commander: "The Wise Mothman", set: "Fallout", fileName: "Mutant_Menace.dck", colors: [], year: 2024 },
{ id: "Science", name: "Science!", commander: "Dr. Madison Li", set: "Fallout", fileName: "Science.dck", colors: [], year: 2024 },
{ id: "Scrappy_Survivors", name: "Scrappy Survivors", commander: "Dogmeat, Ever Loyal", set: "Fallout", fileName: "Scrappy_Survivors.dck", colors: [], year: 2024 },
{ id: "Desert_Bloom", name: "Desert Bloom", commander: "Yuma, Proud Protector", set: "Outlaws of Thunder Junction Commander", fileName: "Desert_Bloom.dck", colors: [], year: 2024 },
{ id: "Grand_Larceny", name: "Grand Larceny", commander: "Gonti, Canny Acquisitor", set: "Outlaws of Thunder Junction Commander", fileName: "Grand_Larceny.dck", colors: [], year: 2024 },
{ id: "Most_Wanted", name: "Most Wanted", commander: "Olivia, Opulent Outlaw", set: "Outlaws of Thunder Junction Commander", fileName: "Most_Wanted.dck", colors: [], year: 2024 },
{ id: "Quick_Draw", name: "Quick Draw", commander: "Stella Lee, Wild Card", set: "Outlaws of Thunder Junction Commander", fileName: "Quick_Draw.dck", colors: [], year: 2024 },
{ id: "Creative_Energy", name: "Creative Energy", commander: "Satya, Aetherflux Genius", set: "Modern Horizons 3 Commander", fileName: "Creative_Energy.dck", colors: [], year: 2024 },
{ id: "Creative_Energy_Collectors_Edition", name: "Creative Energy Collector's Edition", commander: "Satya, Aetherflux Genius", set: "Modern Horizons 3 Commander", fileName: "Creative_Energy_Collectors_Edition.dck", colors: [], year: 2024 },
{ id: "Eldrazi_Incursion", name: "Eldrazi Incursion", commander: "Ulalek, Fused Atrocity", set: "Modern Horizons 3 Commander", fileName: "Eldrazi_Incursion.dck", colors: [], year: 2024 },
{ id: "Eldrazi_Incursion_Collectors_Edition", name: "Eldrazi Incursion Collector's Edition", commander: "Ulalek, Fused Atrocity", set: "Modern Horizons 3 Commander", fileName: "Eldrazi_Incursion_Collectors_Edition.dck", colors: [], year: 2024 },
{ id: "Graveyard_Overdrive", name: "Graveyard Overdrive", commander: "Disa the Restless", set: "Modern Horizons 3 Commander", fileName: "Graveyard_Overdrive.dck", colors: [], year: 2024 },
{ id: "Graveyard_Overdrive_Collectors_Edition", name: "Graveyard Overdrive Collector's Edition", commander: "Disa the Restless", set: "Modern Horizons 3 Commander", fileName: "Graveyard_Overdrive_Collectors_Edition.dck", colors: [], year: 2024 },
{ id: "Tricky_Terrain", name: "Tricky Terrain", commander: "Omo, Queen of Vesuva", set: "Modern Horizons 3 Commander", fileName: "Tricky_Terrain.dck", colors: [], year: 2024 },
{ id: "Tricky_Terrain_Collectors_Edition", name: "Tricky Terrain Collector's Edition", commander: "Omo, Queen of Vesuva", set: "Modern Horizons 3 Commander", fileName: "Tricky_Terrain_Collectors_Edition.dck", colors: [], year: 2024 },
{ id: "Animated_Army", name: "Animated Army", commander: "Bello, Bard of the Brambles", set: "Bloomburrow Commander", fileName: "Animated_Army.dck", colors: [], year: 2024 },
{ id: "Family_Matters", name: "Family Matters", commander: "Zinnia, Valley's Voice", set: "Bloomburrow Commander", fileName: "Family_Matters.dck", colors: [], year: 2024 },
{ id: "Peace_Offering", name: "Peace Offering", commander: "Ms. Bumbleflower", set: "Bloomburrow Commander", fileName: "Peace_Offering.dck", colors: [], year: 2024 },
{ id: "Squirreled_Away", name: "Squirreled Away", commander: "Hazel of the Rootbloom", set: "Bloomburrow Commander", fileName: "Squirreled_Away.dck", colors: [], year: 2024 },
{ id: "20_Ways_to_Win", name: "20 Ways to Win", commander: "Go-Shintai of Life's Origin", set: "Secret Lair Drop", fileName: "20_Ways_to_Win.dck", colors: [], year: 2024 },
{ id: "Eternal_Might", name: "Eternal Might", commander: "Temmet, Naktamun's Will", set: "Aetherdrift Commander", fileName: "Eternal_Might.dck", colors: [], year: 2025 },
{ id: "Living_Energy", name: "Living Energy", commander: "Saheeli, Radiant Creator", set: "Aetherdrift Commander", fileName: "Living_Energy.dck", colors: [], year: 2025 },
{ id: "Abzan_Armor", name: "Abzan Armor", commander: "Felothar the Steadfast", set: "Tarkir: Dragonstorm Commander", fileName: "Abzan_Armor.dck", colors: [], year: 2025 },
{ id: "Jeskai_Striker", name: "Jeskai Striker", commander: "Shiko and Narset, Unified", set: "Tarkir: Dragonstorm Commander", fileName: "Jeskai_Striker.dck", colors: [], year: 2025 },
{ id: "Mardu_Surge", name: "Mardu Surge", commander: "Zurgo Stormrender", set: "Tarkir: Dragonstorm Commander", fileName: "Mardu_Surge.dck", colors: [], year: 2025 },
{ id: "Sultai_Arisen", name: "Sultai Arisen", commander: "Teval, the Balanced Scale", set: "Tarkir: Dragonstorm Commander", fileName: "Sultai_Arisen.dck", colors: [], year: 2025 },
{ id: "Temur_Roar", name: "Temur Roar", commander: "Eshki, Temur's Roar", set: "Tarkir: Dragonstorm Commander", fileName: "Temur_Roar.dck", colors: [], year: 2025 },
{ id: "Everyones_Invited", name: "Everyone's Invited!", commander: "Morophon, the Boundless", set: "Secret Lair Drop", fileName: "Everyones_Invited.dck", colors: [], year: 2025 },
{ id: "Counter_Blitz_(FINAL_FANTASY_X)", name: "Counter Blitz (FINAL FANTASY X)", commander: "Tidus, Yuna's Guardian", set: "Final Fantasy Commander", fileName: "Counter_Blitz_(FINAL_FANTASY_X).dck", colors: [], year: 2025 },
{ id: "Counter_Blitz_Collectors_Edition_(FINAL_FANTASY_X)", name: "Counter Blitz Collector's Edition (FINAL FANTASY X)", commander: "Tidus, Yuna's Guardian", set: "Final Fantasy Commander", fileName: "Counter_Blitz_Collectors_Edition_(FINAL_FANTASY_X).dck", colors: [], year: 2025 },
{ id: "Limit_Break_(FINAL_FANTASY_VII)", name: "Limit Break (FINAL FANTASY VII)", commander: "Cloud, Ex-SOLDIER", set: "Final Fantasy Commander", fileName: "Limit_Break_(FINAL_FANTASY_VII).dck", colors: [], year: 2025 },
{ id: "Limit_Break_Collectors_Edition_(FINAL_FANTASY_VII)", name: "Limit Break Collector's Edition (FINAL FANTASY VII)", commander: "Cloud, Ex-SOLDIER", set: "Final Fantasy Commander", fileName: "Limit_Break_Collectors_Edition_(FINAL_FANTASY_VII).dck", colors: [], year: 2025 },
{ id: "Revival_Trance_(FINAL_FANTASY_VI)", name: "Revival Trance (FINAL FANTASY VI)", commander: "Terra, Herald of Hope", set: "Final Fantasy Commander", fileName: "Revival_Trance_(FINAL_FANTASY_VI).dck", colors: [], year: 2025 },
{ id: "Revival_Trance_Collectors_Edition_(FINAL_FANTASY_VI)", name: "Revival Trance Collector's Edition (FINAL FANTASY VI)", commander: "Terra, Herald of Hope", set: "Final Fantasy Commander", fileName: "Revival_Trance_Collectors_Edition_(FINAL_FANTASY_VI).dck", colors: [], year: 2025 },
{ id: "Scions_&_Spellcraft_(FINAL_FANTASY_XIV)", name: "Scions & Spellcraft (FINAL FANTASY XIV)", commander: "Y'shtola, Night's Blessed", set: "Final Fantasy Commander", fileName: "Scions_&_Spellcraft_(FINAL_FANTASY_XIV).dck", colors: [], year: 2025 },
{ id: "Scions_&_Spellcraft_Collectors_Edition_(FINAL_FANTASY_XIV)", name: "Scions & Spellcraft Collector's Edition (FINAL FANTASY XIV)", commander: "Y'shtola, Night's Blessed", set: "Final Fantasy Commander", fileName: "Scions_&_Spellcraft_Collectors_Edition_(FINAL_FANTASY_XIV).dck", colors: [], year: 2025 },
{ id: "Counter_Intelligence", name: "Counter Intelligence", commander: "Inspirit, Flagship Vessel", set: "Edge of Eternities Commander", fileName: "Counter_Intelligence.dck", colors: [], year: 2025 },
{ id: "World_Shaper", name: "World Shaper", commander: "Hearthhull, the Worldseed", set: "Edge of Eternities Commander", fileName: "World_Shaper.dck", colors: [], year: 2025 },
{ id: "Blight_Curse", name: "Blight Curse", commander: "Auntie Ool, Cursewretch", set: "Lorwyn Eclipsed Commander", fileName: "Blight_Curse.dck", colors: [], year: 2026 },
{ id: "Dance_of_the_Elements", name: "Dance of the Elements", commander: "Ashling, the Limitless", set: "Lorwyn Eclipsed Commander", fileName: "Dance_of_the_Elements.dck", colors: [], year: 2026 },
{ id: "Turtle_Power", name: "Turtle Power!", commander: "Heroes in a Half Shell", set: "Teenage Mutant Ninja Turtles Eternal", fileName: "Turtle_Power.dck", colors: [], year: 2026 }
];
+7 -16
View File
@@ -341,22 +341,18 @@ input { font-family: inherit; }
border: 1px solid var(--color-border-strong);
border-radius: var(--radius-xl);
padding: 2.5rem;
width: min(860px, 95vw);
max-height: 92vh;
overflow-y: auto;
width: min(640px, 95vw);
box-shadow: var(--shadow-lg);
position: relative;
overflow: hidden;
}
.setup-card::before {
content: '';
position: sticky;
position: absolute;
top: 0; left: 0; right: 0;
display: block;
height: 3px;
margin: -2.5rem -2.5rem 0 -2.5rem;
background: linear-gradient(90deg, var(--p1), var(--p2), var(--p3), var(--p4));
z-index: 1;
}
.setup-title {
@@ -2975,15 +2971,10 @@ kbd {
DECK SELECTOR — 3-Category Tabs
============================================================ */
.deck-assignment-grid {
display: grid;
grid-template-columns: 1fr 1fr;
display: flex;
flex-direction: column;
gap: 8px;
}
@media (max-width: 640px) {
.deck-assignment-grid {
grid-template-columns: 1fr;
}
}
.deck-select-panel {
background: rgba(255,255,255,0.03);
@@ -3058,7 +3049,7 @@ kbd {
}
.deck-tab-content {
max-height: 170px;
max-height: 200px;
overflow-y: auto;
}
@@ -3083,7 +3074,7 @@ kbd {
}
.deck-precon-list {
max-height: 140px;
max-height: 180px;
overflow-y: auto;
}
+5 -20
View File
@@ -8,21 +8,6 @@ from datetime import datetime
from pathlib import Path
from typing import Optional
# ── .env bootstrap ────────────────────────────────────────────
# Load .env automatically so plain `python script.py` and bare uvicorn
# both pick up FORGE_DIR, PRECON_DIR, etc. without a manual load_dotenv
# call at every entry point. override=False means real env vars always win.
try:
from dotenv import load_dotenv as _load_dotenv
_here = Path(__file__).resolve().parent
for _candidate in [_here, _here.parent, _here.parent.parent]:
_env_file = _candidate / ".env"
if _env_file.is_file():
_load_dotenv(dotenv_path=_env_file, override=False)
break
except ImportError:
pass # python-dotenv not installed; rely on real environment variables
# ─────────────────────────────────────────────────────────────
log = logging.getLogger("commander_ai_lab.api")
@@ -146,9 +131,9 @@ def load_commander_meta() -> None:
# AI Profiles
# ══════════════════════════════════════════════════════════════
AI_PROFILES = {
"default": {"name": "default", "description": "Balanced — Forge's default AI behavior", "aggression": 0.5, "cardAdvantage": 0.5, "removalPriority": 0.5, "boardPresence": 0.5, "comboPriority": 0.3, "patience": 0.5},
"aggro": {"name": "aggro", "description": "Aggressive — attacks early, prioritizes damage", "aggression": 0.9, "cardAdvantage": 0.3, "removalPriority": 0.3, "boardPresence": 0.8, "comboPriority": 0.1, "patience": 0.1},
"control": {"name": "control", "description": "Control — defensive, removal-heavy, card advantage", "aggression": 0.2, "cardAdvantage": 0.9, "removalPriority": 0.9, "boardPresence": 0.3, "comboPriority": 0.4, "patience": 0.9},
"combo": {"name": "combo", "description": "Combo — ramps, digs for pieces, assembles combos", "aggression": 0.2, "cardAdvantage": 0.8, "removalPriority": 0.4, "boardPresence": 0.3, "comboPriority": 0.95, "patience": 0.7},
"midrange": {"name": "midrange", "description": "Midrange — flexible, strong board presence, value-oriented", "aggression": 0.5, "cardAdvantage": 0.6, "removalPriority": 0.6, "boardPresence": 0.7, "comboPriority": 0.3, "patience": 0.5},
"default": {"name": "default", "description": "Balanced \u2014 Forge's default AI behavior", "aggression": 0.5, "cardAdvantage": 0.5, "removalPriority": 0.5, "boardPresence": 0.5, "comboPriority": 0.3, "patience": 0.5},
"aggro": {"name": "aggro", "description": "Aggressive \u2014 attacks early, prioritizes damage", "aggression": 0.9, "cardAdvantage": 0.3, "removalPriority": 0.3, "boardPresence": 0.8, "comboPriority": 0.1, "patience": 0.1},
"control": {"name": "control", "description": "Control \u2014 defensive, removal-heavy, card advantage", "aggression": 0.2, "cardAdvantage": 0.9, "removalPriority": 0.9, "boardPresence": 0.3, "comboPriority": 0.4, "patience": 0.9},
"combo": {"name": "combo", "description": "Combo \u2014 ramps, digs for pieces, assembles combos", "aggression": 0.2, "cardAdvantage": 0.8, "removalPriority": 0.4, "boardPresence": 0.3, "comboPriority": 0.95, "patience": 0.7},
"midrange": {"name": "midrange", "description": "Midrange \u2014 flexible, strong board presence, value-oriented", "aggression": 0.5, "cardAdvantage": 0.6, "removalPriority": 0.6, "boardPresence": 0.7, "comboPriority": 0.3, "patience": 0.5},
}