diff --git a/app.js b/app.js index 826f2c1..dc622c8 100644 --- a/app.js +++ b/app.js @@ -402,7 +402,7 @@ function toggleSection(contentId, iconId) { const icon = document.getElementById(iconId); if (content.style.display === 'none') { - content.style.display = 'block'; + content.style.display = ''; icon.textContent = '▼'; } else { content.style.display = 'none'; @@ -464,6 +464,8 @@ function renderMarket(marketData, reputationData) { const filteredItems = applyMarketFilters(availableItems); if (filteredItems.length === 0) { + + const emptyColspan = 5; marketContainer.innerHTML = `
@@ -473,7 +475,7 @@ function renderMarket(marketData, reputationData) { - +
No items match the current filters.No items match the current filters.
@@ -511,10 +513,10 @@ function renderMarket(marketData, reputationData) { : isAdminPage ? `${item.adjustedPrice} gp (${item.baseCost} gp)` : `${item.adjustedPrice} gp`; - const nameDisplay = item.dndbeyondUrl ? `${item.name}` : item.name; + html += ` ${nameDisplay} @@ -992,4 +994,3 @@ function updatePublicUI() { document.addEventListener('DOMContentLoaded', () => { setupRealtimeListeners(); }); - diff --git a/filtering.js b/filtering.js index 86f8de7..42f6156 100644 --- a/filtering.js +++ b/filtering.js @@ -12,19 +12,19 @@ let marketFilterOpenKey = null; let marketFilterSearch = { faction: '', rarity: '', - stock: '' + stock: '', }; let marketTableScrollLeft = null; let marketFilterAllValues = { faction: [], rarity: [], - stock: [] + stock: [], }; let marketFiltersInitialized = false; - +let marketFilterDebounce = null; function renderMarketFilters(values) { // Build the filter row markup for the market table. - const { factions, rarities, stocks } = values; + const { factions, rarities, stocks, } = values; return ` @@ -84,7 +84,7 @@ function getMarketFilterValues(items) { marketFilterAllValues = { faction: factions, rarity: rarities, - stock: stocks + stock: stocks, }; if (!marketFiltersInitialized) { marketFilters.faction = [...factions]; @@ -220,9 +220,7 @@ function updateMarketFilter(key, value) { // Preserve focus while re-rendering. captureMarketFilterFocus(); marketFilters[key] = value; - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } function toggleMarketFilterValue(key, value, isChecked) { @@ -235,9 +233,7 @@ function toggleMarketFilterValue(key, value, isChecked) { } else if (!isChecked && index >= 0) { values.splice(index, 1); } - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } function clearMarketFilter(key) { @@ -255,9 +251,7 @@ function clearMarketFilter(key) { selectionEnd: 0 }; } - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } function selectAllMarketFilter(key) { @@ -265,17 +259,13 @@ function selectAllMarketFilter(key) { const values = marketFilters[key]; if (!Array.isArray(values)) return; marketFilters[key] = [...(marketFilterAllValues[key] || [])]; - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } function toggleMarketFilterDropdown(key) { // Open/close the filter popover for the given column. marketFilterOpenKey = marketFilterOpenKey === key ? null : key; - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); if (marketFilterOpenKey) { requestAnimationFrame(() => positionMarketFilterPopover(marketFilterOpenKey)); } @@ -285,18 +275,15 @@ function updateMarketFilterSearch(key, value) { // Update popover search text and refresh the list. captureMarketFilterFocus(); marketFilterSearch[key] = value; - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } function closeMarketFilterDropdown() { // Close any open popover when clicking outside. if (marketFilterOpenKey !== null) { + captureMarketFilterFocus(); marketFilterOpenKey = null; - if (marketData && campaignData) { - renderMarket(marketData, campaignData.reputation); - } + scheduleMarketFilterRender(); } } @@ -380,3 +367,11 @@ function restoreMarketTableScroll() { marketTableScrollLeft = null; } +function scheduleMarketFilterRender() { + clearTimeout(marketFilterDebounce); + marketFilterDebounce = setTimeout(() => { + if (marketData && campaignData) { + renderMarket(marketData, campaignData.reputation); + } + }, 250); +} diff --git a/index.html b/index.html index ce380e6..1c2e9cb 100644 --- a/index.html +++ b/index.html @@ -82,4 +82,3 @@ - diff --git a/magic-items-data.js b/magic-items-data.js index 8aed524..bb7d836 100644 --- a/magic-items-data.js +++ b/magic-items-data.js @@ -12,7 +12,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_009", name: "Amulet of Proof against Detection and Location", rarity: "Uncommon", faction: "Kundarak", baseCost: 400, dndbeyondPage: "4569-amulet-of-proof-against-detection-and-location" }, { id: "item_010", name: "Amulet of the Planes", rarity: "Very Rare", faction: "Morgrave", baseCost: 43000, dndbeyondPage: "9228345-amulet-of-the-planes" }, { id: "item_011", name: "Animated Shield", rarity: "Very Rare", faction: "Deneith", baseCost: 6000, dndbeyondPage: "4571-animated-shield" }, - { id: "item_012", name: "Arcane Propulsion Arm", rarity: "Very Rare", faction: "Deneith", baseCost: 5100, dndbeyondPage: "976932-arcane-propulsion-arm" }, + { id: "item_012", name: "Arcane Propulsion Arm", rarity: "Very Rare", faction: "Deneith", baseCost: 5100, dndbeyondPage: "976932-arcane-propulsion-arm" }, { id: "item_013", name: "Armor of Resistance", rarity: "Rare", faction: "Kundarak", baseCost: 3000, dndbeyondPage: "5371-armor-of-resistance" }, { id: "item_014", name: "Armor of Safeguarding", rarity: "Very Rare", faction: "Deneith", baseCost: 10000, dndbeyondPage: "7102410-armor-of-safeguarding" }, { id: "item_015", name: "Armor of the White Rose", rarity: "Very Rare", faction: "Ashbound", baseCost: 7000, dndbeyondPage: "8806813-armor-of-the-white-rose" }, @@ -46,7 +46,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_043", name: "Cap of Water Breathing", rarity: "Uncommon", faction: "Ashbound", baseCost: 450, dndbeyondPage: "9228375-cap-of-water-breathing" }, { id: "item_044", name: "Cape of the Mountebank", rarity: "Rare", faction: "Thuranni", baseCost: 3900, dndbeyondPage: "9228376-cape-of-the-mountebank" }, { id: "item_045", name: "Carpet of Flying", rarity: "Very Rare", faction: "Morgrave", baseCost: 44000, dndbeyondPage: "9228381-carpet-of-flying" }, - { id: "item_046", name: "Cauldron of Rebirth", rarity: "Very Rare", faction: "Ashbound", baseCost: 10000, dndbeyondPage: "9228395-cauldron-of-rebirth" }, + { id: "item_046", name: "Cauldron of Rebirth", rarity: "Very Rare", faction: "Ashbound", baseCost: 10000, dndbeyondPage: "9228395-cauldron-of-rebirth" }, { id: "item_047", name: "Censer of Controlling Air Elementals", rarity: "Rare", faction: "Ashbound", baseCost: 4700, dndbeyondPage: "9228396-censer-of-controlling-air-elementals" }, { id: "item_048", name: "Chime of Opening", rarity: "Rare", faction: "Tarkanan", baseCost: 3000, dndbeyondPage: "9228405-chime-of-opening" }, { id: "item_049", name: "Circlet of Blasting", rarity: "Uncommon", faction: "Morgrave", baseCost: 350, dndbeyondPage: "4603-circlet-of-blasting" }, @@ -78,7 +78,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_075", name: "Dust of Dryness", rarity: "Uncommon", faction: "Ashbound", baseCost: 350, dndbeyondPage: "9228523-dust-of-dryness" }, { id: "item_076", name: "Dust of Sneezing and Choking", rarity: "Uncommon", faction: "Thuranni", baseCost: 150, dndbeyondPage: "9228524-dust-of-sneezing-and-choking" }, { id: "item_077", name: "Dwarven Plate", rarity: "Very Rare", faction: "Kundarak", baseCost: 25000, dndbeyondPage: "9228527-dwarven-plate" }, - { id: "item_078", name: "Dwarven Thrower", rarity: "Very Rare", faction: "Kundarak", baseCost: 25000, dndbeyondPage: "4627-dwarven-thrower" }, + { id: "item_078", name: "Dwarven Thrower", rarity: "Very Rare", faction: "Kundarak", baseCost: 25000, dndbeyondPage: "4627-dwarven-thrower" }, { id: "item_079", name: "Dyrrn's Tentacle Whip", rarity: "Very Rare", faction: "Kundarak", baseCost: 17000, dndbeyondPage: "1000370-dyrrns-tentacle-whip" }, { id: "item_080", name: "Earworm", rarity: "Uncommon", faction: "Kundarak", baseCost: 225, dndbeyondPage: "1000466-earworm" }, { id: "item_081", name: "Efreeti Bottle", rarity: "Very Rare", faction: "Morgrave", baseCost: 45000, dndbeyondPage: "9228528-efreeti-bottle" }, @@ -99,7 +99,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_096", name: "Figurine of Wondrous Power (onyx dog)", rarity: "Rare", faction: "Ashbound", baseCost: 3200, dndbeyondPage: "9228621-figurine-of-wondrous-power" }, { id: "item_097", name: "Figurine of Wondrous Power (serpentine owl)", rarity: "Rare", faction: "Ashbound", baseCost: 3000, dndbeyondPage: "9228621-figurine-of-wondrous-power" }, { id: "item_098", name: "Figurine of Wondrous Power (silver raven)", rarity: "Uncommon", faction: "Medani", baseCost: 380, dndbeyondPage: "9228621-figurine-of-wondrous-power" }, - { id: "item_099", name: "Finder's Goggles", rarity: "Uncommon", faction: "Tharashk", baseCost: 500, dndbeyondPage: "977633-finders-goggles" }, + { id: "item_099", name: "Finder's Goggles", rarity: "Uncommon", faction: "Tharashk", baseCost: 500, dndbeyondPage: "977633-finders-goggles" }, { id: "item_100", name: "Flame Tongue", rarity: "Rare", faction: "Deneith", baseCost: 5000, dndbeyondPage: "9228647-flame-tongue" }, { id: "item_101", name: "Folding Boat", rarity: "Rare", faction: "Tharashk", baseCost: 4750, dndbeyondPage: "9228649-folding-boat" }, { id: "item_102", name: "Frost Brand", rarity: "Very Rare", faction: "Deneith", baseCost: 11000, dndbeyondPage: "9228651-frost-brand" }, @@ -169,10 +169,10 @@ const MAGIC_ITEMS_DATA = [ { id: "item_166", name: "Mindguard Crown", rarity: "Very Rare", faction: "Deneith", baseCost: 11000, dndbeyondPage: "7247083-mindguard-crown" }, { id: "item_167", name: "Mirror of Life Trapping", rarity: "Very Rare", faction: "Tharashk", baseCost: 50000, dndbeyondPage: "9228851-mirror-of-life-trapping" }, { id: "item_168", name: "Mithral Armor", rarity: "Uncommon", faction: "Kundarak", baseCost: 450, dndbeyondPage: "5381-mithral-armor" }, - { id: "item_169", name: "Nature's Mantle", rarity: "Uncommon", faction: "Ashbound", baseCost: 325, dndbeyondPage: "2405507-natures-mantle" }, + { id: "item_169", name: "Nature's Mantle", rarity: "Uncommon", faction: "Ashbound", baseCost: 325, dndbeyondPage: "2405507-natures-mantle" }, { id: "item_170", name: "Necklace of Adaptation", rarity: "Uncommon", faction: "Ashbound", baseCost: 450, dndbeyondPage: "4682-necklace-of-adaptation" }, { id: "item_171", name: "Necklace of Fireballs", rarity: "Rare", faction: "Deneith", baseCost: 4350, dndbeyondPage: "9228861-necklace-of-fireballs" }, - { id: "item_172", name: "Necklace of Prayer Beads", rarity: "Rare", faction: "Morgrave", baseCost: 5000, dndbeyondPage: "9228862-necklace-of-prayer-beads" }, + { id: "item_172", name: "Necklace of Prayer Beads", rarity: "Rare", faction: "Morgrave", baseCost: 5000, dndbeyondPage: "9228862-necklace-of-prayer-beads" }, { id: "item_173", name: "Nimbus Coronet", rarity: "Very Rare", faction: "Tharashk", baseCost: 10500, dndbeyondPage: "7102429-nimbus-coronet" }, { id: "item_174", name: "Nine Lives Stealer", rarity: "Very Rare", faction: "Thuranni", baseCost: 36000, dndbeyondPage: "5394-nine-lives-stealer" }, { id: "item_175", name: "Nolzur's Marvelous Pigments", rarity: "Very Rare", faction: "Morgrave", baseCost: 16000, dndbeyondPage: "9228905-nolzurs-marvelous-pigments" }, @@ -181,7 +181,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_178", name: "Oil of Sharpness", rarity: "Very Rare", faction: "Thuranni", baseCost: 2200, dndbeyondPage: "9228908-oil-of-sharpness" }, { id: "item_179", name: "Oil of Slipperiness", rarity: "Uncommon", faction: "Tarkanan", baseCost: 250, dndbeyondPage: "9228909-oil-of-slipperiness" }, { id: "item_180", name: "Pariah's Shield", rarity: "Rare", faction: "Deneith", baseCost: 1500, dndbeyondPage: "316763-pariahs-shield" }, - { id: "item_181", name: "Pearl of Power", rarity: "Uncommon", faction: "Morgrave", baseCost: 400, dndbeyondPage: "9228918-pearl-of-power" }, + { id: "item_181", name: "Pearl of Power", rarity: "Uncommon", faction: "Morgrave", baseCost: 400, dndbeyondPage: "9228918-pearl-of-power" }, { id: "item_182", name: "Periapt of Health", rarity: "Uncommon", faction: "Morgrave", baseCost: 250, dndbeyondPage: "9228920-periapt-of-health" }, { id: "item_183", name: "Periapt of Proof against Poison", rarity: "Rare", faction: "Kundarak", baseCost: 4700, dndbeyondPage: "9276658-periapt-of-proof-against-poison" }, { id: "item_184", name: "Periapt of Wound Closure", rarity: "Uncommon", faction: "Morgrave", baseCost: 375, dndbeyondPage: "9228921-periapt-of-wound-closure" }, @@ -220,7 +220,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_217", name: "Repeating Shot", rarity: "Uncommon", faction: "Tarkanan", baseCost: 550, dndbeyondPage: "10886055-repeating-shot" }, { id: "item_218", name: "Repulsion Shield", rarity: "Uncommon", faction: "Deneith", baseCost: 600, dndbeyondPage: "10886056-repulsion-shield" }, { id: "item_219", name: "Returning Weapon", rarity: "Uncommon", faction: "Medani", baseCost: 550, dndbeyondPage: "10886064-returning-weapon" }, - { id: "item_220", name: "Reveler's Concertina", rarity: "Rare", faction: "Thuranni", baseCost: 4250, dndbeyondPage: "2405691-revelers-concertina" }, + { id: "item_220", name: "Reveler's Concertina", rarity: "Rare", faction: "Thuranni", baseCost: 4250, dndbeyondPage: "2405691-revelers-concertina" }, { id: "item_221", name: "Ring of Animal Influence", rarity: "Rare", faction: "Ashbound", baseCost: 1000, dndbeyondPage: "9228958-ring-of-animal-influence" }, { id: "item_222", name: "Ring of Evasion", rarity: "Rare", faction: "Thuranni", baseCost: 4900, dndbeyondPage: "4720-ring-of-evasion" }, { id: "item_223", name: "Ring of Feather Falling", rarity: "Rare", faction: "Tarkanan", baseCost: 2200, dndbeyondPage: "4721-ring-of-feather-falling" }, @@ -245,7 +245,7 @@ const MAGIC_ITEMS_DATA = [ { id: "item_242", name: "Robe of Useful Items", rarity: "Uncommon", faction: "Morgrave", baseCost: 400, dndbeyondPage: "9228979-robe-of-useful-items" }, { id: "item_243", name: "Rod of Absorption", rarity: "Very Rare", faction: "Morgrave", baseCost: 48000, dndbeyondPage: "4744-rod-of-absorption" }, { id: "item_244", name: "Rod of Alertness", rarity: "Very Rare", faction: "Kundarak", baseCost: 11000, dndbeyondPage: "9228980-rod-of-alertness" }, - { id: "item_245", name: "Rod of Hellish Flames", rarity: "Very Rare", faction: "Ashbound", baseCost: 10250, dndbeyondPage: "7526749-rod-of-hellish-flames" }, + { id: "item_245", name: "Rod of Hellish Flames", rarity: "Very Rare", faction: "Ashbound", baseCost: 10250, dndbeyondPage: "7526749-rod-of-hellish-flames" }, { id: "item_246", name: "Rod of Rulership", rarity: "Rare", faction: "Tarkanan", baseCost: 3600, dndbeyondPage: "9228982-rod-of-rulership" }, { id: "item_247", name: "Rod of Security", rarity: "Very Rare", faction: "Kundarak", baseCost: 45000, dndbeyondPage: "9228983-rod-of-security" }, { id: "item_248", name: "Rod of the Pact Keeper (+1)", rarity: "Uncommon", faction: "Morgrave", baseCost: 400, dndbeyondPage: "9228987-rod-of-the-pact-keeper" }, @@ -276,18 +276,18 @@ const MAGIC_ITEMS_DATA = [ { id: "item_273", name: "Spell Scroll (level 8 spell)", rarity: "Very Rare", faction: "Morgrave", baseCost: 5000, dndbeyondPage: "9229085-spell-scroll" }, { id: "item_274", name: "Spellguard Shield", rarity: "Very Rare", faction: "Kundarak", baseCost: 36000, dndbeyondPage: "4757-spellguard-shield" }, { id: "item_275", name: "Spell-refueling Ring", rarity: "Uncommon", faction: "Morgrave", baseCost: 600, dndbeyondPage: "10886065-spell-refueling-ring" }, - { id: "item_276", name: "Staff of Charming", rarity: "Rare", faction: "Tarkanan", baseCost: 3750, dndbeyondPage: "9229093-staff-of-charming" }, - { id: "item_277", name: "Staff of Fire", rarity: "Very Rare", faction: "Ashbound", baseCost: 18000, dndbeyondPage: "9229094-staff-of-fire" }, - { id: "item_278", name: "Staff of Frost", rarity: "Very Rare", faction: "Morgrave", baseCost: 18000, dndbeyondPage: "9229096-staff-of-frost" }, - { id: "item_279", name: "Staff of Healing", rarity: "Rare", faction: "Morgrave", baseCost: 4800, dndbeyondPage: "9229097-staff-of-healing" }, - { id: "item_280", name: "Staff of Power", rarity: "Very Rare", faction: "Morgrave", baseCost: 46000, dndbeyondPage: "9229098-staff-of-power" }, + { id: "item_276", name: "Staff of Charming", rarity: "Rare", faction: "Tarkanan", baseCost: 3750, dndbeyondPage: "9229093-staff-of-charming" }, + { id: "item_277", name: "Staff of Fire", rarity: "Very Rare", faction: "Ashbound", baseCost: 18000, dndbeyondPage: "9229094-staff-of-fire" }, + { id: "item_278", name: "Staff of Frost", rarity: "Very Rare", faction: "Morgrave", baseCost: 18000, dndbeyondPage: "9229096-staff-of-frost" }, + { id: "item_279", name: "Staff of Healing", rarity: "Rare", faction: "Morgrave", baseCost: 4800, dndbeyondPage: "9229097-staff-of-healing" }, + { id: "item_280", name: "Staff of Power", rarity: "Very Rare", faction: "Morgrave", baseCost: 46000, dndbeyondPage: "9229098-staff-of-power" }, { id: "item_281", name: "Staff of Striking", rarity: "Very Rare", faction: "Morgrave", baseCost: 36000, dndbeyondPage: "4765-staff-of-striking" }, - { id: "item_282", name: "Staff of Swarming Insects", rarity: "Rare", faction: "Ashbound", baseCost: 4500, dndbeyondPage: "9229099-staff-of-swarming-insects" }, + { id: "item_282", name: "Staff of Swarming Insects", rarity: "Rare", faction: "Ashbound", baseCost: 4500, dndbeyondPage: "9229099-staff-of-swarming-insects" }, { id: "item_283", name: "Staff of the Adder", rarity: "Uncommon", faction: "Ashbound", baseCost: 350, dndbeyondPage: "9229100-staff-of-the-adder" }, { id: "item_284", name: "Staff of the Python", rarity: "Uncommon", faction: "Ashbound", baseCost: 250, dndbeyondPage: "9229102-staff-of-the-python" }, - { id: "item_285", name: "Staff of the Woodlands", rarity: "Rare", faction: "Ashbound", baseCost: 4500, dndbeyondPage: "9229103-staff-of-the-woodlands" }, + { id: "item_285", name: "Staff of the Woodlands", rarity: "Rare", faction: "Ashbound", baseCost: 4500, dndbeyondPage: "9229103-staff-of-the-woodlands" }, { id: "item_286", name: "Staff of Thunder and Lightning", rarity: "Very Rare", faction: "Morgrave", baseCost: 30000, dndbeyondPage: "9229104-staff-of-thunder-and-lightning" }, - { id: "item_287", name: "Staff of Withering", rarity: "Rare", faction: "Ashbound", baseCost: 2100, dndbeyondPage: "4771-staff-of-withering" }, + { id: "item_287", name: "Staff of Withering", rarity: "Rare", faction: "Ashbound", baseCost: 2100, dndbeyondPage: "4771-staff-of-withering" }, { id: "item_288", name: "Stone of Controlling Earth Elementals", rarity: "Rare", faction: "Ashbound", baseCost: 4700, dndbeyondPage: "9229105-stone-of-controlling-earth-elementals" }, { id: "item_289", name: "Stone of Good Luck", rarity: "Uncommon", faction: "Tharashk", baseCost: 400, dndbeyondPage: "4773-stone-of-good-luck-luckstone" }, { id: "item_290", name: "Sun Blade", rarity: "Rare", faction: "Deneith", baseCost: 2000, dndbeyondPage: "9229110-sun-blade" }, @@ -305,17 +305,17 @@ const MAGIC_ITEMS_DATA = [ { id: "item_302", name: "Wand of Binding", rarity: "Rare", faction: "Thuranni", baseCost: 2500, dndbeyondPage: "9229182-wand-of-binding" }, { id: "item_303", name: "Wand of Enemy Detection", rarity: "Rare", faction: "Medani", baseCost: 3750, dndbeyondPage: "9229184-wand-of-enemy-detection" }, { id: "item_304", name: "Wand of Fear", rarity: "Rare", faction: "Thuranni", baseCost: 3250, dndbeyondPage: "9229185-wand-of-fear" }, - { id: "item_305", name: "Wand of Fireballs", rarity: "Rare", faction: "Ashbound", baseCost: 4800, dndbeyondPage: "9229186-wand-of-fireballs" }, - { id: "item_306", name: "Wand of Lightning Bolts", rarity: "Rare", faction: "Tarkanan", baseCost: 4800, dndbeyondPage: "9229187-wand-of-lightning-bolts" }, + { id: "item_305", name: "Wand of Fireballs", rarity: "Rare", faction: "Ashbound", baseCost: 4800, dndbeyondPage: "9229186-wand-of-fireballs" }, + { id: "item_306", name: "Wand of Lightning Bolts", rarity: "Rare", faction: "Tarkanan", baseCost: 4800, dndbeyondPage: "9229187-wand-of-lightning-bolts" }, { id: "item_307", name: "Wand of Magic Detection", rarity: "Uncommon", faction: "Medani", baseCost: 150, dndbeyondPage: "9229188-wand-of-magic-detection" }, { id: "item_308", name: "Wand of Magic Missiles", rarity: "Uncommon", faction: "Tharashk", baseCost: 300, dndbeyondPage: "9237129-wand-of-magic-missiles" }, - { id: "item_309", name: "Wand of Paralysis", rarity: "Rare", faction: "Thuranni", baseCost: 4250, dndbeyondPage: "9229190-wand-of-paralysis" }, - { id: "item_310", name: "Wand of Polymorph", rarity: "Very Rare", faction: "Tharashk", baseCost: 21000, dndbeyondPage: "9229191-wand-of-polymorph" }, + { id: "item_309", name: "Wand of Paralysis", rarity: "Rare", faction: "Thuranni", baseCost: 4250, dndbeyondPage: "9229190-wand-of-paralysis" }, + { id: "item_310", name: "Wand of Polymorph", rarity: "Very Rare", faction: "Tharashk", baseCost: 21000, dndbeyondPage: "9229191-wand-of-polymorph" }, { id: "item_311", name: "Wand of Secrets", rarity: "Uncommon", faction: "Medani", baseCost: 125, dndbeyondPage: "9229193-wand-of-secrets" }, { id: "item_312", name: "Wand of the War Mage, +1", rarity: "Uncommon", faction: "Morgrave", baseCost: 400, dndbeyondPage: "34712-wand-of-the-war-mage" }, { id: "item_313", name: "Wand of the War Mage, +2", rarity: "Rare", faction: "Morgrave", baseCost: 4000, dndbeyondPage: "34712-wand-of-the-war-mage" }, { id: "item_314", name: "Wand of the War Mage, +3", rarity: "Very Rare", faction: "Morgrave", baseCost: 14000, dndbeyondPage: "34712-wand-of-the-war-mage" }, - { id: "item_315", name: "Wand of Web", rarity: "Uncommon", faction: "Thuranni", baseCost: 250, dndbeyondPage: "9229194-wand-of-web" }, + { id: "item_315", name: "Wand of Web", rarity: "Uncommon", faction: "Thuranni", baseCost: 250, dndbeyondPage: "9229194-wand-of-web" }, { id: "item_316", name: "Wand of Wonder", rarity: "Rare", faction: "Morgrave", baseCost: 2250, dndbeyondPage: "9229195-wand-of-wonder" }, { id: "item_317", name: "Warrior's Passkey", rarity: "Rare", faction: "Tharashk", baseCost: 5000, dndbeyondPage: "7526784-warriors-passkey" }, { id: "item_318", name: "Watchful Helm", rarity: "Very Rare", faction: "Medani", baseCost: 8500, dndbeyondPage: "3001264-watchful-helm" }, @@ -330,4 +330,3 @@ const MAGIC_ITEMS_DATA = [ { id: "item_327", name: "Winged Boots", rarity: "Uncommon", faction: "Tarkanan", baseCost: 5000, dndbeyondPage: "9229203-winged-boots" }, { id: "item_328", name: "Wings of Flying", rarity: "Rare", faction: "Tarkanan", baseCost: 3600, dndbeyondPage: "9229204-wings-of-flying" } ]; - diff --git a/styles.css b/styles.css index 0cc57ab..d1a14e7 100644 --- a/styles.css +++ b/styles.css @@ -585,7 +585,6 @@ body { .ashbound div[class*="header"] .faction-name, .faction-name.ashbound { color: #228b22; } .morgrave div[class*="header"] .faction-name, .faction-name.morgrave { color: #ff8c00; } - /* Loading & Empty States */ .loading, .no-quests { text-align: center; @@ -1030,9 +1029,6 @@ button { white-space: normal; } -.market-table tbody { - height: 40vh; -} .market-filter-input, .market-filter-select { @@ -1252,12 +1248,10 @@ button { background: #1e7b1e; } -/* Sync the shade of blue across columns */ .rarity-rare { background: #4169e1; } -/* Sync the shade of purple across columns */ .rarity-very-rare { background: #9370db; } @@ -1330,6 +1324,7 @@ button { padding: 0 10px; position: relative; min-height: 320px; + min-height: 60vh; } /* Scroll hint shadow on mobile */ @@ -1362,4 +1357,3 @@ button { display: none; } } -