{"id":5903,"date":"2026-09-12T03:23:37","date_gmt":"2026-09-12T03:23:37","guid":{"rendered":"https:\/\/eduhunterplay.com\/?page_id=5903"},"modified":"2026-10-01T13:19:15","modified_gmt":"2026-10-01T13:19:15","slug":"calculadora","status":"publish","type":"page","link":"https:\/\/eduhunterplay.com\/index.php\/calculadora\/","title":{"rendered":"Calculadora"},"content":{"rendered":"<p class=\"has-text-align-center wp-block-paragraph\">Para otimizar seu ganho de <strong>Stardust<\/strong> e <strong>XP<\/strong> no Pok\u00e9mon GO sem enrola\u00e7\u00e3o, o segredo \u00e9 focar nas atividades de maior rendimento por minuto e multiplicar os ganhos no momento certo.<\/p><meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Calculadora de Stardust | EduHunterPlay<\/title>\n<style>\n:root{\n  --bg:#faf8ff;--card:#ffffff;--card2:#f1edfb;--text:#28243d;--muted:#746e86;\n  --accent:#8b5cf6;--accent-dark:#6d3fc4;--orange:#ed795f;--red:#d94f70;\n  --green:#2f9e67;--border:#e5def2;--navy:#292044;--warning:#fff8e7;\n}\n*{box-sizing:border-box}\nbody{min-height:100vh;margin:0;background:var(--bg);color:var(--text);font-family:Arial,Helvetica,sans-serif;display:flex;flex-direction:column}\n.sitebar{background:var(--navy);color:#fff;border-bottom:4px solid var(--accent);box-shadow:0 4px 14px #29204424}\n.sitebar-inner{max-width:1180px;margin:auto;padding:15px 24px;display:flex;align-items:center;justify-content:space-between;gap:18px}\n.brand{font-size:20px;font-weight:900;letter-spacing:.3px}.brand span{color:#fff}\n.site-link{color:#fff;text-decoration:none;font-size:13px;font-weight:700;border:1px solid #ffffff55;border-radius:7px;padding:8px 12px}\n.site-link:hover{background:#ffffff18}\n.container{width:100%;max-width:1180px;flex:1;margin:0 auto;padding:32px 24px 26px}\nh1{margin:0 0 6px;font-size:32px;color:var(--navy)} h2{margin:0 0 14px;color:var(--navy)}\n.sub{color:var(--muted);margin-bottom:24px}\n.hero{background:linear-gradient(110deg,var(--accent-dark),#874acb 55%,#b84f9d);border-radius:12px;padding:24px 26px;margin-bottom:22px;color:#fff;box-shadow:0 8px 20px #6d3fc426;text-align:center}\n.hero h1{color:#fff}.hero .sub{color:#f7ebff;margin-bottom:0}\n.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}\n.card{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:18px;box-shadow:0 3px 12px #2920440d}\n.grid .card{border-top:4px solid var(--accent)}\n.grid .card:nth-child(2){border-top-color:var(--orange)}\n.grid .card:nth-child(3){border-top-color:#e04747}\n.grid .card:nth-child(4){border-top-color:var(--green)}\n.stat{font-size:26px;font-weight:700;margin-top:7px;color:var(--navy)}\n.label{color:var(--muted);font-size:14px}\n.controls{display:flex;gap:10px;align-items:end;justify-content:center;flex-wrap:wrap;margin-bottom:18px}\n.control-actions{display:flex;flex-direction:column;gap:8px}\n.table-actions{display:flex;justify-content:flex-start;margin-bottom:10px}\n.control-block{min-width:165px}\n.control-block label{display:block;color:var(--muted);font-size:12px;font-weight:700;margin:0 0 5px}\nbutton{border:0;border-radius:8px;padding:11px 15px;font-weight:700;cursor:pointer;background:var(--orange);color:#fff;box-shadow:0 3px 8px #ed795f40}\nbutton:hover{filter:brightness(.95);transform:translateY(-1px)}\nbutton.secondary{background:var(--card2);color:var(--text);border:1px solid var(--border);box-shadow:none}\nbutton.danger{background:var(--red);color:white;box-shadow:none;padding:8px 11px}\nlabel.switch{display:flex;align-items:center;gap:8px;background:var(--card);padding:10px 13px;border:1px solid var(--border);border-radius:8px}\ninput[type=checkbox]{width:18px;height:18px}\n.tablewrap{overflow:auto;border:1px solid var(--border);border-radius:12px;box-shadow:0 3px 12px #2920440d}\ntable{width:100%;border-collapse:collapse;min-width:920px;background:var(--card)}\nth,td{padding:10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}\nth{color:var(--muted);font-size:13px}\ninput,select{background:#fff;color:var(--text);border:1px solid #d5c9e8;border-radius:7px;padding:8px;width:100%}\n.num{width:100px}.pokemon{min-width:190px}.types{font-size:12px;color:var(--muted);min-width:130px}\nthead{background:var(--navy);color:#fff} thead th{color:#f2eaff}\ntfoot td{font-weight:700;background:var(--card2)}\n.boost{display:inline-block;font-size:11px;padding:4px 7px;border-radius:999px;background:#eaf8f0;color:#267a50;font-weight:800}\n.no-boost{display:inline-block;font-size:11px;padding:4px 7px;border-radius:999px;background:#f1eef6;color:#746e86;font-weight:700}\n.section{margin-top:22px}\n.planner{display:grid;grid-template-columns:1.1fr .9fr;gap:16px}\n.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}\n.field label{display:block;color:var(--muted);font-size:12px;font-weight:700;margin-bottom:5px}\n.result-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}\n.xp-layout{display:grid;grid-template-columns:1.2fr .8fr;gap:18px}\n.xp-fields{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-bottom:16px}\n.xp-bonus-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}\n.xp-bonus-grid label{display:flex;align-items:center;gap:7px;padding:9px;background:var(--card2);border:1px solid var(--border);border-radius:7px;font-size:13px}\n.xp-bonus-grid input{width:18px;height:18px;flex:0 0 auto}\n.xp-section h3{margin:16px 0 9px;font-size:14px;color:var(--navy)}\n.result{background:var(--card2);border:1px solid var(--border);border-radius:10px;padding:13px}\n.result strong{display:block;font-size:21px;color:var(--navy);margin-top:4px}\n.note{color:var(--muted);font-size:13px;margin-top:14px;line-height:1.5}\n.info{margin-top:14px;padding:14px;background:var(--warning);border:1px solid #f0c36d;border-left:4px solid var(--orange);border-radius:8px;font-size:13px;line-height:1.5}\n.status{margin-top:10px;font-size:12px;color:var(--muted);text-align:right}\n.footer{background:var(--navy);color:#fff;margin-top:18px}\n.footer-inner{max-width:1180px;margin:auto;padding:26px 24px;display:flex;align-items:center;justify-content:space-between;gap:20px}\n.footer-title{font-weight:800;font-size:18px;margin-bottom:5px}.footer-copy{color:#b8c9d4;font-size:13px}\n.footer a{display:inline-block;background:var(--orange);color:#fff;text-decoration:none;font-weight:700;border-radius:8px;padding:11px 15px;white-space:nowrap}\n.footer a:hover{filter:brightness(.95)}\n.hidden{display:none!important}\n@media(max-width:850px){\n  .grid{grid-template-columns:repeat(2,1fr)}\n  .planner,.xp-layout{grid-template-columns:1fr}\n}\n@media(max-width:600px){\n  .grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}\n  .grid .card{padding:14px}\n  .container{min-width:0;padding:14px} h1{font-size:24px}\n  .sitebar-inner,.footer-inner{padding-left:14px;padding-right:14px}\n  .sitebar-inner{flex-wrap:wrap;gap:10px}\n  .brand{font-size:18px}\n  .footer-inner{align-items:flex-start;flex-direction:column}.site-link{font-size:11px;white-space:nowrap}.hero{padding:20px}\n  .form-grid,.result-grid,.xp-fields{grid-template-columns:1fr}\n  .xp-bonus-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n  .controls{align-items:stretch}\n  .control-actions{width:100%;flex-direction:row}\n  .control-actions button{flex:1;min-width:0}\n  .table-actions button{width:100%}\n  .control-block{width:100%;min-width:0}\n  label.switch{width:100%;min-width:0}\n  .tablewrap{max-width:100%;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}\n  .result-grid{grid-template-columns:repeat(2,minmax(0,1fr))}\n  .result{min-width:0;padding:10px}\n  .result strong{font-size:18px;overflow-wrap:anywhere}\n}\n@media(max-width:360px){\n  .grid{grid-template-columns:1fr}\n  .xp-bonus-grid{grid-template-columns:1fr}\n}\n<\/style>\n\n\n<div class=\"container\">\n  <section class=\"hero\">\n    <h1> \u2728STARDUST<\/h1>\n    <div class=\"sub\">Pok\u00e9mon GO \u2014 calcule capturas, clima, eventos, Peda\u00e7o de Estrela e planeje sua meta de Poeira Estelar.<\/div>\n  <\/section>\n\n  <div class=\"table-actions\">\n    <button onclick=\"addRow()\">+ Adicionar Pok\u00e9mon<\/button>\n  <\/div>\n\n  <div class=\"tablewrap\">\n    <table>\n      <thead>\n        <tr>\n          <th>Pok\u00e9mon<\/th>\n          <th>Tipos<\/th>\n          <th>Quantidade<\/th>\n          <th>Stardust base<\/th>\n          <th>Clima<\/th>\n          <th>Sem Peda\u00e7o<\/th>\n          <th>Final<\/th>\n          <th><\/th>\n        <\/tr>\n      <\/thead>\n      <tbody id=\"rows\"><\/tbody>\n      <tfoot>\n        <tr>\n          <td>TOTAL<\/td><td><\/td>\n          <td id=\"footQty\">0<\/td><td><\/td><td><\/td>\n          <td id=\"footNormal\">0<\/td><td id=\"footFinal\">0<\/td><td><\/td>\n        <\/tr>\n      <\/tfoot>\n    <\/table>\n  <\/div>\n\n  <div class=\"grid\">\n    <div class=\"card\"><div class=\"label\">Total de capturas<\/div><div class=\"stat\" id=\"totalCaptures\">0<\/div><\/div>\n    <div class=\"card\"><div class=\"label\">Sem Peda\u00e7o de Estrela<\/div><div class=\"stat\" id=\"totalNormal\">0<\/div><\/div>\n    <div class=\"card\"><div class=\"label\">Stardust final<\/div><div class=\"stat\" id=\"totalFinal\">0<\/div><\/div>\n    <div class=\"card\"><div class=\"label\">M\u00e9dia por captura<\/div><div class=\"stat\" id=\"avgDust\">0<\/div><\/div>\n  <\/div>\n\n  <div class=\"controls\">\n    <div class=\"control-actions\">\n      <button class=\"secondary\" onclick=\"clearRows()\">Limpar<\/button>\n    <\/div>\n\n    <div class=\"control-block\">\n      <label for=\"weather\">Clima<\/label>\n      <select id=\"weather\" onchange=\"syncWeatherBoosts();calculate()\">\n        <option value=\"none\">Sem b\u00f4nus de clima<\/option>\n        <option value=\"sunny\">Ensolarado \/ Limpo<\/option>\n        <option value=\"rainy\">Chuvoso<\/option>\n        <option value=\"partly\">Parcialmente nublado<\/option>\n        <option value=\"cloudy\">Nublado<\/option>\n        <option value=\"windy\">Ventando<\/option>\n        <option value=\"snow\">Neve<\/option>\n        <option value=\"fog\">N\u00e9voa<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"control-block\">\n      <label for=\"eventMultiplier\">Multiplicador do evento<\/label>\n      <select id=\"eventMultiplier\" onchange=\"toggleCustomEvent();calculate()\">\n        <option value=\"1\">1\u00d7 (normal)<\/option>\n        <option value=\"2\">2\u00d7 Stardust<\/option>\n        <option value=\"3\">3\u00d7 Stardust<\/option>\n        <option value=\"4\">4\u00d7 Stardust<\/option>\n        <option value=\"custom\">Personalizado<\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"control-block hidden\" id=\"customEventWrap\">\n      <label for=\"customEventMultiplier\">Multiplicador personalizado<\/label>\n      <input id=\"customEventMultiplier\" type=\"number\" min=\"0.1\" step=\"0.1\" value=\"1\" oninput=\"calculate()\">\n    <\/div>\n\n    <label class=\"switch\">\n      <input id=\"piece\" type=\"checkbox\" checked=\"\" onchange=\"calculate()\">\n      \u2b50 Peda\u00e7o de Estrela (+50%)\n    <\/label>\n  <\/div>\n\n  <div class=\"note\">\n    <b>Clima inteligente:<\/b> ao selecionar o clima, a calculadora verifica os tipos conhecidos de cada esp\u00e9cie e aplica automaticamente o b\u00f4nus de clima somente quando ela \u00e9 favorecida.\n    Para \u201cOutro \/ comum\u201d, o b\u00f4nus pode ser marcado manualmente na pr\u00f3pria linha.\n    <br><br>\n    <b>Eventos:<\/b> use o multiplicador configur\u00e1vel para representar b\u00f4nus tempor\u00e1rios do jogo sem precisar alterar o c\u00f3digo.\n  <\/div>\n\n  <section class=\"section planner\">\n    <div class=\"card\">\n      <h2>\ud83c\udfaf Planejador de Farm<\/h2>\n      <div class=\"form-grid\">\n        <div class=\"field\">\n          <label for=\"currentDust\">Stardust atual<\/label>\n          <input id=\"currentDust\" type=\"number\" min=\"0\" step=\"1000\" value=\"0\" oninput=\"calculatePlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"goalDust\">Meta de Stardust<\/label>\n          <input id=\"goalDust\" type=\"number\" min=\"0\" step=\"1000\" value=\"1000000\" oninput=\"calculatePlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"capturesPerHour\">Capturas por hora<\/label>\n          <input id=\"capturesPerHour\" type=\"number\" min=\"0\" step=\"1\" value=\"250\" oninput=\"calculatePlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"sessionMinutes\">Dura\u00e7\u00e3o planejada (min)<\/label>\n          <input id=\"sessionMinutes\" type=\"number\" min=\"0\" step=\"10\" value=\"60\" oninput=\"calculatePlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"pieceDuration\">Dura\u00e7\u00e3o do Peda\u00e7o de Estrela (min)<\/label>\n          <input id=\"pieceDuration\" type=\"number\" min=\"1\" step=\"1\" value=\"30\" oninput=\"calculatePlanner()\">\n        <\/div>\n      <\/div>\n      <div class=\"info\">\n        O planejador usa a <b>m\u00e9dia de Stardust por captura<\/b> da tabela acima como amostra do seu farm.\n        Quanto mais a propor\u00e7\u00e3o da tabela representar os spawns reais da rota, melhor ser\u00e1 a estimativa.\n      <\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2>\ud83d\udcca Estimativa<\/h2>\n      <div class=\"result-grid\">\n        <div class=\"result\"><span class=\"label\">Stardust \/ hora<\/span><strong id=\"dustPerHour\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Capturas na sess\u00e3o<\/span><strong id=\"sessionCaptures\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Stardust na sess\u00e3o<\/span><strong id=\"sessionDust\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Falta para a meta<\/span><strong id=\"dustMissing\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Tempo at\u00e9 a meta<\/span><strong id=\"timeToGoal\">\u2014<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Peda\u00e7os para a meta<\/span><strong id=\"piecesToGoal\">0<\/strong><\/div>\n      <\/div>\n      <div class=\"status\" id=\"saveStatus\">Configura\u00e7\u00f5es salvas neste navegador.<\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"section xp-section\">\n    <section class=\"hero\" aria-labelledby=\"xpTitle\">\n      <h1 id=\"xpTitle\">\u2b50XP<\/h1>\n      <div class=\"sub\">Pok\u00e9mon GO \u2014 estime XP de capturas, b\u00f4nus e eventos.<\/div>\n    <\/section>\n    <div class=\"card\">\n    <div class=\"xp-layout\">\n      <div>\n        <div class=\"xp-fields\">\n          <div class=\"field\">\n            <label for=\"xpCaptureCount\">Quantidade de capturas<\/label>\n            <input id=\"xpCaptureCount\" type=\"number\" min=\"0\" step=\"1\" value=\"1\" oninput=\"calculateXp()\">\n          <\/div>\n          <div class=\"field\">\n            <label for=\"xpEventMultiplier\">B\u00f4nus de evento<\/label>\n            <select id=\"xpEventMultiplier\" onchange=\"calculateXp()\">\n              <option value=\"1\">1\u00d7 (normal)<\/option>\n              <option value=\"2\">2\u00d7 XP<\/option>\n              <option value=\"3\">3\u00d7 XP<\/option>\n              <option value=\"4\">4\u00d7 XP<\/option>\n              <option value=\"5\">5\u00d7 XP<\/option>\n              <option value=\"6\">6\u00d7 XP<\/option>\n              <option value=\"8\">8\u00d7 XP<\/option>\n            <\/select>\n          <\/div>\n          <label class=\"switch\">\n            <input id=\"xpLuckyEgg\" type=\"checkbox\" onchange=\"calculateXp()\">\n            Lucky Egg (dobra o XP)\n          <\/label>\n        <\/div>\n\n        <h3>B\u00f4nus por captura<\/h3>\n        <div class=\"xp-bonus-grid\">\n          <label><input type=\"checkbox\" data-xp-bonus=\"firstThrow\" value=\"50\" onchange=\"calculateXp()\">Primeiro arremesso (+50)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"curveball\" value=\"20\" onchange=\"calculateXp()\">Bola curva (+20)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"weather\" value=\"25\" onchange=\"calculateXp()\">Clima favor\u00e1vel (+25)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"newPokemon\" value=\"1000\" onchange=\"calculateXp()\">Novo Pok\u00e9mon (+1.000)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"arPlus\" value=\"300\" onchange=\"calculateXp()\">B\u00f4nus AR+ (+300)<\/label>\n        <\/div>\n\n        <h3>Qualidade do arremesso (marque uma)<\/h3>\n        <div class=\"xp-bonus-grid\">\n          <label><input type=\"checkbox\" data-xp-bonus=\"nice\" data-xp-group=\"throw\" value=\"20\" onchange=\"selectXpBonus(this, 'throw')\">Nice (+20)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"great\" data-xp-group=\"throw\" value=\"100\" onchange=\"selectXpBonus(this, 'throw')\">Great (+100)<\/label>\n          <label><input type=\"checkbox\" data-xp-bonus=\"excellent\" data-xp-group=\"throw\" value=\"1000\" onchange=\"selectXpBonus(this, 'throw')\">Excellent (+1.000)<\/label>\n        <\/div>\n\n        <h3>B\u00f4nus \u00fanico de sequ\u00eancia (marque um)<\/h3>\n        <div class=\"xp-bonus-grid\">\n          <label><input id=\"xpDailyBonus\" type=\"checkbox\" data-xp-one-time=\"1500\" data-xp-group=\"streak\" onchange=\"selectXpBonus(this, 'streak')\">Primeira captura do dia (+1.500)<\/label>\n          <label><input id=\"xpWeekBonus\" type=\"checkbox\" data-xp-one-time=\"6000\" data-xp-group=\"streak\" onchange=\"selectXpBonus(this, 'streak')\">Sequ\u00eancia de 7 dias (+6.000)<\/label>\n        <\/div>\n      <\/div>\n\n      <div class=\"result-grid\">\n        <div class=\"result\"><span class=\"label\">XP base por captura<\/span><strong id=\"xpBaseResult\">100<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">XP por captura com b\u00f4nus<\/span><strong id=\"xpPerCaptureResult\">100<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">XP total estimado<\/span><strong id=\"xpTotalResult\">100<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Multiplicador aplicado<\/span><strong id=\"xpAppliedMultiplier\">1\u00d7<\/strong><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"note\">O XP total considera os b\u00f4nus marcados em cada captura; o b\u00f4nus di\u00e1rio ou de 7 dias \u00e9 contado uma \u00fanica vez. Qualidades Nice, Great e Excellent s\u00e3o mutuamente exclusivas.<\/div>\n    <\/div>\n  <\/section>\n\n  <section class=\"section planner\">\n    <div class=\"card\">\n      <h2>\ud83c\udfaf Planejador de Farm de XP<\/h2>\n      <div class=\"form-grid\">\n        <div class=\"field\">\n          <label for=\"currentXp\">XP atual<\/label>\n          <input id=\"currentXp\" type=\"number\" min=\"0\" step=\"1000\" value=\"0\" oninput=\"calculateXpPlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"goalXp\">Meta de XP<\/label>\n          <input id=\"goalXp\" type=\"number\" min=\"0\" step=\"1000\" value=\"1000000\" oninput=\"calculateXpPlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"xpCapturesPerHour\">Capturas por hora<\/label>\n          <input id=\"xpCapturesPerHour\" type=\"number\" min=\"0\" step=\"1\" value=\"250\" oninput=\"calculateXpPlanner()\">\n        <\/div>\n        <div class=\"field\">\n          <label for=\"xpSessionMinutes\">Dura\u00e7\u00e3o planejada (min)<\/label>\n          <input id=\"xpSessionMinutes\" type=\"number\" min=\"0\" step=\"10\" value=\"60\" oninput=\"calculateXpPlanner()\">\n        <\/div>\n      <\/div>\n      <div class=\"info\">A estimativa usa o XP por captura com b\u00f4nus e evento selecionados na calculadora acima.<\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <h2>\ud83d\udcca Estimativa de XP<\/h2>\n      <div class=\"result-grid\">\n        <div class=\"result\"><span class=\"label\">XP \/ hora<\/span><strong id=\"xpPerHour\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Capturas na sess\u00e3o<\/span><strong id=\"xpSessionCaptures\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">XP na sess\u00e3o<\/span><strong id=\"xpSessionTotal\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Falta para a meta<\/span><strong id=\"xpMissing\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Capturas at\u00e9 a meta<\/span><strong id=\"xpCapturesToGoal\">0<\/strong><\/div>\n        <div class=\"result\"><span class=\"label\">Tempo at\u00e9 a meta<\/span><strong id=\"xpTimeToGoal\">\u2014<\/strong><\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <div class=\"info\">\n    <b>Observa\u00e7\u00e3o:<\/b> valores e b\u00f4nus de eventos podem mudar. O multiplicador personalizado permite adaptar a ferramenta sem editar o c\u00f3digo.\n    A dura\u00e7\u00e3o padr\u00e3o do Peda\u00e7o de Estrela foi definida como 30 minutos e pode ser alterada manualmente em caso de evento especial.\n  <\/div>\n<\/div>\n\n<footer class=\"footer\">\n  <div class=\"footer-inner\">\n    <div>\n      <div class=\"footer-title\">Mais ferramentas e servi\u00e7os para Pok\u00e9mon GO<\/div>\n      <div class=\"footer-copy\">Conhe\u00e7a a EduHunterPlay e acompanhe as novidades para sua jornada.<\/div>\n    <\/div>\n    <a href=\"https:\/\/eduhunterplay.com\/\" target=\"_blank\" rel=\"noopener\">Acessar eduhunterplay.com \u2197<\/a>\n  <\/div>\n<\/footer>\n\n<script>\nconst pokemonData = [\n  {name:\"Audino\",dust:2100,types:[\"Normal\"]},\n  {name:\"Cloyster\",dust:1200,types:[\"\u00c1gua\",\"Gelo\"]},\n  {name:\"Shellder\",dust:1000,types:[\"\u00c1gua\"]},\n  {name:\"Chimecho\",dust:1000,types:[\"Ps\u00edquico\"]},\n  {name:\"Persian de Alola\",dust:950,types:[\"Noturno\"]},\n  {name:\"Starmie\",dust:950,types:[\"\u00c1gua\",\"Ps\u00edquico\"]},\n  {name:\"Vespiquen\",dust:950,types:[\"Inseto\",\"Voador\"]},\n  {name:\"Garbodor\",dust:950,types:[\"Venenoso\"]},\n  {name:\"Dragapult\",dust:800,types:[\"Drag\u00e3o\",\"Fantasma\"]},\n  {name:\"Hydrapple\",dust:800,types:[\"Grama\",\"Drag\u00e3o\"]},\n  {name:\"Meowth de Alola\",dust:750,types:[\"Noturno\"]},\n  {name:\"Staryu\",dust:750,types:[\"\u00c1gua\"]},\n  {name:\"Sableye\",dust:750,types:[\"Noturno\",\"Fantasma\"]},\n  {name:\"Combee\",dust:750,types:[\"Inseto\",\"Voador\"]},\n  {name:\"Trubbish\",dust:750,types:[\"Venenoso\"]},\n  {name:\"Parasect\",dust:700,types:[\"Inseto\",\"Grama\"]},\n  {name:\"Persian\",dust:700,types:[\"Normal\"]},\n  {name:\"Breloom\",dust:700,types:[\"Grama\",\"Lutador\"]},\n  {name:\"Amoonguss\",dust:700,types:[\"Grama\",\"Venenoso\"]},\n  {name:\"Shiinotic\",dust:700,types:[\"Grama\",\"Fada\"]},\n  {name:\"Paras\",dust:500,types:[\"Inseto\",\"Grama\"]},\n  {name:\"Meowth\",dust:500,types:[\"Normal\"]},\n  {name:\"Delibird\",dust:500,types:[\"Gelo\",\"Voador\"]},\n  {name:\"Shroomish\",dust:500,types:[\"Grama\"]},\n  {name:\"Foongus\",dust:500,types:[\"Grama\",\"Venenoso\"]},\n  {name:\"Morelull\",dust:500,types:[\"Grama\",\"Fada\"]}\n];\n\nconst weatherTypes = {\n  none: [],\n  sunny: [\"Grama\",\"Fogo\",\"Terra\"],\n  rainy: [\"\u00c1gua\",\"El\u00e9trico\",\"Inseto\"],\n  partly: [\"Normal\",\"Pedra\"],\n  cloudy: [\"Fada\",\"Lutador\",\"Venenoso\"],\n  windy: [\"Voador\",\"Drag\u00e3o\",\"Ps\u00edquico\"],\n  snow: [\"Gelo\",\"A\u00e7o\"],\n  fog: [\"Noturno\",\"Fantasma\"]\n};\n\nconst money = n => Math.round(Number(n)||0).toLocaleString(\"pt-BR\");\nconst STORAGE_KEY = \"eduhunter_stardust_v2\";\n\nfunction getEventMultiplier(){\n  const selected = document.getElementById(\"eventMultiplier\").value;\n  if(selected === \"custom\"){\n    return Math.max(0.1, parseFloat(document.getElementById(\"customEventMultiplier\").value) || 1);\n  }\n  return parseFloat(selected) || 1;\n}\n\nfunction toggleCustomEvent(){\n  const isCustom = document.getElementById(\"eventMultiplier\").value === \"custom\";\n  document.getElementById(\"customEventWrap\").classList.toggle(\"hidden\", !isCustom);\n}\n\nfunction getPokemon(name){\n  return pokemonData.find(p => p.name === name) || null;\n}\n\nfunction isBoostedByWeather(types){\n  const selectedWeather = document.getElementById(\"weather\").value;\n  const boosted = weatherTypes[selectedWeather] || [];\n  return types.some(type => boosted.includes(type));\n}\n\nfunction optionList(selectedName=\"\"){\n  const commonSelected = selectedName === \"\" || selectedName === \"Outro \/ comum\";\n  return `<option value=\"Outro \/ comum\" ${commonSelected?\"selected\":\"\"}>Outro \/ comum (100)<\/option>` +\n    pokemonData.map(p => `<option value=\"${p.name}\" ${p.name===selectedName?\"selected\":\"\"}>${p.name} (${money(p.dust)})<\/option>`).join(\"\");\n}\n\nfunction addRow(name=\"\", qty=1, dust=100, manualWeather=null){\n  const tr = document.createElement(\"tr\");\n  const pokemon = getPokemon(name);\n  const types = pokemon ? pokemon.types : [];\n\n  tr.innerHTML = `\n    <td class=\"pokemon\">\n      <select class=\"pokemonSelect\" onchange=\"syncPokemon(this)\">${optionList(name)}<\/select>\n    <\/td>\n    <td class=\"types\">${types.length ? types.join(\" \/ \") : \"Personalizado\"}<\/td>\n    <td><input class=\"num qty\" type=\"number\" min=\"0\" step=\"1\" value=\"${qty}\" oninput=\"calculate()\"><\/td>\n    <td><input class=\"num dust\" type=\"number\" min=\"0\" step=\"1\" value=\"${dust}\" oninput=\"calculate()\"><\/td>\n    <td>\n      <label style=\"display:flex;align-items:center;gap:6px;white-space:nowrap\">\n        <input class=\"weatherBoost\" type=\"checkbox\" onchange=\"markManualWeather(this);calculate()\">\n        <span class=\"weatherLabel no-boost\">N\u00e3o<\/span>\n      <\/label>\n    <\/td>\n    <td class=\"normal\">0<\/td>\n    <td class=\"final\">0<\/td>\n    <td><button class=\"danger\" onclick=\"this.closest('tr').remove();calculate()\">X<\/button><\/td>\n  `;\n\n  tr.dataset.manualWeather = manualWeather === null ? \"auto\" : \"manual\";\n  document.getElementById(\"rows\").appendChild(tr);\n\n  if(pokemon){\n    tr.querySelector(\".dust\").value = pokemon.dust;\n  }else{\n    tr.querySelector(\".dust\").value = dust;\n  }\n\n  updateRowWeather(tr, manualWeather);\n  calculate();\n}\n\nfunction markManualWeather(checkbox){\n  checkbox.closest(\"tr\").dataset.manualWeather = \"manual\";\n  updateWeatherLabel(checkbox.closest(\"tr\"));\n}\n\nfunction syncPokemon(select){\n  const tr = select.closest(\"tr\");\n  const pokemon = getPokemon(select.value);\n  tr.dataset.manualWeather = \"auto\";\n\n  if(pokemon){\n    tr.querySelector(\".dust\").value = pokemon.dust;\n    tr.querySelector(\".types\").textContent = pokemon.types.join(\" \/ \");\n  }else{\n    tr.querySelector(\".dust\").value = 100;\n    tr.querySelector(\".types\").textContent = \"Personalizado\";\n  }\n\n  updateRowWeather(tr);\n  calculate();\n}\n\nfunction updateRowWeather(tr, forcedValue=null){\n  const select = tr.querySelector(\".pokemonSelect\");\n  const pokemon = getPokemon(select.value);\n  const checkbox = tr.querySelector(\".weatherBoost\");\n\n  if(forcedValue !== null){\n    checkbox.checked = !!forcedValue;\n  }else if(tr.dataset.manualWeather !== \"manual\"){\n    checkbox.checked = pokemon ? isBoostedByWeather(pokemon.types) : false;\n  }\n\n  updateWeatherLabel(tr);\n}\n\nfunction updateWeatherLabel(tr){\n  const checkbox = tr.querySelector(\".weatherBoost\");\n  const label = tr.querySelector(\".weatherLabel\");\n  label.textContent = checkbox.checked ? \"+25%\" : \"N\u00e3o\";\n  label.className = checkbox.checked ? \"weatherLabel boost\" : \"weatherLabel no-boost\";\n}\n\nfunction syncWeatherBoosts(){\n  document.querySelectorAll(\"#rows tr\").forEach(tr => {\n    if(tr.dataset.manualWeather !== \"manual\"){\n      updateRowWeather(tr);\n    }\n  });\n}\n\nfunction calculate(){\n  let totalQ = 0;\n  let totalWithoutPiece = 0;\n  let totalFinal = 0;\n\n  const usePiece = document.getElementById(\"piece\").checked;\n  const eventMultiplier = getEventMultiplier();\n\n  document.querySelectorAll(\"#rows tr\").forEach(tr => {\n    const q = Math.max(0, parseInt(tr.querySelector(\".qty\").value) || 0);\n    const d = Math.max(0, parseFloat(tr.querySelector(\".dust\").value) || 0);\n    const weatherFactor = tr.querySelector(\".weatherBoost\").checked ? 1.25 : 1;\n    const withoutPiece = q * d * weatherFactor * eventMultiplier;\n    const finalValue = withoutPiece * (usePiece ? 1.5 : 1);\n\n    tr.querySelector(\".normal\").textContent = money(withoutPiece);\n    tr.querySelector(\".final\").textContent = money(finalValue);\n\n    totalQ += q;\n    totalWithoutPiece += withoutPiece;\n    totalFinal += finalValue;\n  });\n\n  const average = totalQ > 0 ? totalFinal \/ totalQ : 0;\n\n  document.getElementById(\"totalCaptures\").textContent = money(totalQ);\n  document.getElementById(\"totalNormal\").textContent = money(totalWithoutPiece);\n  document.getElementById(\"totalFinal\").textContent = money(totalFinal);\n  document.getElementById(\"avgDust\").textContent = money(average);\n  document.getElementById(\"footQty\").textContent = money(totalQ);\n  document.getElementById(\"footNormal\").textContent = money(totalWithoutPiece);\n  document.getElementById(\"footFinal\").textContent = money(totalFinal);\n\n  calculatePlanner();\n  saveState();\n}\n\nfunction selectXpBonus(checkbox, group){\n  if(checkbox.checked){\n    document.querySelectorAll(`[data-xp-group=\"${group}\"]`).forEach(option => {\n      if(option !== checkbox) option.checked = false;\n    });\n  }\n  calculateXp();\n}\n\nfunction calculateXp(){\n  const captures = Math.max(0, parseInt(document.getElementById(\"xpCaptureCount\").value) || 0);\n  const eventMultiplier = parseInt(document.getElementById(\"xpEventMultiplier\").value) || 1;\n  const luckyEggMultiplier = document.getElementById(\"xpLuckyEgg\").checked ? 2 : 1;\n  const multiplier = eventMultiplier * luckyEggMultiplier;\n  const captureBonus = [...document.querySelectorAll(\"[data-xp-bonus]:checked\")]\n    .reduce((sum, checkbox) => sum + Number(checkbox.value), 0);\n  const xpPerCapture = 100 + captureBonus;\n  const oneTimeBonus = [...document.querySelectorAll(\"[data-xp-one-time]:checked\")]\n    .reduce((sum, checkbox) => sum + Number(checkbox.dataset.xpOneTime), 0);\n  const totalXp = (captures * xpPerCapture + oneTimeBonus) * multiplier;\n\n  document.getElementById(\"xpBaseResult\").textContent = money(100);\n  document.getElementById(\"xpPerCaptureResult\").textContent = money(xpPerCapture * multiplier);\n  document.getElementById(\"xpTotalResult\").textContent = money(totalXp);\n  document.getElementById(\"xpAppliedMultiplier\").textContent = `${multiplier}\u00d7`;\n  calculateXpPlanner();\n}\n\nfunction calculateXpPlanner(){\n  const xpPerCapture = parseLocaleNumber(document.getElementById(\"xpPerCaptureResult\").textContent);\n  const currentXp = Math.max(0, parseFloat(document.getElementById(\"currentXp\").value) || 0);\n  const goalXp = Math.max(0, parseFloat(document.getElementById(\"goalXp\").value) || 0);\n  const capturesPerHour = Math.max(0, parseFloat(document.getElementById(\"xpCapturesPerHour\").value) || 0);\n  const sessionMinutes = Math.max(0, parseFloat(document.getElementById(\"xpSessionMinutes\").value) || 0);\n  const xpPerHour = xpPerCapture * capturesPerHour;\n  const sessionCaptures = capturesPerHour * (sessionMinutes \/ 60);\n  const sessionXp = xpPerCapture * sessionCaptures;\n  const missingXp = Math.max(0, goalXp - currentXp);\n  const hoursToGoal = xpPerHour > 0 ? missingXp \/ xpPerHour : Infinity;\n  const capturesToGoal = xpPerCapture > 0 ? Math.ceil(missingXp \/ xpPerCapture) : 0;\n\n  document.getElementById(\"xpPerHour\").textContent = money(xpPerHour);\n  document.getElementById(\"xpSessionCaptures\").textContent = money(sessionCaptures);\n  document.getElementById(\"xpSessionTotal\").textContent = money(sessionXp);\n  document.getElementById(\"xpMissing\").textContent = money(missingXp);\n  document.getElementById(\"xpCapturesToGoal\").textContent = money(capturesToGoal);\n  document.getElementById(\"xpTimeToGoal\").textContent = missingXp === 0 ? \"Meta atingida\" : formatHours(hoursToGoal);\n  saveState();\n}\n\nfunction calculatePlanner(){\n  const totalQ = [...document.querySelectorAll(\"#rows tr\")]\n    .reduce((sum,tr) => sum + Math.max(0, parseInt(tr.querySelector(\".qty\").value)||0), 0);\n\n  const totalFinal = [...document.querySelectorAll(\"#rows tr\")]\n    .reduce((sum,tr) => sum + parseLocaleNumber(tr.querySelector(\".final\").textContent), 0);\n\n  const avg = totalQ > 0 ? totalFinal \/ totalQ : 0;\n  const cph = Math.max(0, parseFloat(document.getElementById(\"capturesPerHour\").value) || 0);\n  const sessionMinutes = Math.max(0, parseFloat(document.getElementById(\"sessionMinutes\").value) || 0);\n  const currentDust = Math.max(0, parseFloat(document.getElementById(\"currentDust\").value) || 0);\n  const goalDust = Math.max(0, parseFloat(document.getElementById(\"goalDust\").value) || 0);\n  const pieceDuration = Math.max(1, parseFloat(document.getElementById(\"pieceDuration\").value) || 30);\n  const usePiece = document.getElementById(\"piece\").checked;\n\n  const dustPerHour = avg * cph;\n  const sessionCaptures = cph * (sessionMinutes \/ 60);\n  const sessionDust = avg * sessionCaptures;\n  const missing = Math.max(0, goalDust - currentDust);\n  const hoursToGoal = dustPerHour > 0 ? missing \/ dustPerHour : Infinity;\n  const piecesToGoal = usePiece && Number.isFinite(hoursToGoal) && missing > 0\n    ? Math.ceil((hoursToGoal * 60) \/ pieceDuration)\n    : 0;\n\n  document.getElementById(\"dustPerHour\").textContent = money(dustPerHour);\n  document.getElementById(\"sessionCaptures\").textContent = money(sessionCaptures);\n  document.getElementById(\"sessionDust\").textContent = money(sessionDust);\n  document.getElementById(\"dustMissing\").textContent = money(missing);\n  document.getElementById(\"timeToGoal\").textContent = missing === 0 ? \"Meta atingida\" : formatHours(hoursToGoal);\n  document.getElementById(\"piecesToGoal\").textContent = money(piecesToGoal);\n\n  saveState();\n}\n\nfunction parseLocaleNumber(text){\n  return parseFloat(String(text).replace(\/\\.\/g,\"\").replace(\",\", \".\")) || 0;\n}\n\nfunction formatHours(hours){\n  if(!Number.isFinite(hours)) return \"\u2014\";\n  const totalMinutes = Math.ceil(hours * 60);\n  const h = Math.floor(totalMinutes \/ 60);\n  const m = totalMinutes % 60;\n  if(h === 0) return `${m} min`;\n  if(m === 0) return `${h}h`;\n  return `${h}h ${m}min`;\n}\n\nfunction clearRows(){\n  document.getElementById(\"rows\").innerHTML = \"\";\n  calculate();\n}\n\nfunction serializeRows(){\n  return [...document.querySelectorAll(\"#rows tr\")].map(tr => ({\n    name: tr.querySelector(\".pokemonSelect\").value,\n    qty: tr.querySelector(\".qty\").value,\n    dust: tr.querySelector(\".dust\").value,\n    weatherBoost: tr.querySelector(\".weatherBoost\").checked,\n    manualWeather: tr.dataset.manualWeather\n  }));\n}\n\nfunction saveState(){\n  try{\n    const state = {\n      weather: document.getElementById(\"weather\").value,\n      eventMultiplier: document.getElementById(\"eventMultiplier\").value,\n      customEventMultiplier: document.getElementById(\"customEventMultiplier\").value,\n      piece: document.getElementById(\"piece\").checked,\n      currentDust: document.getElementById(\"currentDust\").value,\n      goalDust: document.getElementById(\"goalDust\").value,\n      capturesPerHour: document.getElementById(\"capturesPerHour\").value,\n      sessionMinutes: document.getElementById(\"sessionMinutes\").value,\n      pieceDuration: document.getElementById(\"pieceDuration\").value,\n      xpCaptureCount: document.getElementById(\"xpCaptureCount\").value,\n      xpEventMultiplier: document.getElementById(\"xpEventMultiplier\").value,\n      xpLuckyEgg: document.getElementById(\"xpLuckyEgg\").checked,\n      xpBonuses: [...document.querySelectorAll(\"[data-xp-bonus]:checked\")].map(checkbox => checkbox.dataset.xpBonus),\n      xpDailyBonus: document.getElementById(\"xpDailyBonus\").checked,\n      xpWeekBonus: document.getElementById(\"xpWeekBonus\").checked,\n      currentXp: document.getElementById(\"currentXp\").value,\n      goalXp: document.getElementById(\"goalXp\").value,\n      xpCapturesPerHour: document.getElementById(\"xpCapturesPerHour\").value,\n      xpSessionMinutes: document.getElementById(\"xpSessionMinutes\").value,\n      rows: serializeRows()\n    };\n    localStorage.setItem(STORAGE_KEY, JSON.stringify(state));\n  }catch(e){}\n}\n\nfunction restoreState(){\n  try{\n    const raw = localStorage.getItem(STORAGE_KEY);\n    if(!raw) return false;\n    const state = JSON.parse(raw);\n\n    document.getElementById(\"weather\").value = state.weather || \"none\";\n    document.getElementById(\"eventMultiplier\").value = state.eventMultiplier || \"1\";\n    document.getElementById(\"customEventMultiplier\").value = state.customEventMultiplier || \"1\";\n    document.getElementById(\"piece\").checked = state.piece !== false;\n    document.getElementById(\"currentDust\").value = state.currentDust ?? \"0\";\n    document.getElementById(\"goalDust\").value = state.goalDust ?? \"1000000\";\n    document.getElementById(\"capturesPerHour\").value = state.capturesPerHour ?? \"250\";\n    document.getElementById(\"sessionMinutes\").value = state.sessionMinutes ?? \"60\";\n    document.getElementById(\"pieceDuration\").value = state.pieceDuration ?? \"30\";\n    document.getElementById(\"xpCaptureCount\").value = state.xpCaptureCount ?? \"1\";\n    document.getElementById(\"xpEventMultiplier\").value = state.xpEventMultiplier || \"1\";\n    document.getElementById(\"xpLuckyEgg\").checked = state.xpLuckyEgg === true;\n    document.querySelectorAll(\"[data-xp-bonus]\").forEach(checkbox => {\n      checkbox.checked = (state.xpBonuses || []).includes(checkbox.dataset.xpBonus);\n    });\n    document.getElementById(\"xpDailyBonus\").checked = state.xpDailyBonus === true;\n    document.getElementById(\"xpWeekBonus\").checked = state.xpWeekBonus === true;\n    document.getElementById(\"currentXp\").value = state.currentXp ?? \"0\";\n    document.getElementById(\"goalXp\").value = state.goalXp ?? \"1000000\";\n    document.getElementById(\"xpCapturesPerHour\").value = state.xpCapturesPerHour ?? \"250\";\n    document.getElementById(\"xpSessionMinutes\").value = state.xpSessionMinutes ?? \"60\";\n\n    document.getElementById(\"rows\").innerHTML = \"\";\n    (state.rows || []).forEach(row => {\n      addRow(row.name, row.qty, row.dust, row.weatherBoost);\n      const tr = document.querySelector(\"#rows tr:last-child\");\n      if(tr) tr.dataset.manualWeather = row.manualWeather || \"auto\";\n    });\n\n    toggleCustomEvent();\n    syncWeatherBoosts();\n    calculate();\n    return true;\n  }catch(e){\n    return false;\n  }\n}\n\nif(!restoreState()){\n  addRow(\"Combee\",10,750);\n  addRow(\"Trubbish\",5,750);\n  addRow(\"\",20,100);\n}\ncalculateXp();\n<\/script><p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>Para otimizar seu ganho de Stardust e XP no Pok\u00e9mon GO sem enrola\u00e7\u00e3o, o segredo \u00e9 focar nas atividades de maior rendimento por minuto e multiplicar os ganhos no momento certo. Calculadora de Stardust | EduHunterPlay \u2728STARDUST Pok\u00e9mon GO \u2014 calcule capturas, clima, eventos, Peda\u00e7o de Estrela e planeje sua meta de Poeira Estelar. +&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_joinchat":[],"footnotes":""},"class_list":["post-5903","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/pages\/5903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/comments?post=5903"}],"version-history":[{"count":9,"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/pages\/5903\/revisions"}],"predecessor-version":[{"id":5929,"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/pages\/5903\/revisions\/5929"}],"wp:attachment":[{"href":"https:\/\/eduhunterplay.com\/index.php\/wp-json\/wp\/v2\/media?parent=5903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}