First commit of major reorganization effort.  Frontend doesn't compile yet.
Second part of reorg.  Compiles and works for everything tried.  Also improved display a bit.
Committing large reorganization of backend code.  Much cleaner now.
Added stat requirements to popup.
Better enchantment display.
Added roundAt function back in.  It's useful.  Correct some display quirks.
Added speed and description, among other things.
Corrected stats.  The value in the item file needed to be multiplied by a value looked up in the appropriate graph.
Displayed damage types approximately correct.  I don't know how to get them to match exactly.  I think it is related to order of mod application with some selective truncation.
Added level requirement.
Basic color coding of title based on item quality.
Fixed bug where swapping items caused 2 popups to show.
Added required class.
Added empty sockets in popup.
Fixes to description text and deciding which mods are enchants.
Modified gem display to use descriptors.  Gem effect selection logic not right yet.
Did a lot of complicated work on determining which mod in a socketed item is for armor and which is for weapon.  Might be unnecessary since I think I found a simpler way.
Not as easy as I wanted, but all effects for gems (alone and inserted) are correct for my tests.  Haven't tested standalone iron, blood, void, chaos, etc embers.
Some CSS improvements for the item popup.
Added full and empty socket overlays on item icons.