{"id":108,"date":"2025-08-23T21:08:05","date_gmt":"2025-08-23T21:08:05","guid":{"rendered":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/?p=108"},"modified":"2026-06-05T02:53:27","modified_gmt":"2026-06-05T02:53:27","slug":"charge-ammo-list","status":"publish","type":"post","link":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/","title":{"rendered":"EVE Frontier Charge \/ Ammo List"},"content":{"rendered":"\r\n<div id=\"evefrontier-charges\" data-json=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/Charges.json\">\r\n  <style>\r\n    \/* === EVE-INSPIRED THEME === *\/\r\n    :root{\r\n      --bg:#0a0c10;\r\n      --panel:#12141b;\r\n      --panel-2:#171a22;\r\n      --ink:#e6edf3;\r\n      --muted:#9aa4b2;\r\n      --accent:#39d0ff;\r\n      --accent-2:#00ffa8;\r\n      --warn:#ffbe55;\r\n      --red:#ff5555;\r\n      --grid:#1f2430;\r\n      --chip:#222635;\r\n      --shadow:0 10px 30px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.03);\r\n      --radius:14px;\r\n    }\r\n    #evefrontier-charges{\r\n      color:var(--ink);\r\n      font:14px\/1.5 Inter, system-ui, -apple-system, Segoe UI, Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif;\r\n      background:radial-gradient(1200px 600px at 70% -20%,rgba(57,208,255,.05),transparent 60%), var(--bg);\r\n      padding:18px;\r\n      border-radius:var(--radius);\r\n      box-shadow:var(--shadow);\r\n      position:relative;\r\n      overflow:hidden;\r\n    }\r\n    #evefrontier-charges::after{\r\n      content:\"\";\r\n      position:absolute; inset:-2px;\r\n      background:radial-gradient(800px 400px at 110% 20%,rgba(0,255,168,.06),transparent 60%);\r\n      pointer-events:none;\r\n      filter:blur(2px);\r\n    }\r\n    h1,h2,h3{ letter-spacing:.08em; text-transform:uppercase; margin:6px 0 10px }\r\n    h1{ font-size:22px }\r\n    h2{ font-size:16px; color:#fff }\r\n    p.lede{ color:var(--muted); margin:8px 0 16px }\r\n    .shell{\r\n      display:grid;\r\n      grid-template-columns: 300px 1fr;\r\n      gap:16px;\r\n      min-height:520px;\r\n    }\r\n    @media (max-width: 900px){\r\n      .shell{ grid-template-columns:1fr }\r\n    }\r\n    \/* === SIDEBAR LIST (grouped) === *\/\r\n    .sidebar{\r\n      background:linear-gradient(180deg,var(--panel),var(--panel-2));\r\n      border:1px solid #202531;\r\n      border-radius:var(--radius);\r\n      overflow:hidden;\r\n      display:flex; flex-direction:column;\r\n      min-height:480px;\r\n    }\r\n    .toolbar{\r\n      display:grid; gap:8px;\r\n      grid-template-columns:auto 1fr 36px 36px;\r\n      padding:10px;\r\n      border-bottom:1px solid var(--grid);\r\n      background:linear-gradient(180deg,rgba(57,208,255,.04),transparent);\r\n      position:sticky; top:0; z-index:2;\r\n    }\r\n    .search{\r\n      width:100%;\r\n      background:#0e1118; border:1px solid #1e2430; color:#fff;\r\n      border-radius:10px; padding:8px 12px; outline:none;\r\n    }\r\n    .search::placeholder{ color:var(--muted); }\r\n    .search-icon{ color:#7d8798; display:flex; align-items:center; justify-content:center; }\r\n    .sort{\r\n      border:1px solid #1e2430; background:#0e1118; color:var(--ink);\r\n      border-radius:10px; cursor:pointer;\r\n    }\r\n    .toggle-groups{\r\n      border:1px solid #1e2430; background:#0e1118; color:var(--ink);\r\n      border-radius:10px; cursor:pointer;\r\n    }\r\n    .list{ overflow:auto; flex:1; scrollbar-width:thin; scrollbar-color:#2b3242 transparent; }\r\n    .group{ border-bottom:1px solid rgba(255,255,255,.04); }\r\n    .group-title{\r\n      width:100%; text-align:left;\r\n      display:flex; align-items:center; justify-content:space-between;\r\n      gap:8px; padding:8px 10px; cursor:pointer;\r\n      background:linear-gradient(180deg,#151924,#121622);\r\n      border-bottom:1px solid rgba(255,255,255,.03);\r\n      font-weight:600;\r\n    }\r\n    .group-title .left{ display:flex; align-items:center; gap:8px }\r\n    .group-title .count{ color:var(--muted); font-weight:500; font-size:12px }\r\n    .group-items{ display:none }\r\n    .group[data-open=\"true\"] .group-items{ display:block }\r\n    .group-title .caret{ transition:transform .15s ease }\r\n    .group[data-open=\"true\"] .group-title .caret{ transform:rotate(180deg) }\r\n    .item{\r\n      display:grid; grid-template-columns:42px 1fr auto; gap:12px; align-items:center;\r\n      padding:10px 12px;\r\n      border-bottom:1px solid rgba(255,255,255,.03);\r\n      background:transparent; color:var(--ink);\r\n      cursor:pointer;\r\n      transition:background .15s ease, transform .04s ease;\r\n    }\r\n    .item:hover{ background:rgba(57,208,255,.06) }\r\n    .item.active{\r\n      background:linear-gradient(90deg,rgba(57,208,255,.12),transparent 60%);\r\n      outline:1px solid rgba(57,208,255,.35);\r\n    }\r\n    .item .name{ font-weight:600 }\r\n    .item .minor{ color:var(--muted) }\r\n    .badge{\r\n      display:inline-flex; gap:6px; align-items:center;\r\n      background:var(--chip); border:1px solid #2a3144; color:#b8c0cc;\r\n      padding:3px 8px; border-radius:999px; font-size:11px;\r\n    }\r\n    .item .actions{ display:flex; gap:10px; align-items:center }\r\n    .item .actions .fa{ color:#8a93a7 }\r\n    .item .actions .fa:hover{ color:var(--accent) }\r\n    \/* === DETAIL PANEL === *\/\r\n    .panel{\r\n      background:linear-gradient(180deg,var(--panel),var(--panel-2));\r\n      border:1px solid #202531;\r\n      border-radius:var(--radius);\r\n      padding:16px;\r\n      min-height:480px;\r\n      position:relative; overflow:hidden;\r\n    }\r\n    \/* Holo header *\/\r\n    .holo{\r\n      display:grid; grid-template-columns:130px 1fr auto; gap:14px; align-items:center;\r\n      padding:12px; border:1px solid #263042; border-radius:12px;\r\n      background:linear-gradient(180deg,rgba(0,255,168,.06),rgba(57,208,255,.04));\r\n    }\r\n    .title{ display:flex; flex-direction:column; gap:4px }\r\n    .title h2{ margin:0; font-size:18px; letter-spacing:.12em }\r\n    .sub{ color:var(--muted); font-size:12px }\r\n    .chips{ display:flex; gap:8px; flex-wrap:wrap }\r\n    \/* Quick stats row *\/\r\n    .quick{\r\n      display:grid; grid-template-columns:repeat(3,1fr); gap:8px; margin-top:12px;\r\n    }\r\n    .q{\r\n      background:linear-gradient(180deg,#0e1118,#0c0f15);\r\n      border:1px solid #1d2432; border-radius:10px; padding:10px;\r\n    }\r\n    .q div:first-child{ color:var(--muted); font-size:11px; text-transform:uppercase }\r\n    .q strong{ font-size:16px }\r\n    \/* Stat grid *\/\r\n    .stats{\r\n      margin-top:14px;\r\n      display:grid; grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px;\r\n    }\r\n    .stat{\r\n      background:#0f131b; border:1px solid #1e2431; border-radius:10px; padding:10px;\r\n      display:flex; justify-content:space-between;\r\n    }\r\n    .stat label{ color:var(--muted); font-size:12px }\r\n    .stat span{ font-weight:600 }\r\n    \/* Blueprint *\/\r\n    .bp{\r\n      background:linear-gradient(180deg,rgba(57,208,255,.05),rgba(0,255,168,.04));\r\n      border:1px dashed #284758; border-radius:12px; padding:12px;\r\n      margin-top:14px;\r\n    }\r\n    .materials{\r\n      display:grid; grid-template-columns: 1fr auto; gap:6px 12px; align-items:center;\r\n      margin-top:8px;\r\n    }\r\n    .tag{\r\n      background:var(--chip); border:1px solid #2a3144; border-radius:999px;\r\n      padding:4px 10px; font-size:12px; color:#c9d3e0; width:max-content;\r\n      margin-right:8px;\r\n    }\r\n    .btn-mini{\r\n      display:inline-flex; align-items:center; gap:6px;\r\n      background:#0e1118; border:1px solid #1e2431; color:#d7deea;\r\n      border-radius:999px; padding:6px 10px; cursor:pointer;\r\n    }\r\n    .btn-mini:hover{ border-color:#2b3850; color:#fff }\r\n    \/* Compare panel *\/\r\n    .compare-wrap{ margin-top:14px; }\r\n    .compare-head{ display:flex; align-items:center; justify-content:space-between; gap:10px;\r\n      margin-bottom:8px; }\r\n    .table-scroll{ overflow:auto; border:1px solid #223043; border-radius:10px }\r\n    .compare-table{ width:100%; border-collapse:separate; border-spacing:0; min-width:720px; }\r\n    .compare-table th, .compare-table td{ padding:10px; border-bottom:1px solid #1e2a3c; text-align:left; vertical-align:top;\r\n      background:#0e1219; }\r\n    .compare-table thead th{ position:sticky; top:0; background:#151a24; z-index:1; }\r\n    .compare-table tbody tr:nth-child(odd) td{ background:#0d1117 }\r\n    .col-attr{ width:220px; white-space:nowrap }\r\n    .remove-btn{ cursor:pointer; color:#9aa6b2 }\r\n    .remove-btn:hover{ color:#ff8080 }\r\n    \/* Footer status *\/\r\n    .status{\r\n      position:sticky; bottom:0; margin-top:12px; padding:10px;\r\n      background:linear-gradient(180deg, transparent, rgba(10,12,16,.9));\r\n      border-top:1px solid #1f2532; display:flex; justify-content:space-between;\r\n      font-size:12px; color:var(--muted);\r\n    }\r\n    \/* Toast *\/\r\n    #toast {\r\n      visibility: hidden;\r\n      min-width: 220px;\r\n      background: rgba(20,20,20,0.9);\r\n      color: var(--accent);\r\n      text-align: center;\r\n      border: 1px solid var(--accent);\r\n      border-radius: 6px;\r\n      padding: 12px;\r\n      position: fixed;\r\n      z-index: 9999;\r\n      right: 20px;\r\n      bottom: 20px;\r\n      font-size: 14px;\r\n      opacity: 0;\r\n      transform: translateY(20px);\r\n      transition: all 0.5s ease;\r\n      box-shadow: 0 0 12px rgba(0,170,255,0.6);\r\n    }\r\n    #toast.show { visibility: visible; opacity: 1; transform: translateY(0); }\r\n    \/* Tiny helpers *\/\r\n    .mono{ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace }\r\n    .faint{ color:var(--muted) }\r\n    .sep{ opacity:.35; margin:0 8px }\r\n    .attribute-toggles { margin: 10px 0; }\r\n    .attribute-toggles button { margin: 3px; padding: 5px 8px; border: 1px solid #0af; background: #111; color: #0af; border-radius: 4px; cursor: pointer; font-size: 12px; }\r\n    .attribute-toggles button.active { background: #0af; color: #fff; }\r\n    .attribute-toggles button.unique { border-color: #f0c000; color: #f0c000; }\r\n    .attribute-toggles button.unique.active { background: #f0c000; color: #000; }\r\n    canvas { background: var(--panel); border-radius: 8px; padding: 10px; margin-top: 10px; width: 100%; height: 300px; box-sizing: border-box; }\r\n\r\n    \/* === ICON STYLES (added for Charges) === *\/\r\n    .bp-icon, .bp-icon-large {\r\n      border-radius:6px; border:1px solid #2a3144; background:#0e1118; object-fit:contain;\r\n      box-shadow:0 2px 8px rgba(0,0,0,.35); flex-shrink:0; image-rendering: crisp-edges;\r\n    }\r\n    .bp-icon { width:36px; height:36px; }\r\n    .bp-icon-large {\r\n      width:96px; height:96px; border-width:2px; border-color:#39d0ff;\r\n      box-shadow:0 0 18px rgba(57,208,255,.4), 0 6px 22px rgba(0,0,0,.5);\r\n    }\r\n    .icon-frame {\r\n      width:120px; height:120px; background:linear-gradient(145deg, #12141b, #0a0c10);\r\n      border:1px solid #263042; border-radius:12px; display:flex; align-items:center; justify-content:center;\r\n      overflow:hidden; box-shadow: inset 0 0 0 1px rgba(255,255,255,.03), 0 6px 24px rgba(0,0,0,.45);\r\n      position:relative; flex-shrink:0;\r\n    }\r\n    .icon-frame::after {\r\n      content:''; position:absolute; inset:0;\r\n      background:radial-gradient(circle at 30% 25%, rgba(57,208,255,.12), transparent 60%); pointer-events:none;\r\n    }\r\n    .placeholder {\r\n      display:flex; align-items:center; justify-content:center; color:#4a5468; background:#0e1118;\r\n      width:100%; height:100%; font-size:42px;\r\n    }\r\n  <\/style>\r\n\r\n  <p class=\"lede\">\r\n    Explore the complete <strong>Ammo \/ Charge Database<\/strong> for EVE Frontier Cycle 5!\r\n    Select any charge to uncover stats, build requirements, and details.\r\n    Compare charges side-by-side to optimize fittings, logistics, and survival strategies.\r\n  <\/p>\r\n\r\n  <div class=\"shell\">\r\n    <!-- SIDEBAR -->\r\n    <aside class=\"sidebar\" id=\"charge-sidebar\">\r\n      <div class=\"toolbar\">\r\n        <i class=\"fa fa-search search-icon\" aria-hidden=\"true\"><\/i>\r\n        <input class=\"search\" id=\"chargeSearch\" type=\"search\" placeholder=\"Search charge name \/ typeID\u2026\" \/>\r\n        <button class=\"sort\" id=\"sortBtn\" title=\"Toggle sort name A\u21c4Z\">\r\n          <i class=\"fa fa-sort-alpha-asc\" aria-hidden=\"true\"><\/i>\r\n        <\/button>\r\n        <button class=\"toggle-groups\" id=\"toggleChargeGroups\" title=\"Toggle all groups\">\r\n          <i class=\"fa fa-plus-square\" aria-hidden=\"true\"><\/i>\r\n        <\/button>\r\n      <\/div>\r\n      <div class=\"list\" id=\"charge-list\"><\/div>\r\n    <\/aside>\r\n\r\n    <!-- DETAILS -->\r\n    <section class=\"panel\" id=\"charge-detail\">\r\n      <div id=\"chargeDetail\">\r\n        <div class=\"holo\">\r\n          <div class=\"icon-frame\">\r\n            <div class=\"bp-icon-large placeholder\" style=\"width:96px;height:96px;font-size:48px;\">\r\n              <i class=\"fa fa-bolt\"><\/i>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"title\">\r\n            <h2>Select a charge<\/h2>\r\n            <div class=\"sub\">Browse all ammo charges using the sidebar to the left.<\/div>\r\n            <div class=\"chips\">\r\n              <span class=\"badge\"><i class=\"fa fa-bolt\"><\/i> Ammunition<\/span>\r\n              <span class=\"badge\"><i class=\"fa fa-database\"><\/i> Dynamic Data<\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"tag\"><i class=\"fa fa-database\"><\/i> Live: Charges.json<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- COMPARE -->\r\n      <div id=\"chargeCompareWrap\" class=\"compare-wrap\" style=\"display:none;\">\r\n        <div class=\"bp\">\r\n          <div class=\"compare-head\">\r\n            <h3><i class=\"fa fa-balance-scale\"><\/i> Compare<\/h3>\r\n            <button id=\"chargeCompareReset\" class=\"btn-mini\" title=\"Clear all\"><i class=\"fa fa-times\"><\/i> Reset<\/button>\r\n          <\/div>\r\n          <div class=\"table-scroll\">\r\n            <table class=\"compare-table\" id=\"chargeCompareTable\"><\/table>\r\n          <\/div>\r\n          <div id=\"chargeChartSection\"><\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"status\">\r\n        <span id=\"chargeStatus\">Fetching data\u2026<\/span>\r\n        <span><span class=\"sep\">\u2022<\/span> <span id=\"chargeCount\">0<\/span> charges loaded<\/span>\r\n      <\/div>\r\n    <\/section>\r\n  <\/div>\r\n\r\n  <script src=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/chart.js\"><\/script>\r\n  <div id=\"toast\"><\/div>\r\n\r\n  <script>\r\n  (async function(){\r\n    const root = document.getElementById('evefrontier-charges');\r\n    const JSON_URL = root.getAttribute('data-json');\r\n    const els = {\r\n      list: document.getElementById('charge-list'),\r\n      detail: document.getElementById('chargeDetail'),\r\n      search: document.getElementById('chargeSearch'),\r\n      sortBtn: document.getElementById('sortBtn'),\r\n      toggleGroups: document.getElementById('toggleChargeGroups'),\r\n      status: document.getElementById('chargeStatus'),\r\n      count: document.getElementById('chargeCount'),\r\n      compareWrap: document.getElementById('chargeCompareWrap'),\r\n      compareTable: document.getElementById('chargeCompareTable'),\r\n      compareReset: document.getElementById('chargeCompareReset'),\r\n    };\r\n\r\n    \/** Utils **\/\r\n    const fmtNum = (n) => {\r\n      if (n === null || n === undefined || Number.isNaN(n)) return \"\u2014\";\r\n      const x = +n;\r\n      if (Math.abs(x) >= 1000) return x.toLocaleString();\r\n      if (Number.isInteger(x)) return x.toString();\r\n      return x.toLocaleString(undefined, {maximumFractionDigits: 3});\r\n    };\r\n\r\n    const secsToHMS = (s) => {\r\n      if (!Number.isFinite(+s)) return \"\u2014\";\r\n      const d = Math.floor(s\/86400), h = Math.floor((s%86400)\/3600), m = Math.floor((s%3600)\/60);\r\n      const parts = [];\r\n      if (d) parts.push(`${d}d`);\r\n      if (h) parts.push(`${h}h`);\r\n      if (m || (!d && !h)) parts.push(`${m}m`);\r\n      return parts.join(\" \");\r\n    };\r\n\r\n    \/** Icon helper (EVE Frontier icons) **\/\r\n    const ICON_BASE = 'https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/icons\/';\r\n    function getChargeIconHTML(charge, size = 'small') {\r\n      const cls = size === 'large' ? 'bp-icon-large' : 'bp-icon';\r\n      const phStyle = size === 'large' ? 'width:96px;height:96px;font-size:42px;' : 'width:36px;height:36px;';\r\n      if (!charge) {\r\n        return `<div class=\"${cls} placeholder\" style=\"${phStyle}\"><i class=\"fa fa-bolt\"><\/i><\/div>`;\r\n      }\r\n      let iconFile = charge.iconID ? `${charge.iconID}.png` : (charge.graphicID ? `g${charge.graphicID}.png` : null);\r\n      if (iconFile) {\r\n        const safe = (charge.name || 'Charge').replace(\/\"\/g, '&quot;');\r\n        return `<img decoding=\"async\" class=\"${cls}\" src=\"${ICON_BASE}${iconFile}\" alt=\"${safe}\" loading=\"lazy\"\r\n                 onerror=\"this.outerHTML='<div class=\\\\'${cls} placeholder\\\\' style=\\\\'${phStyle}\\\\'> <i class=\\\\'fa fa-bolt\\\\'><\/i><\/div>'\" \/>`;\r\n      }\r\n      return `<div class=\"${cls} placeholder\" style=\"${phStyle}\"><i class=\"fa fa-bolt\"><\/i><\/div>`;\r\n    }\r\n\r\n    \/** State **\/\r\n    let charges = [];\r\n    let sortAsc = true;\r\n    let activeTypeID = null;\r\n    let compareList = [];\r\n    let selectedChartAttributes = [];\r\n    let allOpen = false;\r\n\r\n    async function load(){\r\n      try {\r\n        els.status.textContent = 'Fetching data\u2026';\r\n        const res = await fetch(JSON_URL, {mode:'cors'});\r\n        if(!res.ok) throw new Error(`HTTP ${res.status}`);\r\n        const data = await res.json();\r\n        if(!data || !Array.isArray(data.charges)) throw new Error('Invalid JSON: missing \"charges\" array');\r\n        charges = data.charges;\r\n        els.count.textContent = charges.length;\r\n        els.status.textContent = 'Ready';\r\n        renderList();\r\n      }catch(err){\r\n        console.error(err);\r\n        els.status.innerHTML = `Could not fetch <span class=\"mono\">Charges.json<\/span>. Ensure the URL is correct and CORS is enabled on your domain.`;\r\n        els.list.innerHTML = `<div style=\"padding:12px;color:#ff9a9a\">Fetch error: ${err.message}<\/div>`;\r\n      }\r\n    }\r\n\r\n    function renderList(){\r\n      const q = els.search.value?.trim().toLowerCase() || '';\r\n      const filtered = charges.filter(c => {\r\n        const name = (c.name||'').toLowerCase();\r\n        const typeID = String(c.typeID||'');\r\n        const groupStr = (c.group || '').toLowerCase();\r\n        return name.includes(q) || typeID.includes(q) || groupStr.includes(q);\r\n      });\r\n\r\n      const map = new Map();\r\n      for (const c of filtered){\r\n        const group = c.group || (c.groupID != null ? `Group ${c.groupID}` : 'Other');\r\n        if (!map.has(group)) map.set(group, []);\r\n        map.get(group).push(c);\r\n      }\r\n\r\n      const groups = Array.from(map.entries())\r\n        .sort(([ga],[gb]) => ga.localeCompare(gb));\r\n\r\n      els.list.innerHTML = '';\r\n\r\n      for (const [groupName, arr] of groups){\r\n        arr.sort((a,b)=>{\r\n          const A = (a.name||'').toLowerCase();\r\n          const B = (b.name||'').toLowerCase();\r\n          return sortAsc ? A.localeCompare(B) : B.localeCompare(A);\r\n        });\r\n\r\n        const section = document.createElement('div');\r\n        section.className = 'group';\r\n        section.dataset.open = 'false';\r\n\r\n        const title = document.createElement('button');\r\n        title.className = 'group-title';\r\n        title.innerHTML = `\r\n          <span class=\"left\">\r\n            <i class=\"fa fa-folder-o\" aria-hidden=\"true\"><\/i>\r\n            ${groupName}\r\n          <\/span>\r\n          <span>\r\n            <span class=\"count\">${arr.length}<\/span>\r\n            <i class=\"fa fa-caret-down caret\" aria-hidden=\"true\"><\/i>\r\n          <\/span>\r\n        `;\r\n        title.addEventListener('click', ()=>{\r\n          section.dataset.open = section.dataset.open === 'true' ? 'false' : 'true';\r\n          title.querySelector('.left i').className = section.dataset.open === 'true' ? 'fa fa-folder-open-o' : 'fa fa-folder-o';\r\n        });\r\n\r\n        const items = document.createElement('div');\r\n        items.className = 'group-items';\r\n\r\n        for (const c of arr){\r\n          const btn = document.createElement('div');\r\n          btn.className = 'item' + (c.typeID===activeTypeID ? ' active':'');\r\n          const iconHTML = getChargeIconHTML(c);\r\n          btn.innerHTML = `\r\n            ${iconHTML}\r\n            <div>\r\n              <div class=\"name\"><i class=\"fa fa-bolt\" aria-hidden=\"true\"><\/i> ${c.name||'Unnamed Charge'}<\/div>\r\n              <div class=\"chips\" style=\"margin-top:6px\">\r\n                <span class=\"badge\" title=\"Group\"><i class=\"fa fa-tags\"><\/i> ${c.group || ('Group '+(c.groupID??'\u2014'))}<\/span>\r\n                ${c.volume!=null? `<span class=\"badge\"><i class=\"fa fa-cube\"><\/i> ${fmtNum(c.volume)} m\u00b3<\/span>`:''}\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"actions\">\r\n              <i class=\"fa fa-plus-circle\" title=\"Add to compare\" aria-hidden=\"true\"><\/i>\r\n              <span class=\"tag\">Select<\/span>\r\n            <\/div>\r\n          `;\r\n          btn.addEventListener('click', (e)=>{\r\n            if (e.target && e.target.classList.contains('fa-plus-circle')) return;\r\n            selectCharge(c.typeID);\r\n          });\r\n          btn.querySelector('.fa-plus-circle').addEventListener('click', (e)=>{\r\n            e.stopPropagation();\r\n            addToCompare(c.typeID);\r\n          });\r\n          items.appendChild(btn);\r\n        }\r\n\r\n        section.appendChild(title);\r\n        section.appendChild(items);\r\n        els.list.appendChild(section);\r\n      }\r\n    }\r\n\r\n    function selectCharge(typeID){\r\n      activeTypeID = typeID;\r\n      const c = charges.find(x=>x.typeID===typeID);\r\n      if(!c) return;\r\n      const s = c.stats || {};\r\n      const bp = c.build || {};\r\n      const mats = Array.isArray(bp.materials) ? bp.materials : [];\r\n\r\n      els.detail.innerHTML = `\r\n        <div class=\"holo\">\r\n          <div class=\"icon-frame\">\r\n            ${getChargeIconHTML(c, 'large')}\r\n          <\/div>\r\n          <div class=\"title\">\r\n            <h2>${c.name || 'Unnamed Charge'}<\/h2>\r\n            <div class=\"sub\">${c.description || 'No description in data.'}<\/div>\r\n            <div class=\"chips\">\r\n              ${c.group ? `<span class=\"badge\"><i class=\"fa fa-tags\"><\/i> ${c.group}<\/span>`:''}\r\n              ${c.techLevel!=null ? `<span class=\"badge\">Tech: ${c.techLevel}<\/span>`:''}\r\n              ${c.metaLevel!=null ? `<span class=\"badge\">Meta: ${c.metaLevel}<\/span>`:''}\r\n              ${c.volume!=null ? `<span class=\"badge\" title=\"Volume\"><i class=\"fa fa-cube\"><\/i> ${fmtNum(c.volume)} m\u00b3<\/span>`:''}\r\n              ${c.capacity!=null ? `<span class=\"badge\" title=\"Capacity\"><i class=\"fa fa-archive\"><\/i> ${fmtNum(c.capacity)} m\u00b3<\/span>`:''}\r\n              ${c.mass!=null && c.mass !== 0 ? `<span class=\"badge\" title=\"Mass\"><i class=\"fa fa-balance-scale\"><\/i> ${fmtNum(c.mass)} kg<\/span>`:''}\r\n            <\/div>\r\n          <\/div>\r\n          <div style=\"display:flex; flex-direction:column; gap:6px; align-items:flex-end\">\r\n            <div class=\"tag\"><i class=\"fa fa-id-badge\"><\/i> typeID: <span class=\"mono\">${c.typeID}<\/span><\/div>\r\n            <button class=\"btn-mini\" id=\"btnAddCompare\"><i class=\"fa fa-plus-circle\"><\/i> Add to Compare<\/button>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"quick\">\r\n          <div class=\"q\"><div>Volume<\/div><strong>${fmtNum(c.volume)} m\u00b3<\/strong><\/div>\r\n          <div class=\"q\"><div>Mass<\/div><strong>${fmtNum(c.mass)} kg<\/strong><\/div>\r\n          <div class=\"q\"><div>Capacity<\/div><strong>${fmtNum(c.capacity)} m\u00b3<\/strong><\/div>\r\n        <\/div>\r\n\r\n        ${(s && Object.keys(s).length) ? `\r\n          <h3 class=\"section-title\">Stats<\/h3>\r\n          <div class=\"stats\">\r\n            ${Object.entries(s).filter(([k,v]) => v?.value != null && !( (k === 'Mass' || k === 'Mass Addition') && v.value === 0 )).map(([k,v]) => {\r\n              let formattedValue = v.value;\r\n              let formattedUnit = v.unit || \"\";\r\n              if (formattedUnit === \"groupID\" || formattedUnit === \"1=True 0=False\" || formattedUnit === \"1=small 2=medium 3=l\") {\r\n                formattedUnit = \"\";\r\n              }\r\n              if (k === \"Cannot Auto Repeat\") {\r\n                formattedValue = v.value === 1.0 ? \"True\" : \"False\";\r\n              } else if (k === \"Charge size\") {\r\n                let size = \"\";\r\n                if (v.value === 1.0) size = \"Small\";\r\n                else if (v.value === 2.0) size = \"Medium\";\r\n                else if (v.value === 3.0) size = \"Large\";\r\n                formattedValue = size;\r\n              }\r\n              return `<div class=\"stat\"><label>${k}<\/label><span>${formattedValue} ${formattedUnit}<\/span><\/div>`;\r\n            }).join(\"\")}\r\n          <\/div>` : \"\"}\r\n\r\n        <div style=\"height:8px\"><\/div>\r\n\r\n        <div class=\"bp\">\r\n          <h3><i class=\"fa fa-cogs\"><\/i> Blueprint & Build<\/h3>\r\n          <div style=\"display:flex; gap:10px; flex-wrap:wrap\">\r\n            ${bp.blueprintTypeID!=null? `<span class=\"tag\">Blueprint ID: <span class=\"mono\">${bp.blueprintTypeID}<\/span><\/span>`:''}\r\n            ${bp.time!=null? `<span class=\"tag\">Build Time: ${secsToHMS(bp.time)}<\/span>`:''}\r\n            ${c.basePrice!=null? `<span class=\"tag\">Base Price: ${fmtNum(c.basePrice)} ISK<\/span>`:''}\r\n          <\/div>\r\n          <div style=\"height:8px\"><\/div>\r\n          ${mats.length\r\n            ? `<div class=\"materials\">\r\n                <div class=\"faint\">Material<\/div><div class=\"faint\" style=\"text-align:right\">Qty<\/div>\r\n                ${mats.map(m=>`\r\n                  <div>${m.name ?? m.typeID ?? 'Unknown'}<\/div>\r\n                  <div style=\"text-align:right\">${fmtNum(m.quantity ?? 0)}<\/div>\r\n                `).join('')}\r\n              <\/div>`\r\n            : `<div class=\"faint\">No materials listed for this charge.<\/div>`\r\n          }\r\n        <\/div>\r\n      `;\r\n\r\n      const btnAdd = document.getElementById('btnAddCompare');\r\n      if (btnAdd){\r\n        btnAdd.addEventListener('click', ()=> addToCompare(typeID));\r\n      }\r\n\r\n      for (const el of document.querySelectorAll('.item')) el.classList.remove('active');\r\n      const activeBtn = Array.from(document.querySelectorAll('.item')).find(b=>b.querySelector('.mono')?.textContent==String(typeID));\r\n      if (activeBtn) activeBtn.classList.add('active');\r\n\r\n      els.detail.parentElement.scrollTo({top:0, behavior:'smooth'});\r\n    }\r\n\r\n    function addToCompare(typeID){\r\n      if (!compareList.includes(typeID)){\r\n        if (compareList.length >= 3){\r\n          showToast('You can compare up to 3 charges.');\r\n          return;\r\n        }\r\n        compareList.push(typeID);\r\n        renderCompare();\r\n        showToast(\"Charge added to compare!\");\r\n      } else showToast(\"Already in compare list.\");\r\n    }\r\n\r\n    function removeFromCompare(typeID){\r\n      compareList = compareList.filter(id=>id!==typeID);\r\n      renderCompare();\r\n    }\r\n\r\n    function renderCompare(){\r\n      if (!compareList.length){\r\n        els.compareWrap.style.display = 'none';\r\n        els.compareTable.innerHTML = '';\r\n        return;\r\n      }\r\n      els.compareWrap.style.display = 'block';\r\n\r\n      const compared = compareList.map(id => charges.find(c=>c.typeID===id)).filter(Boolean);\r\n\r\n      const statKeys = new Set();\r\n      compared.forEach(c => Object.entries(c.stats || {}).forEach(([k,v]) => { if(v?.value!=null) statKeys.add(k); }));\r\n\r\n      const attrCounts = {};\r\n      compared.forEach(c => Object.keys(c.stats || {}).forEach(attr => {\r\n        attrCounts[attr] = (attrCounts[attr]||0) + (c.stats?.[attr]?.value!=null ? 1 : 0);\r\n      }));\r\n\r\n      const rows = [\r\n        { label:'Name', get:(c)=> c.name || '\u2014' },\r\n        { label:'Group', get:(c)=> c.group || (c.groupID!=null? 'Group '+c.groupID : '\u2014') },\r\n        { label:'Mass (kg)', get:(c)=> fmtNum(c.mass) },\r\n        { label:'Volume (m\u00b3)', get:(c)=> fmtNum(c.volume) },\r\n        { label:'Capacity (m\u00b3)', get:(c)=> fmtNum(c.capacity) },\r\n        { label:'Tech Level', get:(c)=> c.techLevel || '\u2014' },\r\n        { label:'Meta Level', get:(c)=> c.metaLevel || '\u2014' },\r\n        { label:'Base Price (ISK)', get:(c)=> c.basePrice!=null? fmtNum(c.basePrice) : '\u2014' },\r\n        { label:'Build Time', get:(c)=> c.build && c.build.time!=null ? secsToHMS(c.build.time) : '\u2014' },\r\n      ];\r\n\r\n      let html = '<thead><tr><th class=\"col-attr\">Attribute<\/th>';\r\n      for (const c of compared){\r\n        const iconSmall = getChargeIconHTML(c, 'small');\r\n        html += `<th>\r\n          <div style=\"display:flex; align-items:center; justify-content:space-between; gap:8px\">\r\n            <span style=\"display:flex; align-items:center; gap:8px;\">\r\n              ${iconSmall}\r\n              <span>${c.name || '\u2014'}<\/span>\r\n            <\/span>\r\n            <span class=\"remove-btn\" title=\"Remove\" data-typeid=\"${c.typeID}\"><i class=\"fa fa-times\"><\/i><\/span>\r\n          <\/div>\r\n          <div class=\"faint mono\">typeID: ${c.typeID}<\/div>\r\n        <\/th>`;\r\n      }\r\n      html += '<\/tr><\/thead>';\r\n\r\n      html += '<tbody>';\r\n      for (const r of rows){\r\n        const values = compared.map(c => r.get(c));\r\n        if (values.every(v => v === '0' || v === '\u2014')) continue;\r\n        html += `<tr><td class=\"col-attr\">${r.label}<\/td>`;\r\n        for (const v of values){\r\n          html += `<td>${v}<\/td>`;\r\n        }\r\n        html += '<\/tr>';\r\n      }\r\n\r\n      statKeys.forEach(k => {\r\n        const rowValues = compared.map(c => {\r\n          const v = c.stats?.[k];\r\n          if (!v) return \"\u2014\";\r\n          let formattedValue = v.value;\r\n          let formattedUnit = v.unit || \"\";\r\n          if (formattedUnit === \"groupID\" || formattedUnit === \"1=True 0=False\" || formattedUnit === \"1=small 2=medium 3=l\") {\r\n            formattedUnit = \"\";\r\n          }\r\n          if (k === \"Cannot Auto Repeat\") {\r\n            formattedValue = v.value === 1.0 ? \"True\" : \"False\";\r\n          } else if (k === \"Charge size\") {\r\n            let size = \"\";\r\n            if (v.value === 1.0) size = \"Small\";\r\n            else if (v.value === 2.0) size = \"Medium\";\r\n            else if (v.value === 3.0) size = \"Large\";\r\n            formattedValue = size;\r\n          }\r\n          return `${formattedValue} ${formattedUnit}`;\r\n        });\r\n        if(rowValues.every(v=>v===\"\u2014\")) return;\r\n        html += `<tr><td class=\"col-attr\">${k}<\/td>${rowValues.map(v=>`<td>${v}<\/td>`).join(\"\")}<\/tr>`;\r\n      });\r\n\r\n      html += '<\/tbody>';\r\n      els.compareTable.innerHTML = html;\r\n\r\n      els.compareTable.querySelectorAll('.remove-btn').forEach(btn=>{\r\n        btn.addEventListener('click', ()=>{\r\n          const id = Number(btn.getAttribute('data-typeid'));\r\n          removeFromCompare(id);\r\n        });\r\n      });\r\n\r\n      const chartSection = document.getElementById('chargeChartSection');\r\n      chartSection.innerHTML = `\r\n        <div class=\"attribute-toggles\">\r\n          ${[...statKeys].filter(attr => compared.every(c => typeof (c.stats?.[attr]?.value) === 'number' && !((attr === 'Mass' || attr === 'Mass Addition') && c.stats?.[attr]?.value === 0))).map(attr=>`<button class=\"${selectedChartAttributes.includes(attr)?\"active\":\"\"} ${attrCounts[attr]===1?\"unique\":\"\"}\">${attr}<\/button>`).join(\"\")}\r\n        <\/div>\r\n        <canvas id=\"chargeCompareChart\"><\/canvas>\r\n      `;\r\n\r\n      buildCompareChart(compared, selectedChartAttributes.filter(a => statKeys.has(a)));\r\n\r\n      chartSection.querySelectorAll('.attribute-toggles button').forEach(btn => {\r\n        btn.addEventListener('click', ()=>toggleAttribute(btn.textContent));\r\n      });\r\n    }\r\n\r\n    function buildCompareChart(selected, attributes) {\r\n      const ctx = document.getElementById(\"chargeCompareChart\").getContext(\"2d\");\r\n      const datasets = attributes.map(attr => ({\r\n        label: attr,\r\n        data: selected.map(c => c.stats?.[attr]?.value || 0),\r\n        backgroundColor: `hsl(${Math.random()*360},70%,50%)`\r\n      }));\r\n      if(window.chargeCompareChartInstance) window.chargeCompareChartInstance.destroy();\r\n      window.chargeCompareChartInstance = new Chart(ctx, {\r\n        type: 'bar',\r\n        data: {\r\n          labels: selected.map(c => c.name),\r\n          datasets: datasets\r\n        },\r\n        options: { responsive:true, plugins:{legend:{position:'bottom'}} }\r\n      });\r\n    }\r\n\r\n    const toggleAttribute = attr => {\r\n      selectedChartAttributes = selectedChartAttributes.includes(attr)\r\n        ? selectedChartAttributes.filter(a=>a!==attr)\r\n        : [...selectedChartAttributes, attr];\r\n      renderCompare();\r\n    };\r\n\r\n    function showToast(message) {\r\n      const toast = document.getElementById(\"toast\");\r\n      toast.textContent = message;\r\n      toast.className = \"show\";\r\n      setTimeout(() => toast.className = toast.className.replace(\"show\", \"\"), 2500);\r\n    }\r\n\r\n    els.search.addEventListener('input', () => renderList());\r\n\r\n    els.sortBtn.addEventListener('click', ()=>{\r\n      sortAsc = !sortAsc;\r\n      els.sortBtn.innerHTML = sortAsc\r\n        ? '<i class=\"fa fa-sort-alpha-asc\" aria-hidden=\"true\"><\/i>'\r\n        : '<i class=\"fa fa-sort-alpha-desc\" aria-hidden=\"true\"><\/i>';\r\n      renderList();\r\n    });\r\n\r\n    els.toggleGroups.addEventListener('click', () => {\r\n      allOpen = !allOpen;\r\n      document.querySelectorAll('.group').forEach(g => {\r\n        g.dataset.open = allOpen ? 'true' : 'false';\r\n        g.querySelector('.left i').className = allOpen ? 'fa fa-folder-open-o' : 'fa fa-folder-o';\r\n      });\r\n      els.toggleGroups.innerHTML = allOpen ? '<i class=\"fa fa-minus-square\" aria-hidden=\"true\"><\/i>' : '<i class=\"fa fa-plus-square\" aria-hidden=\"true\"><\/i>';\r\n    });\r\n\r\n    els.compareReset.addEventListener('click', ()=>{\r\n      compareList = [];\r\n      renderCompare();\r\n      showToast(\"Compare list reset.\");\r\n    });\r\n\r\n    window.addEventListener('hashchange', ()=>{\r\n      const m = location.hash.match(\/typeID-(\\d+)\/);\r\n      if(m) selectCharge(Number(m[1]));\r\n    });\r\n\r\n    load().then(()=>{\r\n      const m = location.hash.match(\/typeID-(\\d+)\/);\r\n      if(m) selectCharge(Number(m[1]));\r\n    });\r\n  })();\r\n  <\/script>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges side-by-side to optimize fittings, logistics, and survival strategies. Select a charge Browse all ammo charges using the sidebar to the left. Ammunition Dynamic Data Live: Charges.json Compare Reset Fetching data\u2026 \u2022 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":121,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-108","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools"],"yoast_head":"<!-- Meta Tags -->\r\n<title>EVE Frontier Charge \/ Ammo List<\/title>\r\n<meta name=\"description\" content=\"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges\" \/>\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\/evefrontier\/charge-ammo-list\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"EVE Frontier Charge \/ Ammo List\" \/>\r\n<meta property=\"og:description\" content=\"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\" \/>\r\n<meta property=\"og:site_name\" content=\"EVE Frontier\" \/>\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=\"2025-08-23T21:08:05+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-06-05T02:53:27+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-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\/evefrontier\/charge-ammo-list\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\"},\"author\":{\"name\":\"daopa\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"headline\":\"EVE Frontier Charge \/ Ammo List\",\"datePublished\":\"2025-08-23T21:08:05+00:00\",\"dateModified\":\"2026-06-05T02:53:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\"},\"wordCount\":60,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg\",\"articleSection\":[\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\",\"name\":\"EVE Frontier Charge \/ Ammo List\",\"isPartOf\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg\",\"datePublished\":\"2025-08-23T21:08:05+00:00\",\"dateModified\":\"2026-06-05T02:53:27+00:00\",\"description\":\"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges\",\"breadcrumb\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg\",\"width\":400,\"height\":263,\"caption\":\"eve frontier ammo charge database\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EVE Frontier Charge \/ Ammo List\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#website\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/\",\"name\":\"EVE Frontier\",\"description\":\"DaOpa&#039;s EVE Frontier Fansite - Guides, tools, databases, and lists to empower the EVE Frontier community in exploring the stars.\",\"publisher\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\"},\"alternateName\":\"evefrontier\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/?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\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638\",\"name\":\"daopa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png\",\"contentUrl\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png\",\"width\":90,\"height\":90,\"caption\":\"daopa\"},\"logo\":{\"@id\":\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/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\/evefrontier\/author\/daopa\/\"}]}<\/script>","yoast_head_json":{"title":"EVE Frontier Charge \/ Ammo List","description":"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges","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\/evefrontier\/charge-ammo-list\/","og_locale":"en_US","og_type":"article","og_title":"EVE Frontier Charge \/ Ammo List","og_description":"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges","og_url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/","og_site_name":"EVE Frontier","article_publisher":"facebook.com\/gamingwithdaopa\/","article_author":"facebook.com\/gamingwithdaopa\/","article_published_time":"2025-08-23T21:08:05+00:00","article_modified_time":"2026-06-05T02:53:27+00:00","og_image":[{"width":400,"height":263,"url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-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\/evefrontier\/charge-ammo-list\/#article","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/"},"author":{"name":"daopa","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"headline":"EVE Frontier Charge \/ Ammo List","datePublished":"2025-08-23T21:08:05+00:00","dateModified":"2026-06-05T02:53:27+00:00","mainEntityOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/"},"wordCount":60,"commentCount":1,"publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg","articleSection":["Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/","name":"EVE Frontier Charge \/ Ammo List","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg","datePublished":"2025-08-23T21:08:05+00:00","dateModified":"2026-06-05T02:53:27+00:00","description":"Explore the complete Ammo \/ Charge Database for EVE Frontier Cycle 5! Select any charge to uncover stats, build requirements, and details. Compare charges","breadcrumb":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#primaryimage","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-ammo-charge-database.jpg","width":400,"height":263,"caption":"eve frontier ammo charge database"},{"@type":"BreadcrumbList","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/charge-ammo-list\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/"},{"@type":"ListItem","position":2,"name":"EVE Frontier Charge \/ Ammo List"}]},{"@type":"WebSite","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#website","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/","name":"EVE Frontier","description":"DaOpa&#039;s EVE Frontier Fansite - Guides, tools, databases, and lists to empower the EVE Frontier community in exploring the stars.","publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"alternateName":"evefrontier","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/?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\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638","name":"daopa","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/image\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png","width":90,"height":90,"caption":"daopa"},"logo":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/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\/evefrontier\/author\/daopa\/"}]}},"_links":{"self":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts\/108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/comments?post=108"}],"version-history":[{"count":3,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts\/108\/revisions"}],"predecessor-version":[{"id":265,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts\/108\/revisions\/265"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/media\/121"}],"wp:attachment":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/media?parent=108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/categories?post=108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/tags?post=108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}