{"id":128,"date":"2025-08-24T22:58:17","date_gmt":"2025-08-24T22:58:17","guid":{"rendered":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/?p=128"},"modified":"2026-06-04T02:38:54","modified_gmt":"2026-06-04T02:38:54","slug":"blueprint-build-calculator","status":"publish","type":"post","link":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/","title":{"rendered":"EVE Frontier Blueprint and Build Calculator"},"content":{"rendered":"\r\n<div id=\"evefrontier-blueprints\" data-json=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/blueprints.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-blueprints{\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-blueprints::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      display:flex; flex-direction:column;\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      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{\r\n      color:var(--muted);\r\n    }\r\n    .search-icon{\r\n      color:#7d8798; display:flex; align-items:center; justify-content:center;\r\n    }\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{\r\n      overflow:auto; flex:1;\r\n      scrollbar-width:thin; scrollbar-color:#2b3242 transparent;\r\n    }\r\n    .group{\r\n      border-bottom:1px solid rgba(255,255,255,.04);\r\n    }\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;\r\n      grid-template-columns:42px 1fr auto;\r\n      gap:12px;\r\n      align-items:center;\r\n      padding:10px 12px;\r\n      border-bottom:1px solid rgba(255,255,255,.03);\r\n      background:transparent;\r\n      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    \/* Icon styles for cool EVE look *\/\r\n    .bp-icon, .bp-icon-large {\r\n      border-radius:6px;\r\n      border:1px solid #2a3144;\r\n      background:#0e1118;\r\n      object-fit:contain;\r\n      box-shadow:0 2px 8px rgba(0,0,0,.35);\r\n      flex-shrink:0;\r\n      image-rendering: crisp-edges;\r\n    }\r\n    .bp-icon { width:36px; height:36px; }\r\n    .bp-icon-large { width:96px; height:96px; border-width:2px; border-color:#39d0ff; box-shadow:0 0 18px rgba(57,208,255,.4), 0 6px 22px rgba(0,0,0,.5); }\r\n    .icon-frame {\r\n      width:120px; height:120px;\r\n      background:linear-gradient(145deg, #12141b, #0a0c10);\r\n      border:1px solid #263042;\r\n      border-radius:12px;\r\n      display:flex; align-items:center; justify-content:center;\r\n      overflow:hidden;\r\n      box-shadow: inset 0 0 0 1px rgba(255,255,255,.03), 0 6px 24px rgba(0,0,0,.45);\r\n      position:relative;\r\n    }\r\n    .icon-frame::after {\r\n      content:'';\r\n      position:absolute; inset:0;\r\n      background:radial-gradient(circle at 30% 25%, rgba(57,208,255,.12), transparent 60%);\r\n      pointer-events:none;\r\n    }\r\n    .placeholder {\r\n      display:flex; align-items:center; justify-content:center;\r\n      color:#4a5468; background:#0e1118; width:100%; height:100%;\r\n    }\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    .panel-grid{\r\n      display:grid; grid-template-columns: 1.2fr .8fr;\r\n      gap:16px;\r\n    }\r\n    @media (max-width: 1100px){\r\n      .panel-grid{ grid-template-columns:1fr }\r\n    }\r\n    \/* Holo header *\/\r\n    .holo{\r\n      display:grid; grid-template-columns:140px 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      box-shadow:inset 0 0 0 1px rgba(255,255,255,.02);\r\n    }\r\n    .wire{\r\n      width:100%; aspect-ratio:1\/1; background:radial-gradient(60% 60% at 50% 40%, rgba(57,208,255,.15), transparent 70%);\r\n      border-radius:10px; position:relative; overflow:hidden;\r\n    }\r\n    .wire svg{ position:absolute; inset:0 }\r\n    .wire .glow{\r\n      filter:drop-shadow(0 0 6px rgba(57,208,255,.85)) drop-shadow(0 0 18px rgba(0,255,168,.35));\r\n    }\r\n    @keyframes dash { to { stroke-dashoffset:-1200 } }\r\n    @keyframes ping { 0%{ opacity:.55; transform:scale(1) } 70%{ opacity:.1; transform:scale(1.08) } 100%{ opacity:.55; transform:scale(1) } }\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(4,1fr); gap:8px; margin-top:12px;\r\n    }\r\n    @media (max-width: 600px){ .quick{ grid-template-columns:repeat(2,1fr) } }\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; letter-spacing:.08em; 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    @media (max-width: 900px){ .stats{ grid-template-columns:1fr } }\r\n    .stat{\r\n      background:#0f131b; border:1px solid #1e2431; border-radius:10px; padding:10px;\r\n      display:flex; justify-content:space-between; gap:12px;\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    }\r\n    .bp h3{ margin-top:0 }\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    }\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    \/* Calculator *\/\r\n    .calculator{\r\n      margin-top:14px;\r\n      padding:12px; border:1px solid #263042; border-radius:12px;\r\n      background:linear-gradient(180deg,rgba(57,208,255,.05),rgba(0,255,168,.04));\r\n    }\r\n    .calculator input{\r\n      width:80px; background:#0e1118; border:1px solid #1e2430; color:#fff;\r\n      border-radius:10px; padding:8px 12px; outline:none;\r\n    }\r\n    .tree-view{\r\n      margin-top:12px; padding:10px; background:#0f131b; border:1px solid #1e2431; border-radius:10px;\r\n      max-height:400px; overflow:auto;\r\n    }\r\n    .tree-node{\r\n      margin-left:16px; position:relative;\r\n    }\r\n    .tree-node::before{\r\n      content:\"\"; position:absolute; left:-8px; top:0; bottom:0; width:1px; background:var(--muted); opacity:.35;\r\n    }\r\n    .tree-leaf{\r\n      display:flex; justify-content:space-between; padding:4px 0;\r\n    }\r\n    .total-time{ margin-top:8px; color:var(--accent); }\r\n    \/* Compare panel *\/\r\n    .compare-wrap{\r\n      margin-top:14px;\r\n    }\r\n    .compare-head{\r\n      display:flex; align-items:center; justify-content:space-between; gap:10px;\r\n      margin-bottom:8px;\r\n    }\r\n    .table-scroll{ overflow:auto; border:1px solid #223043; border-radius:10px }\r\n    .compare-table{\r\n      width:100%; border-collapse:separate; border-spacing:0;\r\n      min-width:720px;\r\n    }\r\n    .compare-table th, .compare-table td{\r\n      padding:10px; border-bottom:1px solid #1e2a3c; text-align:left; vertical-align:top;\r\n      background:#0e1219;\r\n    }\r\n    .compare-table thead th{\r\n      position:sticky; top:0; background:#151a24; z-index:1;\r\n    }\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; left:0; right:0;\r\n      margin-top:12px; padding:10px 12px;\r\n      background:linear-gradient(180deg, transparent, rgba(10,12,16,.9));\r\n      border-top:1px solid #1f2532; backdrop-filter:blur(6px);\r\n      display:flex; justify-content:space-between; gap:12px; align-items:center;\r\n      font-size:12px; color:var(--muted);\r\n    }\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    \/* 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 {\r\n      visibility: visible;\r\n      opacity: 1;\r\n      transform: translateY(0);\r\n    }\r\n  <\/style>\r\n  <p class=\"lede\">Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator &#038; Calculator! Select blueprints to view details with beautiful icons, then use the calculator to plan builds with recursive material breakdowns, total costs, and times. Compare blueprints side-by-side, visualize material pies with charts, and export plans. Craft your empire in the void\u2014every blueprint is a step to dominance!<\/p>\r\n  <div class=\"shell\">\r\n    <!-- SIDEBAR -->\r\n    <aside class=\"sidebar\" id=\"blueprint-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=\"searchBox\" type=\"search\" placeholder=\"Search blueprint 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=\"toggleGroups\" 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=\"blueprint-list\"><\/div>\r\n    <\/aside>\r\n    <!-- DETAILS -->\r\n    <section class=\"panel\" id=\"blueprint-detail\">\r\n      <div id=\"detail\">\r\n        <!-- Placeholder before selection -->\r\n        <div class=\"holo\" aria-live=\"polite\">\r\n          <div class=\"wire\">\r\n            <svg viewBox=\"0 0 200 200\" role=\"img\" aria-label=\"Holographic placeholder\">\r\n              <defs>\r\n                <linearGradient id=\"grad\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"1\">\r\n                  <stop offset=\"0%\" stop-color=\"#39d0ff\" stop-opacity=\"1\"\/>\r\n                  <stop offset=\"100%\" stop-color=\"#00ffa8\" stop-opacity=\"1\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <polygon points=\"100,18 182,78 156,182 44,182 18,78\"\r\n                fill=\"none\" stroke=\"url(#grad)\" stroke-width=\"2\"\r\n                stroke-dasharray=\"8 6\" style=\"animation:dash 12s linear infinite\"\r\n                class=\"glow\"\/>\r\n              <circle cx=\"100\" cy=\"100\" r=\"70\" fill=\"none\" stroke=\"url(#grad)\" stroke-opacity=\".35\" stroke-width=\"1\" style=\"animation:ping 4.5s ease-in-out infinite\"\/>\r\n            <\/svg>\r\n          <\/div>\r\n          <div class=\"title\">\r\n            <h2>Select a blueprint<\/h2>\r\n            <div class=\"sub\">Browse all blueprints from EVE Frontier Cycle 5. Icons now live!<\/div>\r\n            <div class=\"chips\">\r\n              <span class=\"badge\"><i class=\"fa fa-plug\"><\/i> Recursive Calc<\/span>\r\n              <span class=\"badge\"><i class=\"fa fa-bolt\"><\/i> Charts<\/span>\r\n              <span class=\"badge\"><i class=\"fa fa-industry\"><\/i> Build Tree<\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"tag\"><i class=\"fa fa-database\"><\/i> Live: blueprints.json + icons<\/div>\r\n        <\/div>\r\n        <div class=\"quick\">\r\n          <div class=\"q\"><div>Time<\/div><strong>\u2014<\/strong><\/div>\r\n          <div class=\"q\"><div>Materials<\/div><strong>\u2014<\/strong><\/div>\r\n          <div class=\"q\"><div>Products<\/div><strong>\u2014<\/strong><\/div>\r\n          <div class=\"q\"><div>Max Limit<\/div><strong>\u2014<\/strong><\/div>\r\n        <\/div>\r\n        <div class=\"bp\">\r\n          <h3><i class=\"fa fa-cogs\"><\/i> Blueprint<\/h3>\r\n          <div class=\"faint\">Details will appear when selected.<\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <!-- CALCULATOR -->\r\n      <div id=\"calculatorWrap\" class=\"calculator\" style=\"display:none;\">\r\n        <h3><i class=\"fa fa-calculator\"><\/i> Build Calculator<\/h3>\r\n        <div style=\"display:flex; gap:10px; align-items:center\">\r\n          <label>Quantity:<\/label>\r\n          <input type=\"number\" id=\"buildQty\" min=\"1\" value=\"1\">\r\n          <button class=\"btn-mini\" id=\"calcBtn\"><i class=\"fa fa-play\"><\/i> Calculate<\/button>\r\n          <button class=\"btn-mini\" id=\"exportBtn\"><i class=\"fa fa-download\"><\/i> Export<\/button>\r\n          <button class=\"btn-mini\" id=\"resetBtn\"><i class=\"fa fa-refresh\"><\/i> Reset<\/button>\r\n        <\/div>\r\n        <div class=\"tree-view\" id=\"buildTree\"><\/div>\r\n        <div class=\"total-time\" id=\"totalTime\"><\/div>\r\n        <div id=\"totalMaterials\"><\/div>\r\n      <\/div>\r\n      <!-- COMPARE -->\r\n      <div id=\"compareWrap\" 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=\"compareReset\" 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=\"compareTable\" aria-live=\"polite\"><\/table>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"status\">\r\n        <span id=\"statusText\">Fetching data\u2026<\/span>\r\n        <span><span class=\"sep\">\u2022<\/span> <span id=\"count\">0<\/span> blueprints loaded<\/span>\r\n      <\/div>\r\n    <\/section>\r\n  <\/div>\r\n  <!-- Load local Chart.js -->\r\n  <script src=\"https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/chart.js\"><\/script>\r\n  <div id=\"toast\"><\/div>\r\n  <script>\r\n  (async function() {\r\n    const root = document.getElementById('evefrontier-blueprints');\r\n    const JSON_URL = root.getAttribute('data-json');\r\n    const els = {\r\n      list: document.getElementById('blueprint-list'),\r\n      detail: document.getElementById('detail'),\r\n      search: document.getElementById('searchBox'),\r\n      sortBtn: document.getElementById('sortBtn'),\r\n      toggleGroups: document.getElementById('toggleGroups'),\r\n      status: document.getElementById('statusText'),\r\n      count: document.getElementById('count'),\r\n      calculatorWrap: document.getElementById('calculatorWrap'),\r\n      buildQty: document.getElementById('buildQty'),\r\n      calcBtn: document.getElementById('calcBtn'),\r\n      exportBtn: document.getElementById('exportBtn'),\r\n      resetBtn: document.getElementById('resetBtn'),\r\n      buildTree: document.getElementById('buildTree'),\r\n      totalTime: document.getElementById('totalTime'),\r\n      totalMaterials: document.getElementById('totalMaterials'),\r\n      compareWrap: document.getElementById('compareWrap'),\r\n      compareTable: document.getElementById('compareTable'),\r\n      compareReset: document.getElementById('compareReset'),\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    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), sec = s % 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) parts.push(`${m}m`);\r\n      if (sec || (!d && !h && !m)) parts.push(`${sec}s`);\r\n      return parts.join(\" \");\r\n    };\r\n    const prefer = (obj, keys) => {\r\n      for (const k of keys){ if (obj && obj[k]) return obj[k]; }\r\n      return null;\r\n    };\r\n    \/** Icon helper - NOW WITH graphicID FALLBACK (g + graphicID) **\/\r\n    const ICON_BASE = 'https:\/\/gamingwithdaopa.ellatha.com\/media\/evefrontier\/icons\/';\r\n    function getIconHTML(bp, size = 'small') {\r\n      const cls = size === 'large' ? 'bp-icon-large' : 'bp-icon';\r\n      if (!bp) {\r\n        const phStyle = size === 'large' ? 'width:96px;height:96px;font-size:42px;' : 'width:36px;height:36px;';\r\n        return `<div class=\"${cls} placeholder\" style=\"${phStyle}\"><i class=\"fa fa-drafting-compass\"><\/i><\/div>`;\r\n      }\r\n      let iconFile = null;\r\n      if (bp.iconID) {\r\n        iconFile = `${bp.iconID}.png`;\r\n      } else if (bp.graphicID) {\r\n        iconFile = `g${bp.graphicID}.png`;\r\n      }\r\n      if (iconFile) {\r\n        const safeName = (bp.name || 'Blueprint').replace(\/\"\/g, '&quot;');\r\n        return `<img decoding=\"async\" class=\"${cls}\" src=\"${ICON_BASE}${iconFile}\" alt=\"${safeName} icon\" loading=\"lazy\" \/>`;\r\n      }\r\n      const phStyle = size === 'large' ? 'width:96px;height:96px;font-size:42px;' : 'width:36px;height:36px;';\r\n      return `<div class=\"${cls} placeholder\" style=\"${phStyle}\"><i class=\"fa fa-drafting-compass\"><\/i><\/div>`;\r\n    }\r\n    \/** Group order **\/\r\n    const GROUP_RANK = {\r\n      \"Refinery\":1,\r\n      \"Printer\":2,\r\n      \"Assembler\":3,\r\n      \"Binder\":4,\r\n      \"Shipyard\":5,\r\n      \"Other\":99\r\n    };\r\n    const rankGroup = (g) => GROUP_RANK[g] ?? 98;\r\n    \/** State **\/\r\n    let blueprints = [];\r\n    let bpMap = new Map(); \/\/ recipeKey -> blueprint\r\n    let recipesByTypeID = new Map(); \/\/ typeID -> [blueprint variants]\r\n    let itemMap = new Map();\r\n    let producedBy = new Map(); \/\/ item typeID -> [{recipeKey, yield, time}]\r\n    let sortAsc = true;\r\n    let activeRecipeKey = null;\r\n    let compareList = [];\r\n    let allOpen = false;\r\n    \/** Fetch **\/\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.blueprints)) throw new Error('Invalid JSON: missing \"blueprints\" array');\r\n        blueprints = data.blueprints;\r\n\r\n        \/\/ Build maps with support for multiple recipe variants\r\n        blueprints.forEach((bp, idx) => {\r\n          bp._recipeKey = `${bp.typeID}_${idx}`;\r\n          bpMap.set(bp._recipeKey, bp);\r\n          if (!recipesByTypeID.has(bp.typeID)) recipesByTypeID.set(bp.typeID, []);\r\n          recipesByTypeID.get(bp.typeID).push(bp);\r\n        });\r\n\r\n        \/\/ Build itemMap and producedBy (now using _recipeKey)\r\n        for (const bp of blueprints){\r\n          const build = bp.build || {};\r\n          const act = build.activities?.manufacturing;\r\n          const time = act?.time || build.time || 0;\r\n          const products = act?.products || (build.manufactures ? [{typeID: build.manufactures.typeID, quantity: build.manufactures.quantity, name: build.manufactures.name}] : []);\r\n          for (const p of products){\r\n            if (p.name) itemMap.set(p.typeID, p.name);\r\n            if (!producedBy.has(p.typeID)) producedBy.set(p.typeID, []);\r\n            \/\/ Store recipeKey instead of typeID for correct variant resolution\r\n            producedBy.get(p.typeID).push({recipeKey: bp._recipeKey, yield: p.quantity, time});\r\n          }\r\n          const materials = act?.materials || build.materials || [];\r\n          for (const m of materials){\r\n            if (m.name) itemMap.set(m.typeID, m.name);\r\n          }\r\n        }\r\n        els.count.textContent = blueprints.length;\r\n        els.status.textContent = 'Ready';\r\n        renderList();\r\n        showDashboard();\r\n      }catch(err){\r\n        console.error(err);\r\n        els.status.innerHTML = `Could not fetch <span class=\"mono\">blueprints.json<\/span>.`;\r\n        els.list.innerHTML = `<div style=\"padding:12px;color:#ff9a9a\">Error: ${err.message}<\/div>`;\r\n      }\r\n    }\r\n    \/** Grouped list with variant support **\/\r\n    function renderList(){\r\n      const q = els.search.value?.trim().toLowerCase() || '';\r\n      const filtered = blueprints.filter(b => {\r\n        const name = (b.name||'').toLowerCase();\r\n        const typeID = String(b.typeID||'');\r\n        const groupStr = (b.group || '').toLowerCase();\r\n        return name.includes(q) || typeID.includes(q) || groupStr.includes(q);\r\n      });\r\n      const map = new Map();\r\n      for (const b of filtered){\r\n        const group = b.group || 'Other';\r\n        if (!map.has(group)) map.set(group, []);\r\n        map.get(group).push(b);\r\n      }\r\n      const groups = Array.from(map.entries())\r\n        .sort(([ga],[gb]) => (rankGroup(ga) - rankGroup(gb)) || ga.localeCompare(gb));\r\n      els.list.innerHTML = '';\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        const section = document.createElement('div');\r\n        section.className = 'group';\r\n        section.dataset.open = 'false';\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        const items = document.createElement('div');\r\n        items.className = 'group-items';\r\n        for (const b of arr){\r\n          const variants = recipesByTypeID.get(b.typeID) || [];\r\n          const variantIndex = variants.indexOf(b);\r\n          const variantBadge = variants.length > 1 \r\n            ? `<span class=\"badge\" style=\"background:#2a2f3d; margin-left:6px\">Variant ${variantIndex + 1}\/${variants.length}<\/span>` \r\n            : '';\r\n          const btn = document.createElement('div');\r\n          btn.className = 'item' + (b._recipeKey === activeRecipeKey ? ' active' : '');\r\n          btn.dataset.recipeKey = b._recipeKey;\r\n          const iconHTML = getIconHTML(b);\r\n          btn.innerHTML = `\r\n            ${iconHTML}\r\n            <div>\r\n              <div class=\"name\">${b.name || 'Unnamed Blueprint'}${variantBadge}<\/div>\r\n              <div class=\"chips\" style=\"margin-top:6px\">\r\n                <span class=\"badge\" title=\"Group\"><i class=\"fa fa-tags\"><\/i> ${b.group || '\u2014'}<\/span>\r\n                ${b.build?.time != null ? `<span class=\"badge\"><i class=\"fa fa-clock-o\"><\/i> ${secsToHMS(b.build.time)}<\/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.classList.contains('fa-plus-circle')) return;\r\n            selectRecipe(btn.dataset.recipeKey);\r\n          });\r\n          btn.querySelector('.fa-plus-circle').addEventListener('click', (e) => {\r\n            e.stopPropagation();\r\n            addToCompare(btn.dataset.recipeKey);\r\n          });\r\n          items.appendChild(btn);\r\n        }\r\n        section.appendChild(title);\r\n        section.appendChild(items);\r\n        els.list.appendChild(section);\r\n      }\r\n      if (activeRecipeKey) {\r\n        const activeItem = els.list.querySelector(`.item[data-recipe-key=\"${activeRecipeKey}\"]`);\r\n        if (activeItem) activeItem.classList.add('active');\r\n      }\r\n    }\r\n    function showDashboard() {\r\n      const totalBps = blueprints.length;\r\n      const groupMap = {};\r\n      blueprints.forEach(b => {\r\n        const g = b.group || 'Other';\r\n        groupMap[g] = (groupMap[g] || 0) + 1;\r\n      });\r\n      const groupCounts = Object.entries(groupMap).map(([k,v]) => ({group:k,count:v})).sort((a,b)=>b.count-a.count);\r\n      const random = blueprints[Math.floor(Math.random()*blueprints.length)];\r\n      const featIcon = getIconHTML(random);\r\n      els.detail.innerHTML = `\r\n        <div class=\"holo\" aria-live=\"polite\">\r\n          <div class=\"wire\">\r\n            <svg viewBox=\"0 0 200 200\" role=\"img\" aria-label=\"Holographic placeholder\">\r\n              <defs>\r\n                <linearGradient id=\"grad\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"1\">\r\n                  <stop offset=\"0%\" stop-color=\"#39d0ff\" stop-opacity=\"1\"\/>\r\n                  <stop offset=\"100%\" stop-color=\"#00ffa8\" stop-opacity=\"1\"\/>\r\n                <\/linearGradient>\r\n              <\/defs>\r\n              <polygon points=\"100,18 182,78 156,182 44,182 18,78\"\r\n                fill=\"none\" stroke=\"url(#grad)\" stroke-width=\"2\"\r\n                stroke-dasharray=\"8 6\" style=\"animation:dash 12s linear infinite\"\r\n                class=\"glow\"\/>\r\n              <circle cx=\"100\" cy=\"100\" r=\"70\" fill=\"none\" stroke=\"url(#grad)\" stroke-opacity=\".35\" stroke-width=\"1\" style=\"animation:ping 4.5s ease-in-out infinite\"\/>\r\n            <\/svg>\r\n          <\/div>\r\n          <div class=\"title\">\r\n            <h2>EVE Frontier Cycle 5 Blueprint Explorer<\/h2>\r\n            <div class=\"sub\">Explore ${totalBps} blueprints and plan your builds. Icons powered by live data!<\/div>\r\n            <div class=\"chips\">\r\n              <span class=\"badge\"><i class=\"fa fa-plug\"><\/i> Dynamic Data<\/span>\r\n              <span class=\"badge\"><i class=\"fa fa-bolt\"><\/i> Animated SVG<\/span>\r\n              <span class=\"badge\"><i class=\"fa fa-industry\"><\/i> Recursive Calc<\/span>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"tag\"><i class=\"fa fa-database\"><\/i> Live: blueprints.json + icons<\/div>\r\n        <\/div>\r\n        <canvas id=\"groupChart\" style=\"margin-top:16px;\"><\/canvas>\r\n        <h3 class=\"section-title\">Featured Blueprint<\/h3>\r\n        <div style=\"display:flex; gap:14px; align-items:flex-start; margin:8px 0 4px;\">\r\n          ${featIcon}\r\n          <div style=\"flex:1; min-width:0;\">\r\n            <p style=\"margin:0 0 4px\"><strong>${random.name}<\/strong> <span class=\"faint\">(${random.group})<\/span><\/p>\r\n            ${random.description ? `<p style=\"margin:0; font-size:13px; color:var(--muted); line-height:1.45\">${random.description.length > 210 ? random.description.substring(0,207)+'\u2026' : random.description}<\/p>` : ''}\r\n            ${random.build?.time ? `<div style=\"margin-top:6px\"><span class=\"badge\"><i class=\"fa fa-clock-o\"><\/i> ${secsToHMS(random.build.time)}<\/span><\/div>` : \"\"}\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n      const ctx = document.getElementById(\"groupChart\").getContext(\"2d\");\r\n      new Chart(ctx, {\r\n        type: 'pie',\r\n        data: {\r\n          labels: groupCounts.map(g=>g.group),\r\n          datasets: [{ data:groupCounts.map(g=>g.count), backgroundColor: groupCounts.map(()=>`hsl(${Math.random()*360},70%,50%)`) }]\r\n        },\r\n        options:{ responsive:true, plugins:{legend:{position:'right'}} }\r\n      });\r\n    }\r\n    \/** Detail view - now uses specific recipe variant **\/\r\n    function selectRecipe(recipeKey){\r\n      activeRecipeKey = recipeKey;\r\n      const bp = bpMap.get(recipeKey);\r\n      if(!bp) return;\r\n      const build = bp.build || {};\r\n      const mats = build.activities?.manufacturing?.materials || build.materials || [];\r\n      const prods = build.activities?.manufacturing?.products || [build.manufactures] || [];\r\n      const time = build.time || build.activities?.manufacturing?.time || null;\r\n      const maxLimit = build.maxProductionLimit || '\u2014';\r\n      const iconHTML = getIconHTML(bp, 'large');\r\n      const variants = recipesByTypeID.get(bp.typeID) || [];\r\n      const variantInfo = variants.length > 1 \r\n        ? `<span class=\"badge\" style=\"background:#2a2f3d\">Variant ${variants.indexOf(bp) + 1} of ${variants.length}<\/span>` \r\n        : '';\r\n      els.detail.innerHTML = `\r\n        <div class=\"holo\">\r\n          <div class=\"icon-frame\">\r\n            ${iconHTML}\r\n          <\/div>\r\n          <div class=\"title\">\r\n            <h2>${bp.name || 'Unnamed Blueprint'} ${variantInfo}<\/h2>\r\n            <div class=\"sub\">${bp.description || 'No description.'}<\/div>\r\n            <div class=\"chips\">\r\n              ${bp.group ? `<span class=\"badge\"><i class=\"fa fa-tags\"><\/i> ${bp.group}<\/span>`:''}\r\n              ${time!=null ? `<span class=\"badge\"><i class=\"fa fa-clock-o\"><\/i> ${secsToHMS(time)}<\/span>`:''}\r\n              ${bp.techLevel!=null ? `<span class=\"badge\">Tech: ${bp.techLevel}<\/span>`:''}\r\n              ${bp.metaLevel!=null ? `<span class=\"badge\">Meta: ${bp.metaLevel}<\/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\">${bp.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        <div class=\"quick\">\r\n          <div class=\"q\"><div>Build Time<\/div><strong>${time!=null ? secsToHMS(time) : '\u2014'}<\/strong><\/div>\r\n          <div class=\"q\"><div>Materials<\/div><strong>${mats.length}<\/strong><\/div>\r\n          <div class=\"q\"><div>Products<\/div><strong>${prods.length}<\/strong><\/div>\r\n          <div class=\"q\"><div>Max Limit<\/div><strong>${fmtNum(maxLimit)}<\/strong><\/div>\r\n        <\/div>\r\n        <div style=\"height:8px\"><\/div>\r\n        <div class=\"bp\">\r\n          <h3><i class=\"fa fa-cogs\"><\/i> Blueprint Details<\/h3>\r\n          ${bp.basePrice!=null? `<span class=\"tag\">Base Price: ${fmtNum(bp.basePrice)} ISK<\/span>`:''}\r\n          <div style=\"height:8px\"><\/div>\r\n          <h4>Materials<\/h4>\r\n          <div class=\"materials\">\r\n            ${mats.length ? mats.map(m=>`\r\n              <div>${m.name || m.typeID}<\/div>\r\n              <div style=\"text-align:right\">${fmtNum(m.quantity)}<\/div>\r\n            `).join('') : '<div class=\"faint\">No materials.<\/div>'}\r\n          <\/div>\r\n          <h4>Products<\/h4>\r\n          <div class=\"materials\">\r\n            ${prods.map(p=>`\r\n              <div>${p.name || p.typeID}<\/div>\r\n              <div style=\"text-align:right\">${fmtNum(p.quantity)}<\/div>\r\n            `).join('')}\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n      els.calculatorWrap.style.display = 'block';\r\n      document.getElementById('btnAddCompare')?.addEventListener('click', ()=>addToCompare(recipeKey));\r\n      for (const el of document.querySelectorAll('.item')) el.classList.remove('active');\r\n      const activeBtn = els.list.querySelector(`.item[data-recipe-key=\"${recipeKey}\"]`);\r\n      if (activeBtn) activeBtn.classList.add('active');\r\n      els.detail.parentElement.scrollTo({top:0, behavior:'smooth'});\r\n    }\r\n    \/** Calculator - FIXED to properly support variants and show Raw vs Components **\/\r\n    function calculateBuild(bpOrKey, qty=1, depth=0, totals=new Map(), path = new Set()){\r\n      const key = (typeof bpOrKey === 'object' && bpOrKey !== null) ? bpOrKey._recipeKey : bpOrKey;\r\n      if (path.has(key)) {\r\n        console.error('Cycle detected in blueprint dependencies');\r\n        showToast('Cycle detected in dependencies! Calculation aborted.');\r\n        return {materials:[], time:0};\r\n      }\r\n      path.add(key);\r\n      let bp;\r\n      if (typeof bpOrKey === 'object' && bpOrKey !== null) {\r\n        bp = bpOrKey;\r\n      } else {\r\n        bp = bpMap.get(key);\r\n      }\r\n      if(!bp) {\r\n        path.delete(key);\r\n        return {materials:[], time:0};\r\n      }\r\n      const build = bp.build || {};\r\n      const time = (build.time || build.activities?.manufacturing?.time || 0) * qty;\r\n      const mats = build.activities?.manufacturing?.materials || build.materials || [];\r\n      const subMats = [];\r\n      for (const m of mats) {\r\n        const mQty = m.quantity * qty;\r\n        const matKey = m.typeID;\r\n        totals.set(matKey, (totals.get(matKey) || 0) + mQty);\r\n        const subBps = producedBy.get(matKey) || [];\r\n        let sub = {materials:[], time:0};\r\n        if (subBps.length > 0) {\r\n          \/\/ Pick best recipe variant (highest yield per time)\r\n          let best = subBps.reduce((a, b) => (a.yield \/ (a.time || 1) > b.yield \/ (b.time || 1) ? a : b), subBps[0]);\r\n          if (best && best.recipeKey) {\r\n            const runs = Math.ceil(mQty \/ best.yield);\r\n            sub = calculateBuild(best.recipeKey, runs, depth+1, totals, path);\r\n          }\r\n        }\r\n        subMats.push({name: m.name || m.typeID, qty: mQty, sub: sub.materials, time: sub.time});\r\n      }\r\n      path.delete(key);\r\n      return {materials: subMats, time};\r\n    }\r\n    function renderBuildTree(mats, el, depth=0){\r\n      mats.forEach(m => {\r\n        const node = document.createElement('div');\r\n        node.className = 'tree-node';\r\n        node.style.marginLeft = `${depth*16}px`;\r\n        node.innerHTML = `<div class=\"tree-leaf\"><span>${m.name}<\/span><span>${fmtNum(m.qty)}<\/span><\/div>`;\r\n        el.appendChild(node);\r\n        if(m.sub && m.sub.length) renderBuildTree(m.sub, node, depth+1);\r\n      });\r\n    }\r\n    els.calcBtn.addEventListener('click', ()=>{\r\n      if(!activeRecipeKey) return showToast('Select a blueprint first.');\r\n      const bp = bpMap.get(activeRecipeKey);\r\n      if (!bp) return showToast('Blueprint not found.');\r\n      const qty = Number(els.buildQty.value) || 1;\r\n      const totals = new Map();\r\n      const {materials, time:totalTime} = calculateBuild(bp, qty, 0, totals);\r\n      els.buildTree.innerHTML = '';\r\n      renderBuildTree(materials, els.buildTree);\r\n      els.totalTime.textContent = `Total Build Time: ${secsToHMS(totalTime)}`;\r\n      let totalHtml = '<h4>Total Materials Required<\/h4>';\r\n      const raw = [], components = [];\r\n      for (const [key, q] of [...totals].sort((a,b)=> (itemMap.get(a[0])||a[0]).localeCompare(itemMap.get(b[0])||b[0]) )) {\r\n        const name = itemMap.get(key) || key;\r\n        const entry = `<div>${name}<\/div><div style=\"text-align:right\">${fmtNum(q)}<\/div>`;\r\n        if (producedBy.has(key)) {\r\n          components.push(entry);\r\n        } else {\r\n          raw.push(entry);\r\n        }\r\n      }\r\n      if (components.length) {\r\n        totalHtml += '<h5>Components<\/h5><div class=\"materials\">' + components.join('') + '<\/div>';\r\n      }\r\n      if (raw.length) {\r\n        totalHtml += '<h5>Raw Materials<\/h5><div class=\"materials\">' + raw.join('') + '<\/div>';\r\n      }\r\n      els.totalMaterials.innerHTML = totalHtml;\r\n      showToast(`Calculated for ${qty} units!`);\r\n    });\r\n    els.resetBtn.addEventListener('click', ()=>{\r\n      els.buildTree.innerHTML = '';\r\n      els.totalTime.textContent = '';\r\n      els.totalMaterials.innerHTML = '';\r\n      showToast('Calculator reset!');\r\n    });\r\n    els.exportBtn.addEventListener('click', ()=>{\r\n      if(!activeRecipeKey) return showToast('Select a blueprint first.');\r\n      const bp = bpMap.get(activeRecipeKey);\r\n      if (!bp) return;\r\n      const qty = Number(els.buildQty.value) || 1;\r\n      const totals = new Map();\r\n      calculateBuild(bp, qty, 0, totals);\r\n      const materials = [...totals].map(([typeID, quantity]) => ({\r\n        typeID,\r\n        name: itemMap.get(typeID) || typeID,\r\n        quantity\r\n      })).sort((a,b)=> a.name.localeCompare(b.name));\r\n      const total_sum = materials.reduce((sum, m) => sum + m.quantity, 0);\r\n      const json = JSON.stringify({materials, total_time: secsToHMS(calculateBuild(bp, qty, 0, new Map()).time), total_items: total_sum}, null, 2);\r\n      navigator.clipboard.writeText(json).then(()=>showToast('Exported to clipboard!'));\r\n    });\r\n    \/** Compare **\/\r\n    function addToCompare(recipeKey){\r\n      if (!compareList.includes(recipeKey)){\r\n        if (compareList.length >= 3) return showToast('Max 3 for compare.');\r\n        compareList.push(recipeKey);\r\n        renderCompare();\r\n        showToast(\"Added to compare!\");\r\n      } else showToast(\"Already added.\");\r\n    }\r\n    function removeFromCompare(recipeKey){\r\n      compareList = compareList.filter(k => k !== recipeKey);\r\n      renderCompare();\r\n    }\r\n    function renderCompare(){\r\n      if (!compareList.length){\r\n        els.compareWrap.style.display = 'none';\r\n        return;\r\n      }\r\n      els.compareWrap.style.display = 'block';\r\n      const compared = compareList.map(key => bpMap.get(key)).filter(Boolean);\r\n      let html = '<thead><tr><th class=\"col-attr\">Attribute<\/th>';\r\n      for (const b of compared){\r\n        const cIcon = getIconHTML(b);\r\n        const variants = recipesByTypeID.get(b.typeID) || [];\r\n        const vLabel = variants.length > 1 ? ` <span class=\"badge\" style=\"font-size:9px;background:#2a2f3d\">V${variants.indexOf(b)+1}<\/span>` : '';\r\n        html += `<th>\r\n          <div style=\"display:flex; align-items:center; justify-content:space-between; gap:8px\">\r\n            <div style=\"display:flex; align-items:center; gap:8px; flex:1; min-width:0;\">\r\n              ${cIcon}\r\n              <div style=\"overflow:hidden\">\r\n                <div style=\"font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;\">${b.name || '\u2014'}${vLabel}<\/div>\r\n                <div class=\"faint mono\" style=\"font-size:10px; line-height:1\">typeID: ${b.typeID}<\/div>\r\n              <\/div>\r\n            <\/div>\r\n            <span class=\"remove-btn\" title=\"Remove\" data-recipekey=\"${b._recipeKey}\"><i class=\"fa fa-times\"><\/i><\/span>\r\n          <\/div>\r\n        <\/th>`;\r\n      }\r\n      html += '<\/tr><\/thead><tbody>';\r\n      const rows = [\r\n        {label:'Name', get:b=>b.name||'\u2014'},\r\n        {label:'Group', get:b=>b.group||'\u2014'},\r\n        {label:'Build Time', get:b=>secsToHMS(b.build?.time||0)},\r\n        {label:'Materials Count', get:b=>(b.build?.materials||[]).length},\r\n        {label:'Products Count', get:b=>(b.build?.activities?.manufacturing?.products||[]).length},\r\n        {label:'Max Production Limit', get:b=>fmtNum(b.build?.maxProductionLimit||'\u2014')},\r\n      ];\r\n      for (const r of rows){\r\n        html += `<tr><td class=\"col-attr\">${r.label}<\/td>${compared.map(b=>`<td>${r.get(b)}<\/td>`).join('')}<\/tr>`;\r\n      }\r\n      html += '<\/tbody>';\r\n      els.compareTable.innerHTML = html;\r\n      els.compareTable.querySelectorAll('.remove-btn').forEach(btn=>{\r\n        btn.addEventListener('click', ()=>{\r\n          removeFromCompare(btn.dataset.recipekey);\r\n        });\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    \/** Events **\/\r\n    els.search.addEventListener('input', renderList);\r\n    els.sortBtn.addEventListener('click', ()=>{\r\n      sortAsc = !sortAsc;\r\n      els.sortBtn.innerHTML = sortAsc ? '<i class=\"fa fa-sort-alpha-asc\"><\/i>' : '<i class=\"fa fa-sort-alpha-desc\"><\/i>';\r\n      renderList();\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;\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\"><\/i>' : '<i class=\"fa fa-plus-square\"><\/i>';\r\n    });\r\n    els.compareReset.addEventListener('click', ()=>{\r\n      compareList = [];\r\n      renderCompare();\r\n      showToast(\"Compare reset.\");\r\n    });\r\n    load();\r\n  })();\r\n  <\/script>\r\n<\/div>\r\n","protected":false},"excerpt":{"rendered":"<p>Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator &#038; Calculator! Select blueprints to view details with beautiful icons, then use the calculator to plan builds with recursive material breakdowns, total costs, and times. Compare blueprints side-by-side, visualize material pies with charts, and export plans. Craft your empire in the void\u2014every blueprint [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-128","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools"],"yoast_head":"<title>EVE Frontier Blueprint and Build Calculator<\/title>\r\n<meta name=\"description\" content=\"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator &amp; Calculator! Select blueprints to view details with beautiful icons, then use the\" \/>\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\/blueprint-build-calculator\/\" \/>\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 Blueprint and Build Calculator\" \/>\r\n<meta property=\"og:description\" content=\"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator &amp; Calculator! Select blueprints to view details with beautiful icons, then use the\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/\" \/>\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-24T22:58:17+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2026-06-04T02:38:54+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.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\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/\"},\"author\":{\"name\":\"daopa\",\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/#\\\/schema\\\/person\\\/fb03a927907d90f409fac550ba375638\"},\"headline\":\"EVE Frontier Blueprint and Build Calculator\",\"datePublished\":\"2025-08-24T22:58:17+00:00\",\"dateModified\":\"2026-06-04T02:38:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/\"},\"wordCount\":110,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/#\\\/schema\\\/person\\\/fb03a927907d90f409fac550ba375638\"},\"image\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/eve-frontier-blueprint-and-build-calculator.jpg\",\"articleSection\":[\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/\",\"url\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/\",\"name\":\"EVE Frontier Blueprint and Build Calculator\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/eve-frontier-blueprint-and-build-calculator.jpg\",\"datePublished\":\"2025-08-24T22:58:17+00:00\",\"dateModified\":\"2026-06-04T02:38:54+00:00\",\"description\":\"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator & Calculator! Select blueprints to view details with beautiful icons, then use the\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#primaryimage\",\"url\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/eve-frontier-blueprint-and-build-calculator.jpg\",\"contentUrl\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/eve-frontier-blueprint-and-build-calculator.jpg\",\"width\":400,\"height\":263,\"caption\":\"eve frontier blueprint and build calculator\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/blueprint-build-calculator\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gamingwithdaopa.ellatha.com\\\/evefrontier\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"EVE Frontier Blueprint and Build Calculator\"}]},{\"@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\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/90-90-Logo.png\",\"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\\\/wp-content\\\/uploads\\\/sites\\\/40\\\/2025\\\/08\\\/90-90-Logo.png\"},\"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 Blueprint and Build Calculator","description":"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator & Calculator! Select blueprints to view details with beautiful icons, then use the","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\/blueprint-build-calculator\/","og_locale":"en_US","og_type":"article","og_title":"EVE Frontier Blueprint and Build Calculator","og_description":"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator & Calculator! Select blueprints to view details with beautiful icons, then use the","og_url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/","og_site_name":"EVE Frontier","article_publisher":"facebook.com\/gamingwithdaopa\/","article_author":"facebook.com\/gamingwithdaopa\/","article_published_time":"2025-08-24T22:58:17+00:00","article_modified_time":"2026-06-04T02:38:54+00:00","og_image":[{"width":400,"height":263,"url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.jpg","type":"image\/jpeg"}],"author":"daopa","twitter_card":"summary_large_image","twitter_creator":"@gamingwithdaopa","twitter_site":"@gamingwithdaopa","twitter_misc":{"Written by":"daopa","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#article","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/"},"author":{"name":"daopa","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"headline":"EVE Frontier Blueprint and Build Calculator","datePublished":"2025-08-24T22:58:17+00:00","dateModified":"2026-06-04T02:38:54+00:00","mainEntityOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/"},"wordCount":110,"commentCount":1,"publisher":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#\/schema\/person\/fb03a927907d90f409fac550ba375638"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.jpg","articleSection":["Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/","name":"EVE Frontier Blueprint and Build Calculator","isPartOf":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/#website"},"primaryImageOfPage":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#primaryimage"},"image":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#primaryimage"},"thumbnailUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.jpg","datePublished":"2025-08-24T22:58:17+00:00","dateModified":"2026-06-04T02:38:54+00:00","description":"Dive into EVE Frontier Cycle 5 Blueprints with our Full Build Creator & Calculator! Select blueprints to view details with beautiful icons, then use the","breadcrumb":{"@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#primaryimage","url":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.jpg","contentUrl":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-content\/uploads\/sites\/40\/2025\/08\/eve-frontier-blueprint-and-build-calculator.jpg","width":400,"height":263,"caption":"eve frontier blueprint and build calculator"},{"@type":"BreadcrumbList","@id":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/blueprint-build-calculator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/"},{"@type":"ListItem","position":2,"name":"EVE Frontier Blueprint and Build Calculator"}]},{"@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\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png","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\/wp-content\/uploads\/sites\/40\/2025\/08\/90-90-Logo.png"},"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\/128","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=128"}],"version-history":[{"count":4,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts\/128\/revisions"}],"predecessor-version":[{"id":223,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/posts\/128\/revisions\/223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/media\/140"}],"wp:attachment":[{"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/media?parent=128"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/categories?post=128"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gamingwithdaopa.ellatha.com\/evefrontier\/wp-json\/wp\/v2\/tags?post=128"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}