In Animal Crossing New Horizons, the various color variations of all the outfits are stored as separate items, each part of a clothing group that in turn holds the number for that item's base name and some information about fashion themes. All the important stuff is in the item itself. And therefore, each variation of a given outfit item has a separate entry in ItemParams.bcsv.
In the datamined JSON files for Project Special K, there's only one file describing all variations right now:
I left out some details but the important part is the "variants" array.
In the villager data, this would be referenced to by ID:
Right now, loading the villager data can resolve these references so the Villager object for Lolly has a member that's a Tops pointer to the Snowy Sweater. But to do that, the "gray" modifier had to be thrown out on load.
I wonder how to handle having an item like that retain things like outfit variant, or furniture item variants and patterns.
What if I turned it from a plain Tops into an InventoryItem? That in turn could hold the Item (which Tops inherits from so that's valid) and the variation data. Then that InventoryItem could reflect some pertinent stuff about the Item it boxes, and have AsInsertItemTypeHere methods like SimpleJSON's JSONValue does, to return the boxed Item as the type it actually is.
... delightfully devilish, Seymour.