{"id":190,"date":"2026-02-11T21:37:21","date_gmt":"2026-02-11T21:37:21","guid":{"rendered":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/?p=190"},"modified":"2026-02-20T23:12:19","modified_gmt":"2026-02-20T23:12:19","slug":"crafting-database","status":"publish","type":"post","link":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/","title":{"rendered":"The Quinfall Crafting Database"},"content":{"rendered":"\r\n<div id=\"quinfall-crafting\" data-json=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/thequinfall\/master_recipes.min.json\">\r\n  <style>\r\n    :root {\r\n      --bg: #0a0a0f;\r\n      --panel: #111116;\r\n      --panel-2: #16161d;\r\n      --ink: #e0e7ff;\r\n      --muted: #a0a8c0;\r\n      --accent: #f59e0b;\r\n      --accent-glow: #fbbf24;\r\n      --grid: #1e1e2e;\r\n      --radius: 12px;\r\n    }\r\n    #quinfall-crafting { color: var(--ink); background: var(--bg); padding: 20px; border-radius: var(--radius); }\r\n    h1 { font-size: 24px; color: #fff; margin: 0 0 8px; }\r\n    .lede { color: var(--muted); margin: 0 0 20px; }\r\n    .shell { display: grid; grid-template-columns: 320px 1fr; gap: 20px; }\r\n    @media (max-width: 1024px) { .shell { grid-template-columns: 1fr; } }\r\n    .sidebar { background: var(--panel); border: 1px solid #202030; border-radius: var(--radius); overflow: hidden; }\r\n    .toolbar { padding: 16px; border-bottom: 1px solid var(--grid); display: flex; flex-direction: column; gap: 14px; }\r\n    .search-container { display: flex; align-items: center; gap: 10px; }\r\n    .search-icon-outside { color: #888; font-size: 18px; flex-shrink: 0; }\r\n    .search { flex: 1; background: #0d0d18; border: 1px solid #25253a; color: white; border-radius: 10px; padding: 10px 12px; font-size: 14px; box-sizing: border-box; }\r\n    .search::placeholder { color: var(--muted); }\r\n    .filter-row { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; font-size: 13px; }\r\n    .level-unlock-row { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 16px; font-size: 13px; color: var(--muted); }\r\n    .level-unlock-row input[type=\"number\"] { width: 64px; background: #0d0d18; border: 1px solid #25253a; color: white; padding: 5px 8px; border-radius: 6px; text-align: center; }\r\n    .list { overflow-y: auto; max-height: 72vh; }\r\n    .group-title { padding: 10px 16px; background: #141420; border-bottom: 1px solid rgba(255,255,255,0.03); font-weight: 600; cursor: pointer; display: flex; justify-content: space-between; align-items: center; }\r\n    .group-items { display: none; }\r\n    .group[data-open=\"true\"] .group-items { display: block; }\r\n    .item { padding: 11px 16px; cursor: pointer; border-bottom: 1px solid rgba(255,255,255,0.02); }\r\n    .item:hover, .item.active { background: rgba(245,158,11,0.09); }\r\n    .panel { background: var(--panel); border: 1px solid #202030; border-radius: var(--radius); padding: 20px; min-height: 620px; }\r\n    .placeholder-holo { text-align: center; padding: 80px 20px; color: var(--muted); }\r\n    .stats-quick { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px,1fr)); gap: 12px; margin: 20px 0; }\r\n    .stat-box { background: #0e0e1c; border: 1px solid #252540; border-radius: 10px; padding: 12px; text-align: center; }\r\n    .stat-value { font-size: 20px; font-weight: bold; color: var(--accent-glow); }\r\n    .ingredients-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px,1fr)); gap: 10px; margin-top: 8px; }\r\n    .ing-item { background: #0f0f1b; border: 1px solid #2a2a40; border-radius: 8px; padding: 10px; display: flex; justify-content: space-between; transition: all 0.2s ease; }\r\n    .ing-item:hover { background: #1a1a2b; transform: translateX(2px); }\r\n    .ing-qty { color: var(--accent); font-weight: bold; }\r\n    .status-bar { margin-top: 20px; padding: 10px 16px; font-size: 12px; color: var(--muted); display: flex; justify-content: space-between; }\r\n    .raw-title { color: #4ade80; margin-bottom: 6px; }\r\n    .raw-note { font-size: 12.5px; color: var(--muted); margin-top: 8px; }\r\n    .bulk-section { margin: 24px 0 16px; padding: 16px; background: #0e0e1c; border: 1px solid #252540; border-radius: 10px; }\r\n    .bulk-controls { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }\r\n    .quick-btns button { padding: 6px 12px; background: #1a1a2b; border: 1px solid #36365a; color: var(--accent); border-radius: 6px; cursor: pointer; font-size: 13px; }\r\n    .quick-btns button:hover { background: #25253a; }\r\n    .prof-group { margin-bottom: 20px; }\r\n    .prof-group h4 { margin: 12px 0 8px; font-size: 15px; display: flex; align-items: center; gap: 8px; font-weight: 600; }\r\n    .share-btn { margin-top: 20px; padding: 12px 20px; background: #22c55e; color: #111; font-weight: 700; border: none; border-radius: 8px; cursor: pointer; width: 100%; font-size: 15px; transition: all 0.2s; }\r\n    .share-btn:hover { background: #4ade80; transform: translateY(-1px); }\r\n    #toast { position: fixed; bottom: 20px; left: 50%; transform: translateX(-50%); background: #22c55e; color: #111; padding: 12px 24px; border-radius: 8px; font-weight: 700; box-shadow: 0 10px 30px rgba(0,0,0,0.6); opacity: 0; transition: all 0.3s; z-index: 9999; pointer-events: none; }\r\n  <\/style>\r\n\r\n  <p class=\"lede\">Explore every recipe. Click any recipe to view full details and ingredients.<\/p>\r\n\r\n  <div class=\"shell\">\r\n    <aside class=\"sidebar\">\r\n      <div class=\"toolbar\">\r\n        <div class=\"search-container\">\r\n          <span class=\"search-icon-outside\"><i class=\"fa fa-search\"><\/i><\/span>\r\n          <input id=\"qf-search\" class=\"search\" placeholder=\"Search name, material, or effect...\" type=\"search\">\r\n        <\/div>\r\n        <div class=\"filter-row\" id=\"qf-tier-filters\"><\/div>\r\n        <div class=\"level-unlock-row\">\r\n          <span class=\"level-part\">Level: <input type=\"number\" id=\"qf-level\" value=\"110\" min=\"1\" max=\"999\"><\/span>\r\n          <label>\r\n            <input type=\"checkbox\" id=\"qf-unlocked\">\r\n            <span>Show only unlocked (profession level \u2265 required)<\/span>\r\n          <\/label>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"list\" id=\"qf-list\"><\/div>\r\n    <\/aside>\r\n\r\n    <section class=\"panel\">\r\n      <div id=\"qf-placeholder\" class=\"placeholder-holo\">\r\n        <h2>Select a recipe<\/h2>\r\n        <p>Browse alchemy, blacksmithing, tailoring, and more.<\/p>\r\n      <\/div>\r\n\r\n      <div id=\"qf-detail\" style=\"display:none;\">\r\n        <h2 id=\"qf-name\"><\/h2>\r\n        <div id=\"qf-subtitle\" style=\"color:var(--muted); margin-bottom:16px;\"><\/div>\r\n\r\n        <div class=\"stats-quick\">\r\n          <div class=\"stat-box\"><div class=\"stat-label\">XP<\/div><div class=\"stat-value\" id=\"qf-xp\"><\/div><\/div>\r\n          <div class=\"stat-box\"><div class=\"stat-label\">Craft Time<\/div><div class=\"stat-value\" id=\"qf-time\"><\/div><\/div>\r\n          <div class=\"stat-box\"><div class=\"stat-label\">XP\/sec<\/div><div class=\"stat-value\" id=\"qf-xpsec\"><\/div><\/div>\r\n          <div class=\"stat-box\"><div class=\"stat-label\">Sale Price<\/div><div class=\"stat-value\" id=\"qf-price\"><\/div><\/div>\r\n        <\/div>\r\n\r\n        <div style=\"margin:24px 0 8px;\">\r\n          <h3 id=\"qf-ing-title\"><i class=\"fa fa-cubes\"><\/i> Ingredients <span style=\"color:var(--muted);font-weight:normal;font-size:15px;\">(for 1 craft)<\/span><\/h3>\r\n          <div class=\"ingredients-grid\" id=\"qf-ingredients\"><\/div>\r\n        <\/div>\r\n\r\n        <div style=\"margin:28px 0 8px;\">\r\n          <h3 id=\"qf-raw-title\" class=\"raw-title\"><i class=\"fa fa-leaf\"><\/i> Raw Materials Breakdown <span style=\"color:var(--muted);font-weight:normal;font-size:15px;\">(for 1 craft)<\/span><\/h3>\r\n          <div id=\"qf-raw-materials\"><\/div>\r\n          <div class=\"raw-note\">Total base\/gathered materials needed (full crafting chain expanded)<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"bulk-section\">\r\n          <h3 style=\"margin:0 0 12px;\"><i class=\"fa fa-calculator\"><\/i> Bulk Calculator<\/h3>\r\n          <div class=\"bulk-controls\">\r\n            <span>Quantity:<\/span>\r\n            <input id=\"qf-bulk-qty\" type=\"number\" value=\"1\" min=\"1\" max=\"999999\" style=\"width:110px; background:#0d0d18; border:1px solid #25253a; color:white; padding:8px; border-radius:8px; text-align:center; font-size:15px;\">\r\n            <div class=\"quick-btns\">\r\n              <button data-qty=\"1\">1<\/button><button data-qty=\"10\">10<\/button><button data-qty=\"25\">25<\/button>\r\n              <button data-qty=\"50\">50<\/button><button data-qty=\"100\">100<\/button><button data-qty=\"250\">250<\/button>\r\n              <button data-qty=\"500\">500<\/button><button data-qty=\"1000\">1000<\/button>\r\n            <\/div>\r\n          <\/div>\r\n          <div id=\"qf-bulk-totals\" class=\"stats-quick\"><\/div>\r\n        <\/div>\r\n\r\n        <div>\r\n          <h3><i class=\"fa fa-info-circle\"><\/i> Description<\/h3>\r\n          <p id=\"qf-desc\" style=\"color:#ccd;\"><\/p>\r\n        <\/div>\r\n\r\n        <!-- Share Button -->\r\n        <button id=\"qf-share-btn\" class=\"share-btn\">\ud83d\udd17 Share this recipe<\/button>\r\n      <\/div>\r\n\r\n      <div class=\"status-bar\">\r\n        <span id=\"qf-status\">Loading recipes\u2026<\/span>\r\n        <span>Showing <strong id=\"qf-count\">0<\/strong> recipes<\/span>\r\n      <\/div>\r\n    <\/section>\r\n  <\/div>\r\n\r\n  <!-- Toast Notification -->\r\n  <div id=\"toast\"><\/div>\r\n\r\n  <script>\r\n  (function(){\r\n    const root = document.getElementById('quinfall-crafting');\r\n    const JSON_URL = root.getAttribute('data-json');\r\n    let recipes = [];\r\n    let recipeByName = new Map();\r\n    let activeId = null;\r\n    let currentRecipe = null;\r\n\r\n    const els = {\r\n      search: document.getElementById('qf-search'),\r\n      tierFilters: document.getElementById('qf-tier-filters'),\r\n      list: document.getElementById('qf-list'),\r\n      detail: document.getElementById('qf-detail'),\r\n      placeholder: document.getElementById('qf-placeholder'),\r\n      name: document.getElementById('qf-name'),\r\n      subtitle: document.getElementById('qf-subtitle'),\r\n      xp: document.getElementById('qf-xp'),\r\n      time: document.getElementById('qf-time'),\r\n      xpsec: document.getElementById('qf-xpsec'),\r\n      price: document.getElementById('qf-price'),\r\n      desc: document.getElementById('qf-desc'),\r\n      ingredients: document.getElementById('qf-ingredients'),\r\n      rawMaterials: document.getElementById('qf-raw-materials'),\r\n      ingTitle: document.getElementById('qf-ing-title'),\r\n      rawTitle: document.getElementById('qf-raw-title'),\r\n      bulkQty: document.getElementById('qf-bulk-qty'),\r\n      bulkTotals: document.getElementById('qf-bulk-totals'),\r\n      status: document.getElementById('qf-status'),\r\n      count: document.getElementById('qf-count'),\r\n      unlocked: document.getElementById('qf-unlocked'),\r\n      level: document.getElementById('qf-level'),\r\n      shareBtn: document.getElementById('qf-share-btn')\r\n    };\r\n\r\n    const toast = document.getElementById('toast');\r\n\r\n    function showToast(msg) {\r\n      toast.textContent = msg;\r\n      toast.style.opacity = '1';\r\n      setTimeout(() => { toast.style.opacity = '0'; }, 2500);\r\n    }\r\n\r\n    function slugify(str) {\r\n      return str.toLowerCase().trim()\r\n        .replace(\/[^\\w\\s-]\/g, '')\r\n        .replace(\/[\\s_-]+\/g, '-')\r\n        .replace(\/^-+|-+$\/g, '');\r\n    }\r\n\r\n    function getRecipeSlug(recipe) {\r\n      return slugify(recipe.name);\r\n    }\r\n\r\n    function loadFromHash() {\r\n      const hash = window.location.hash.slice(1);\r\n      if (!hash || !recipes.length) return;\r\n      const match = recipes.find(r => getRecipeSlug(r) === hash);\r\n      if (match) showDetail(match.id);\r\n    }\r\n\r\n    const professionColors = {\r\n      'Mining': '#f59e0b', 'Smelting': '#f59e0b',\r\n      'Herbalism': '#22c55e',\r\n      'Woodcutting': '#eab308', 'Lumberjack': '#eab308',\r\n      'Skinning': '#10b981', 'Leatherworking': '#10b981',\r\n      'Fishing': '#0ea5e9',\r\n      'Gathering': '#94a3b8', 'Gathered': '#94a3b8'\r\n    };\r\n\r\n    function getProfessionColor(prof) {\r\n      return professionColors[prof] || '#64748b';\r\n    }\r\n\r\n    async function loadData() {\r\n      els.status.textContent = 'Fetching recipes\u2026';\r\n      try {\r\n        const res = await fetch(JSON_URL);\r\n        recipes = await res.json();\r\n        recipeByName.clear();\r\n        recipes.forEach(r => { if (r.name) recipeByName.set(r.name.toLowerCase().trim(), r); });\r\n        els.count.textContent = recipes.length;\r\n        renderTierFilters();\r\n        els.status.textContent = 'Ready';\r\n        renderList();\r\n        loadFromHash();                    \/\/ \u2190 Auto-open from URL\r\n      } catch (e) { els.status.textContent = 'Failed to load data'; }\r\n    }\r\n\r\n    \/\/ renderTierFilters, renderList, parseSeconds, formatTime, calculateRawMaterials, renderIngredients, renderBulkTotals, renderRawMaterials, updateBulkDisplay, showDetail are unchanged from last working version\r\n\r\n    function renderTierFilters() {\r\n      const tiers = [...new Set(recipes.map(r => String(r.tier || '').replace(\/\\D\/g, '')))].filter(t => t).sort((a,b) => Number(a)-Number(b));\r\n      els.tierFilters.innerHTML = tiers.map(t => `<label><input type=\"checkbox\" checked data-tier=\"${t}\"> Tier ${t}<\/label>`).join('');\r\n      els.tierFilters.querySelectorAll('[data-tier]').forEach(cb => cb.addEventListener('change', renderList));\r\n    }\r\n\r\n    function renderList() {\r\n      const q = els.search.value.trim().toLowerCase();\r\n      const lvl = parseInt(els.level.value) || 999;\r\n      const unlockedOnly = els.unlocked.checked;\r\n      const checkedTiers = Array.from(els.tierFilters.querySelectorAll('[data-tier]:checked')).map(el => el.dataset.tier);\r\n\r\n      const openProfessions = new Set();\r\n      els.list.querySelectorAll('.group[data-open=\"true\"]').forEach(group => {\r\n        const profName = group.querySelector('.group-title span').textContent.replace(\/\\s*\\(\\d+\\)$\/, '').trim();\r\n        openProfessions.add(profName);\r\n      });\r\n\r\n      const filtered = recipes.filter(r => {\r\n        const tierValue = String(r.tier || '').replace(\/\\D\/g, '');\r\n        if (!checkedTiers.includes(tierValue)) return false;\r\n        const req = isNaN(parseInt(r.required_level)) ? 0 : parseInt(r.required_level);\r\n        if (unlockedOnly && req > lvl) return false;\r\n        if (q) {\r\n          if (r.name.toLowerCase().includes(q) || (r.description || '').toLowerCase().includes(q)) return true;\r\n          if (Array.isArray(r.ingredients) && r.ingredients.some(i => i && i.material && i.material.toLowerCase().includes(q))) return true;\r\n          return false;\r\n        }\r\n        return true;\r\n      });\r\n\r\n      els.count.textContent = filtered.length;\r\n\r\n      const groups = {};\r\n      filtered.forEach(r => {\r\n        const p = r.profession || 'Other';\r\n        groups[p] = groups[p] || [];\r\n        groups[p].push(r);\r\n      });\r\n\r\n      let html = '';\r\n      Object.keys(groups).sort().forEach(prof => {\r\n        const itemsHtml = groups[prof].map(r => `\r\n          <div class=\"item ${activeId === String(r.id) ? 'active' : ''}\" data-id=\"${r.id}\">\r\n            <div class=\"item-name\">${r.name}<\/div>\r\n            <div class=\"item-meta\">${r.tier || '\u2014'} \u2022 Req Level ${r.required_level || 'N\/A'} \u2022 ${r.xp || '\u2014'} XP<\/div>\r\n          <\/div>\r\n        `).join('');\r\n        const isOpen = openProfessions.has(prof) ? 'true' : 'false';\r\n        html += `\r\n          <div class=\"group\" data-open=\"${isOpen}\">\r\n            <div class=\"group-title\"><span>${prof} (${groups[prof].length})<\/span><i class=\"fa fa-caret-down\"><\/i><\/div>\r\n            <div class=\"group-items\">${itemsHtml}<\/div>\r\n          <\/div>\r\n        `;\r\n      });\r\n\r\n      els.list.innerHTML = html || '<div style=\"padding:30px; color:var(--muted); text-align:center;\">No recipes match current filters.<\/div>';\r\n\r\n      els.list.querySelectorAll('.group-title').forEach(title => {\r\n        title.onclick = () => { const group = title.parentElement; group.dataset.open = group.dataset.open === 'true' ? 'false' : 'true'; };\r\n      });\r\n\r\n      els.list.querySelectorAll('.item').forEach(item => { item.onclick = () => showDetail(item.dataset.id); });\r\n    }\r\n\r\n    function parseSeconds(timeStr) {\r\n      if (!timeStr || String(timeStr).toLowerCase().includes('instant')) return 0;\r\n      timeStr = String(timeStr).toLowerCase().trim();\r\n      const numMatch = timeStr.match(\/[\\d.]+\/);\r\n      if (!numMatch) return 0;\r\n      let num = parseFloat(numMatch[0]);\r\n      if (isNaN(num)) return 0;\r\n      if (timeStr.includes('hour') || timeStr.includes('hr')) return num * 3600;\r\n      if (timeStr.includes('min')) return num * 60;\r\n      if (timeStr.includes('sec') || timeStr.includes('s')) return num;\r\n      return num;\r\n    }\r\n\r\n    function formatTime(seconds) {\r\n      if (!seconds || seconds <= 0) return '\u2014';\r\n      const h = Math.floor(seconds \/ 3600);\r\n      const m = Math.floor((seconds % 3600) \/ 60);\r\n      const s = Math.floor(seconds % 60);\r\n      if (h > 0) return `${h}h ${m}m ${s}s`;\r\n      if (m > 0) return `${m}m ${s}s`;\r\n      return `${s}s`;\r\n    }\r\n\r\n    function calculateRawMaterials(recipeId, multiplier = 1, visited = new Set()) {\r\n      const recipe = recipes.find(r => String(r.id) === String(recipeId));\r\n      if (!recipe || visited.has(String(recipeId))) return new Map();\r\n      visited.add(String(recipeId));\r\n      const totals = new Map();\r\n      if (Array.isArray(recipe.ingredients)) {\r\n        for (const ing of recipe.ingredients) {\r\n          const matName = (ing.material || '').trim();\r\n          if (!matName) continue;\r\n          const qty = parseFloat(ing.quantity) || 1;\r\n          const thisQty = qty * multiplier;\r\n          const subRecipe = recipeByName.get(matName.toLowerCase());\r\n          if (subRecipe) {\r\n            const subTotals = calculateRawMaterials(subRecipe.id, thisQty, visited);\r\n            for (const [name, amt] of subTotals) totals.set(name, (totals.get(name) || 0) + amt);\r\n          } else {\r\n            totals.set(matName, (totals.get(matName) || 0) + thisQty);\r\n          }\r\n        }\r\n      }\r\n      return totals;\r\n    }\r\n\r\n    function renderIngredients(recipe, qty) {\r\n      const html = Array.isArray(recipe.ingredients) && recipe.ingredients.length\r\n        ? recipe.ingredients.map(i => {\r\n            const matName = (i.material || 'Unknown').trim();\r\n            const baseQty = parseFloat(i.quantity) || 1;\r\n            const scaled = (baseQty * qty).toFixed(1).replace(\/\\.0$\/, '');\r\n            const producer = recipeByName.get(matName.toLowerCase());\r\n            const extra = producer ? ` <span style=\"color:#fbbf2488; font-size:12.5px;\">(from ${producer.profession})<\/span>` : '';\r\n            return `<div class=\"ing-item ingredient-link\" data-material=\"${encodeURIComponent(matName)}\" style=\"cursor:pointer;\" title=\"Click to view recipe\"><span>${matName}${extra}<\/span><span class=\"ing-qty\">\u00d7${scaled}<\/span><\/div>`;\r\n          }).join('')\r\n        : '<div style=\"color:var(--muted);\">No ingredients listed.<\/div>';\r\n      els.ingredients.innerHTML = html;\r\n\r\n      els.ingredients.querySelectorAll('.ingredient-link').forEach(el => {\r\n        el.addEventListener('click', () => {\r\n          const matName = decodeURIComponent(el.dataset.material);\r\n          const target = recipeByName.get(matName.toLowerCase());\r\n          if (target && target.id) showDetail(target.id);\r\n        });\r\n      });\r\n    }\r\n\r\n    function renderRawMaterials(recipe, qty) {\r\n      const rawMap = calculateRawMaterials(recipe.id, qty);\r\n      if (rawMap.size === 0) {\r\n        els.rawMaterials.innerHTML = '<div style=\"color:var(--muted);\">This is a base\/gathered item.<\/div>';\r\n        return;\r\n      }\r\n\r\n      const professionGroups = {};\r\n      const rawProfessionMap = {\r\n        'Iron Ore': 'Mining', 'Copper Ore': 'Mining', 'Silver Ore': 'Mining', 'Coal': 'Mining',\r\n        'Hemp Fiber': 'Herbalism', 'Nightbloom': 'Herbalism', 'Sweetroot Tuber': 'Herbalism',\r\n        'Oak Log': 'Woodcutting', 'Pine Log': 'Woodcutting',\r\n        'Raw Hide': 'Skinning', 'Leather Scrap': 'Skinning', 'Reflex Tendon': 'Skinning',\r\n        'Fresh Water': 'Gathering', 'Fire Seed': 'Gathering',\r\n        'Sugar': 'Farming', 'Rice': 'Farming', 'Milk': 'Farming', 'Pork': 'Farming',\r\n        'Mussel': 'Fishing', 'Wild Animal Meat': 'Hunting'\r\n      };\r\n\r\n      for (const [name, amt] of rawMap) {\r\n        let prof = 'Gathered';\r\n        const lowerName = name.toLowerCase();\r\n        for (const [key, p] of Object.entries(rawProfessionMap)) {\r\n          if (lowerName.includes(key.toLowerCase())) { prof = p; break; }\r\n        }\r\n        if (!professionGroups[prof]) professionGroups[prof] = [];\r\n        professionGroups[prof].push({name, amt: Number(amt).toFixed(1).replace(\/\\.0$\/, '')});\r\n      }\r\n\r\n      let html = '';\r\n      Object.keys(professionGroups).sort().forEach(prof => {\r\n        const color = getProfessionColor(prof);\r\n        const itemsHtml = professionGroups[prof].map(item => `\r\n          <div class=\"ing-item\"><span>${item.name}<\/span><span class=\"ing-qty\">\u00d7${item.amt}<\/span><\/div>\r\n        `).join('');\r\n        html += `<div class=\"prof-group\"><h4 style=\"color:${color}\"><i class=\"fa fa-cog\"><\/i> ${prof}<\/h4><div class=\"ingredients-grid\">${itemsHtml}<\/div><\/div>`;\r\n      });\r\n\r\n      els.rawMaterials.innerHTML = html;\r\n    }\r\n\r\n    function renderBulkTotals(recipe, qty) {\r\n      const perXP = parseInt(recipe.xp || 0);\r\n      const perSec = parseSeconds(recipe.craft_time);\r\n      const perPrice = parseFloat(recipe.sale_price || 0);\r\n      const totalXP = perXP * qty;\r\n      const totalSec = perSec * qty;\r\n      const totalPrice = perPrice * qty;\r\n      const craftsPerHour = perSec > 0 ? Math.round(3600 \/ perSec) : '\u2014';\r\n\r\n      els.bulkTotals.innerHTML = `\r\n        <div class=\"stat-box\"><div class=\"stat-label\">Total XP<\/div><div class=\"stat-value\">${totalXP.toLocaleString()}<\/div><\/div>\r\n        <div class=\"stat-box\"><div class=\"stat-label\">Total Time<\/div><div class=\"stat-value\">${formatTime(totalSec)}<\/div><\/div>\r\n        <div class=\"stat-box\"><div class=\"stat-label\">Total Value<\/div><div class=\"stat-value\">${totalPrice.toLocaleString()}<\/div><\/div>\r\n        <div class=\"stat-box\"><div class=\"stat-label\">Crafts \/ hour<\/div><div class=\"stat-value\">${craftsPerHour}<\/div><\/div>\r\n      `;\r\n    }\r\n\r\n    function updateBulkDisplay() {\r\n      if (!currentRecipe) return;\r\n      let qty = parseInt(els.bulkQty.value) || 1;\r\n      if (qty < 1) qty = 1;\r\n      els.bulkQty.value = qty;\r\n\r\n      const titleText = `(for ${qty} craft${qty > 1 ? 's' : ''})`;\r\n      els.ingTitle.querySelector('span').textContent = titleText;\r\n      els.rawTitle.querySelector('span').textContent = titleText;\r\n\r\n      renderBulkTotals(currentRecipe, qty);\r\n      renderIngredients(currentRecipe, qty);\r\n      renderRawMaterials(currentRecipe, qty);\r\n    }\r\n\r\n    function showDetail(recipeIdStr) {\r\n      const recipe = recipes.find(r => String(r.id) === String(recipeIdStr));\r\n      if (!recipe) return;\r\n\r\n      currentRecipe = recipe;\r\n      activeId = String(recipeIdStr);\r\n\r\n      els.placeholder.style.display = 'none';\r\n      els.detail.style.display = 'block';\r\n\r\n      els.name.textContent = recipe.name;\r\n      els.subtitle.textContent = `${recipe.profession || '\u2014'} \u2022 ${recipe.tier || '\u2014'} \u2022 Req. Level ${recipe.required_level || 'N\/A'}`;\r\n      els.xp.textContent = recipe.xp || '\u2014';\r\n      els.time.textContent = recipe.craft_time || '\u2014';\r\n      const seconds = parseSeconds(recipe.craft_time);\r\n      els.xpsec.textContent = seconds > 0 ? (parseInt(recipe.xp || 0) \/ seconds).toFixed(2) : '\u2014';\r\n      els.price.textContent = recipe.sale_price || '\u2014';\r\n      els.desc.textContent = recipe.description || 'No description available.';\r\n\r\n      els.bulkQty.value = 1;\r\n      updateBulkDisplay();\r\n\r\n      \/\/ Update URL with clean slug (SEO + shareable)\r\n      const slug = getRecipeSlug(recipe);\r\n      history.replaceState(null, '', `#${slug}`);\r\n\r\n      renderList();\r\n    }\r\n\r\n    \/\/ Share button\r\n    els.shareBtn.addEventListener('click', () => {\r\n      const url = window.location.href;\r\n      navigator.clipboard.writeText(url).then(() => {\r\n        showToast('\u2705 Link copied! Share this recipe anywhere.');\r\n      });\r\n    });\r\n\r\n    els.search.addEventListener('input', renderList);\r\n    els.unlocked.addEventListener('change', renderList);\r\n    els.level.addEventListener('input', renderList);\r\n    els.bulkQty.addEventListener('input', updateBulkDisplay);\r\n\r\n    document.querySelectorAll('#quinfall-crafting .quick-btns button').forEach(btn => {\r\n      btn.addEventListener('click', () => {\r\n        els.bulkQty.value = btn.dataset.qty;\r\n        updateBulkDisplay();\r\n      });\r\n    });\r\n\r\n    \/\/ Support direct links when page loads or hash changes\r\n    window.addEventListener('hashchange', loadFromHash);\r\n\r\n    loadData();\r\n  })();\r\n  <\/script>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Explore every recipe. Click any recipe to view full details and ingredients. Level: Show only unlocked (profession level \u2265 required) Select a recipe Browse alchemy, blacksmithing, tailoring, and more. XP Craft Time XP\/sec Sale Price Ingredients (for 1 craft) Raw Materials Breakdown (for 1 craft) Total base\/gathered materials needed (full crafting chain expanded) Bulk Calculator [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":212,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,5],"tags":[],"class_list":["post-190","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides","category-tools"],"yoast_head":"<!-- Meta Tags -->\r\n<title>The Quinfall Crafting Database<\/title>\r\n<meta name=\"description\" content=\"The Quinfall full crafting guide &amp; database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"The Quinfall Crafting Database\" \/>\r\n<meta property=\"og:description\" content=\"The Quinfall full crafting guide &amp; database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\" \/>\r\n<meta property=\"og:site_name\" content=\"The Quinfall\" \/>\r\n<meta property=\"article:publisher\" content=\"facebook.com\/gamingwithdaopa\/\" \/>\r\n<meta property=\"article:author\" content=\"facebook.com\/gamingwithdaopa\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2026-02-11T21:37:21+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-02-20T23:12:19+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"400\" \/>\r\n\t<meta property=\"og:image:height\" content=\"263\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"daopa\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@gamingwithdaopa\" \/>\r\n<meta name=\"twitter:site\" content=\"@gamingwithdaopa\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"daopa\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\"},\"author\":{\"name\":\"daopa\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"headline\":\"The Quinfall Crafting Database\",\"datePublished\":\"2026-02-11T21:37:21+00:00\",\"dateModified\":\"2026-02-20T23:12:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\"},\"wordCount\":67,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg\",\"articleSection\":[\"Guides\",\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\",\"name\":\"The Quinfall Crafting Database\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg\",\"datePublished\":\"2026-02-11T21:37:21+00:00\",\"dateModified\":\"2026-02-20T23:12:19+00:00\",\"description\":\"The Quinfall full crafting guide & database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.\",\"breadcrumb\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg\",\"width\":400,\"height\":263,\"caption\":\"the quinfall crafting database\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Quinfall Crafting Database\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#website\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/\",\"name\":\"The Quinfall\",\"description\":\"DaOpa&#039;s The Quinfall fansite for an extensive collection of videos, in-depth guides, detailed maps, and a wealth of game-related insights and articles.\",\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"alternateName\":\"quinfall\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\",\"name\":\"daopa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2025\/01\/gp.jpg\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2025\/01\/gp.jpg\",\"width\":116,\"height\":172,\"caption\":\"daopa\"},\"logo\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/image\/\"},\"description\":\"DaOpa has been variety streamer since 2009 with game focuses on primarily MMOs, Sandbox, RPG and FPS genres. For inquires comment in the comments sections. This channel is syndicated across various micro niche gaming related blogs operated by DaOpa. He creates fansites, guides, tools for gamers\",\"sameAs\":[\"https:\/\/gamingwithdaopa.ellatha.com\",\"facebook.com\/gamingwithdaopa\/\",\"https:\/\/x.com\/gamingwithdaopa\",\"youtube.com\/@daopa\"],\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/author\/daopa\/\"}]}<\/script>","yoast_head_json":{"title":"The Quinfall Crafting Database","description":"The Quinfall full crafting guide & database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/","og_locale":"en_US","og_type":"article","og_title":"The Quinfall Crafting Database","og_description":"The Quinfall full crafting guide & database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.","og_url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/","og_site_name":"The Quinfall","article_publisher":"facebook.com\/gamingwithdaopa\/","article_author":"facebook.com\/gamingwithdaopa\/","article_published_time":"2026-02-11T21:37:21+00:00","article_modified_time":"2026-02-20T23:12:19+00:00","og_image":[{"width":400,"height":263,"url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg","type":"image\/jpeg"}],"author":"daopa","twitter_card":"summary_large_image","twitter_creator":"@gamingwithdaopa","twitter_site":"@gamingwithdaopa","twitter_misc":{"Written by":"daopa"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#article","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/"},"author":{"name":"daopa","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"headline":"The Quinfall Crafting Database","datePublished":"2026-02-11T21:37:21+00:00","dateModified":"2026-02-20T23:12:19+00:00","mainEntityOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/"},"wordCount":67,"commentCount":4,"publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg","articleSection":["Guides","Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/","name":"The Quinfall Crafting Database","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg","datePublished":"2026-02-11T21:37:21+00:00","dateModified":"2026-02-20T23:12:19+00:00","description":"The Quinfall full crafting guide & database: Alchemy, Blacksmithing, Tailoring recipes with ingredients, craft times, required levels, XP and sale prices. Searchable, filterable tool for all professions.","breadcrumb":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#primaryimage","url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2026\/02\/the-quinfall-crafting-database.jpg","width":400,"height":263,"caption":"the quinfall crafting database"},{"@type":"BreadcrumbList","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/crafting-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/"},{"@type":"ListItem","position":2,"name":"The Quinfall Crafting Database"}]},{"@type":"WebSite","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#website","url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/","name":"The Quinfall","description":"DaOpa&#039;s The Quinfall fansite for an extensive collection of videos, in-depth guides, detailed maps, and a wealth of game-related insights and articles.","publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"alternateName":"quinfall","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/fb03a927907d90f409fac550ba375638","name":"daopa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/image\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2025\/01\/gp.jpg","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-content\/uploads\/sites\/35\/2025\/01\/gp.jpg","width":116,"height":172,"caption":"daopa"},"logo":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/#\/schema\/person\/image\/"},"description":"DaOpa has been variety streamer since 2009 with game focuses on primarily MMOs, Sandbox, RPG and FPS genres. For inquires comment in the comments sections. This channel is syndicated across various micro niche gaming related blogs operated by DaOpa. He creates fansites, guides, tools for gamers","sameAs":["https:\/\/gamingwithdaopa.ellatha.com","facebook.com\/gamingwithdaopa\/","https:\/\/x.com\/gamingwithdaopa","youtube.com\/@daopa"],"url":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/author\/daopa\/"}]}},"_links":{"self":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":4,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"predecessor-version":[{"id":325,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/posts\/190\/revisions\/325"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/media\/212"}],"wp:attachment":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/thequinfall\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}