{"product_id":"mini-herz-kette-gravur-edelstahl","title":"Mini Herz Kette mit Gravur | Initialen Herzanhänger Edelstahl","description":"\u003c!-- Fonts \u0026 Icons --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;family=Allura\u0026amp;family=Alex+Brush\u0026amp;family=Kaushan+Script\u0026amp;family=Pacifico\u0026amp;family=Indie+Flower\u0026amp;family=Dancing+Script\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003c!-- SEO: Titel \u0026 Meta-Beschreibung im Admin unter \"Suchmaschinen-Eintrag bearbeiten\" pflegen --\u003e\n\n\u003cstyle\u003e\n\/* ─── KONFIGURATOR jm-cfg-* ─────────────────────────────────────── *\/\n.jm-cfg-wrap * { box-sizing: border-box; }\n.jm-cfg-wrap { font-family: 'Inter', sans-serif; background: #f5f2ed; padding: 0 0 60px; }\n.jm-cfg-header { text-align: center; padding: 40px 20px 28px; background: #f5f2ed; }\n.jm-cfg-eyebrow { display: inline-flex; align-items: center; gap: 8px; font-size: 11px; letter-spacing: 3.5px; text-transform: uppercase; color: #9a8050; font-weight: 600; margin-bottom: 12px; }\n.jm-cfg-eyebrow::before, .jm-cfg-eyebrow::after { content: ''; display: inline-block; width: 28px; height: 1px; background: linear-gradient(90deg, transparent, #bfac79); }\n.jm-cfg-headline { display: block; font-family: 'Playfair Display', serif; font-size: 40px; color: #1a1410; line-height: 1.15; margin-bottom: 14px; margin-top: 30px !important; text-transform: initial; letter-spacing: 0.2px; }\n@media (max-width: 680px) { .jm-cfg-headline { font-size: 20px; } }\n.jm-cfg-subline { font-size: 14px; color: #7a6a4a; max-width: 420px; margin: 0 auto 28px; line-height: 1.6; }\n.jm-cfg-steps { display: flex; align-items: center; justify-content: center; gap: 0; margin-bottom: 8px; }\n.jm-cfg-step-item { display: flex; flex-direction: column; align-items: center; gap: 6px; position: relative; }\n.jm-cfg-step-circle { width: 36px; height: 36px; border-radius: 50%; border: 2px solid #d4c5a0; background: #f5f2ed; color: #a89060; font-family: 'Playfair Display', serif; font-size: 14px; font-weight: 700; display: flex; align-items: center; justify-content: center; transition: all 0.35s ease; position: relative; z-index: 1; }\n.jm-cfg-step-item.active .jm-cfg-step-circle { background: #fff; border-color: #c9a84c; color: #c9a84c; box-shadow: 0 0 0 4px rgba(201,168,76,0.15); }\n.jm-cfg-step-item.done .jm-cfg-step-circle { background: #c9a84c; border-color: #c9a84c; color: #fff; }\n.jm-cfg-step-label { font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #a89060; font-weight: 600; transition: color 0.3s; }\n.jm-cfg-step-item.active .jm-cfg-step-label, .jm-cfg-step-item.done .jm-cfg-step-label { color: #c9a84c; }\n.jm-cfg-step-line { width: 80px; height: 2px; background: #d4c5a0; margin: 0 6px; margin-bottom: 22px; transition: background 0.4s ease; }\n.jm-cfg-step-line.done { background: #c9a84c; }\n@media (max-width: 480px) { .jm-cfg-step-line { width: 40px; } }\n.jm-cfg-progress-bar { height: 2px; background: #e0d8cc; margin: 0 auto; max-width: 680px; border-radius: 2px; overflow: hidden; }\n.jm-cfg-progress-fill { height: 100%; background: linear-gradient(90deg, #c9a84c, #e8c96a); border-radius: 2px; transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1); width: 0%; }\n.jm-cfg-card { background: #fff; border-radius: 20px; box-shadow: 0 8px 40px rgba(0,0,0,0.08); max-width: 820px; margin: 24px auto 0; overflow: hidden; display: none; animation: jmCfgFadeIn 0.4s ease; }\n  @media (max-width: 768px) { .jm-cfg-wrap { max-width: 1020px;  } }\n.jm-cfg-card.active { display: block; }\n@keyframes jmCfgFadeIn { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }\n.jm-cfg-card-body { padding: 32px 32px 24px; }\n@media (max-width: 600px) { .jm-cfg-card-body { padding: 22px 4px 18px; } }\n#jm-cfg-card-2 { max-width: 980px; }\n.jm-cfg-s1-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 32px; align-items: start; }\n@media (max-width: 640px) { .jm-cfg-s1-grid { grid-template-columns: 1fr; gap: 20px; } }\n.jm-cfg-s1-left h3 { font-family: 'Playfair Display', serif; font-size: 1.3rem; color: #1a1410; margin: 0 0 6px; }\n.jm-cfg-s1-left p { font-size: 13px; color: #7a6a4a; margin: 0 0 20px; line-height: 1.55; }\n\/* Schritt 1: Produkt-Fakten (Mini-Herz) *\/\n.jm-mh-facts { display: flex; flex-direction: column; gap: 10px; }\n.jm-mh-fact { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; }\n.jm-mh-fact \u003e i { width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; background: rgba(201,168,76,0.12); color: #b39548; font-size: 16px; }\n.jm-mh-fact-info { flex: 1; }\n.jm-mh-fact-name { display: block; font-weight: 700; font-size: 14px; color: #1a1410; margin-bottom: 2px; }\n.jm-mh-fact-desc { display: block; font-size: 12px; color: #9a8a6a; }\n.jm-cfg-size-strip { margin-top: 16px; padding: 10px 14px; background: #f5f2ed; border-radius: 8px; font-size: 12px; color: #7a6a4a; border-left: 3px solid #c9a84c; }\n.jm-cfg-size-strip strong { color: #1a1410; }\n\/* Hinweis: max. 2 Zeichen *\/\n.jm-mh-limit { display: flex; gap: 10px; align-items: flex-start; margin: 0 0 18px; padding: 10px 14px; border-radius: 10px; background: #f7f4ef; border: 1px dashed #c9a84c; font-size: 12.5px; color: #6a5a3a; line-height: 1.5; text-align: left; }\n.jm-mh-limit i { color: #c9a84c; font-size: 16px; margin-top: 1px; }\n.jm-mh-limit strong { color: #1a1410; }\n.jm-mh-shake { animation: jmMhShake 0.35s ease; }\n@keyframes jmMhShake { 0%,100% { transform: translateX(0); } 25%,75% { transform: translateX(-5px); } 50% { transform: translateX(5px); } }\n\/* Kettenlänge: Tabelle anklickbar *\/\n.jm-rsz-tr[data-len] { cursor: pointer; }\n\/* Vorderseite \/ Rückseite *\/\n.jm-mh-sides { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0 0 16px; }\n.jm-mh-side { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 8px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font: 600 13px Inter, sans-serif; color: #1a1410; transition: all .25s ease; }\n.jm-mh-side em { font-style: normal; font-weight: 500; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: #a89060; }\n.jm-mh-side small { font-size: 15px; font-weight: 600; color: #9a8a6a; min-height: 18px; }\n.jm-mh-side:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-mh-side.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-mh-side.filled small { color: #1a1410; }\n.jm-mh-side-label { position: absolute; top: 12px; left: 12px; z-index: 2; padding: 4px 10px; border-radius: 999px; background: rgba(26,20,16,0.82); color: #e6d3a3; font: 700 9px Inter, sans-serif; letter-spacing: 1.5px; text-transform: uppercase; line-height: 1.4; }\n\/* Ohne eigenes Rückseiten-Foto wird das Vorschaubild gespiegelt *\/\n.jm-mh-stage img.jm-mh-flip { transform: scaleX(-1); }\n.jm-cfg-s3-gravur-line { display: flex; align-items: baseline; gap: 12px; }\n.jm-cfg-s3-gravur-line + .jm-cfg-s3-gravur-line { margin-top: 6px; }\n.jm-cfg-s3-gravur-side { font: 700 9px Inter, sans-serif; letter-spacing: 1.5px; text-transform: uppercase; color: #8a7055; min-width: 82px; }\n.jm-cfg-ring-img-wrap { position: relative; border-radius: 16px; overflow: hidden; background: #f0ece4; aspect-ratio: 1; display: flex; align-items: center; justify-content: center; }\n.jm-cfg-ring-img-wrap img { width: 100%; height: 100%; object-fit: cover; border-radius: 16px; transition: opacity 0.4s ease; display: block; }\n.jm-cfg-ring-img-hover { position: absolute; inset: 0; opacity: 0; }\n.jm-cfg-ring-img-label { position: absolute; top: 12px; left: 12px; background: rgba(201,168,76,0.9); color: #1a1410; font-size: 9px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; padding: 4px 10px; border-radius: 999px; }\n.jm-cfg-ring-img-caption { text-align: center; font-size: 12px; color: #9a8a6a; margin-top: 10px; font-style: italic; }\n.jm-cfg-s2-wrap .engraving-preview-section { padding: 0 !important; background: transparent !important; }\n.jm-cfg-s2-wrap .engraving-preview-grid { gap: 40px; }\n.jm-cfg-s3-title { font-family: 'Playfair Display', serif; font-size: 1.5rem; color: #1a1410; text-align: center; margin: 0 0 6px; }\n.jm-cfg-s3-subtitle { text-align: center; font-size: 13px; color: #7a6a4a; margin: 0 0 28px; }\n.jm-cfg-s3-grid { display: grid; grid-template-columns: 120px 1fr; gap: 24px; align-items: start; margin-bottom: 24px; }\n@media (max-width: 540px) { .jm-cfg-s3-grid { grid-template-columns: 1fr; } }\n.jm-cfg-s3-thumb { width: 120px; height: 120px; border-radius: 12px; object-fit: cover; border: 2px solid #e8e0d0; }\n.jm-cfg-s3-product-name { font-family: 'Playfair Display', serif; font-size: 1.2rem; color: #1a1410; margin: 0 0 16px; }\n.jm-cfg-s3-rows { display: flex; flex-direction: column; gap: 0; }\n.jm-cfg-s3-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px solid #f0ece4; font-size: 13px; }\n.jm-cfg-s3-row:last-child { border-bottom: none; }\n.jm-cfg-s3-row-label { font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #a89060; font-weight: 700; }\n.jm-cfg-s3-row-value { color: #1a1410; font-weight: 600; font-size: 13px; text-align: right; }\n.jm-cfg-s3-gravur-box { background: linear-gradient(135deg, #1a1410, #2a1f10); border: 1px solid rgba(201,168,76,0.3); border-radius: 12px; padding: 18px 20px; margin-bottom: 24px; }\n.jm-cfg-s3-gravur-eyebrow { display: block; font-size: 9px; letter-spacing: 2px; text-transform: uppercase; color: #c9a84c; font-weight: 700; margin-bottom: 10px; }\n.jm-cfg-s3-gravur-text { display: block; font-size: 1.5rem; color: #f7f0e3; margin-bottom: 6px; min-height: 2rem; }\n.jm-cfg-s3-gravur-meta { display: block; font-size: 11px; color: #8a7055; }\n.jm-cfg-s3-price-wrap { margin-bottom: 20px; }\n.jm-cfg-s3-price-wrap .price-item--regular:not(s) { font-family: 'Playfair Display', serif; font-size: 2rem; color: #1a1410; font-weight: 700; }\n.jm-cfg-s3-price-wrap s.price-item--regular { font-size: 1.1rem; color: #a89060; margin-left: 8px; text-decoration: line-through; }\n.jm-cfg-s3-price-wrap .price__badge--sale span { background: #c9a84c; color: #1a1410; font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 999px; margin-left: 10px; vertical-align: middle; }\n.jm-cfg-s3-trust { display: flex; justify-content: center; gap: 24px; margin-top: 14px; flex-wrap: wrap; }\n.jm-cfg-s3-trust span { font-size: 11px; color: #9a8a6a; display: flex; align-items: center; gap: 5px; }\n.jm-cfg-s3-trust i { color: #c9a84c; }\n.jm-cfg-s3-note { margin-top: 16px; font-size: 11px; color: #a89060; text-align: right; line-height: 1.5; }\n.jm-cfg-card-footer { display: flex; justify-content: space-between; align-items: center; padding: 16px 32px 24px; border-top: 1px solid #f0ece4; }\n@media (max-width: 600px) { .jm-cfg-card-footer { padding: 14px 18px 20px; } }\n.jm-cfg-btn-back { display: flex; align-items: center; gap: 8px; padding: 10px 20px; background: transparent; border: 1.5px solid #d4c5a0; border-radius: 10px; color: #7a6a4a; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.2s; }\n.jm-cfg-btn-back:hover { border-color: #c9a84c; color: #c9a84c; }\n.jm-cfg-btn-back[hidden] { visibility: hidden; pointer-events: none; }\n.jm-cfg-btn-next { display: flex; align-items: center; gap: 10px; padding: 10px 17px; background: #1a1410; color: #fff; border: none; border-radius: 10px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.3s ease; letter-spacing: 0.2px; }\n.jm-cfg-btn-next:hover { background: #c9a84c; color: #1a1410; transform: translateX(2px); }\n.jm-cfg-btn-next i { transition: transform 0.2s; }\n.jm-cfg-btn-next:hover i { transform: translateX(3px); }\n#jm-cfg-card-3 .jm-cfg-card-footer { border-top: none; padding-top: 0; }\n\n\/* ── PRODUCT STYLES ── *\/\n.engraving-product { font-family: 'Inter', sans-serif; color: #111; }\n.engraving-product .container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }\n.engraving-product .container2 { max-width: 1200px; width: 110%; margin: 0 auto; padding: 0 20px; }\n.engraving-hero { padding: 80px 20px; background: #f9f9f9; }\n.engraving-hero-grid-wrapper { max-width: 1200px; margin: 0 auto; padding: 0 15px; }\n.engraving-hero-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: start; }\n.engraving-hero-text { display: flex; flex-direction: column; justify-content: center; }\n.engraving-badge { display: inline-block; margin-bottom: 16px; font-size: 1.2rem; padding: 6px 14px; border-radius: 999px; background: #f4f1e8; color: #7a6a3a; font-weight: 600; }\n.engraving-badge i { font-size: 1.2rem; }\n.engraving-hero-text h1 { font-size: 3.8rem; line-height: 1.2; margin-bottom: 20px; color: #222; font-weight: 600; font-family: 'Playfair Display', serif; }\n.engraving-hero-text p { font-size: 1.4rem; color: #555; margin-bottom: 25px; }\n.engraving-trust { margin-top: 25px; display: flex; flex-wrap: wrap; gap: 20px; color: #777; }\n.engraving-trust span { display: flex; align-items: center; gap: 8px; }\n.engraving-image { display: flex; align-items: flex-start; justify-content: center; }\n.watch-image { position: relative; width: 140%; max-width: 550px; }\n.watch-image img { width: 100%; object-fit: contain; border-radius: 30px; box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%); transition: opacity 0.45s ease; display: block; }\n.watch-img-hover { position: absolute; inset: 0; opacity: 0; }\n.watch-image:hover .watch-img-primary { opacity: 0; }\n.watch-image:hover .watch-img-hover   { opacity: 1; }\n.watch-image.swapping .watch-img-primary, .watch-image.swapping .watch-img-hover { transition: opacity .6s ease; }\n@media (max-width: 992px) { .engraving-hero-grid { grid-template-columns: 1fr; gap: 50px; } .engraving-image { justify-content: center; } .engraving-hero-text h1 { font-size: 2.4rem; margin-top: -40px !important; } }\n.engraving-section { padding: 40px 0; }\n.engraving-section h2 { font-family: 'Playfair Display', serif; font-size: 38px; margin-bottom: 20px; }\n.engraving-section-desc { max-width: 720px; color: #666; margin-bottom: 60px; }\n.engraving-features { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 40px; }\n.engraving-feature { background: #fff; padding: 40px; border-radius: 28px; box-shadow: 0 20px 50px rgba(0,0,0,.06); transition: transform .4s ease; }\n.engraving-feature:hover { transform: translateY(-6px); }\n.engraving-feature i { font-size: 32px; color: #b6a573; margin-bottom: 14px; display: inline-block; }\n.engraving-feature h3 { margin-bottom: 10px; font-size: 18px; }\n.engraving-feature p { font-size: 15px; color: #666; }\n.engraving-specs { display: flex; justify-content: center; gap: 60px; flex-wrap: wrap; margin-top: 30px; }\n.engraving-specs ul { list-style: none; padding: 0; margin: 0; }\n.engraving-specs ul li { display: flex; align-items: center; gap: 10px; color: #555; margin-bottom: 12px; padding: 12px 0; border-bottom: 1px solid #eee; font-size: 15px; }\n.engraving-specs ul li i { color: #bfac79; transition: transform 0.3s ease, color 0.3s ease; }\n.engraving-specs ul li:hover i { transform: scale(1.3); color: #9f8650; }\n@media (max-width: 768px) { .engraving-specs { flex-direction: column; align-items: center; gap: 25px; } .engraving-specs ul { text-align: center; } }\n.engraving-cta-strip { background: linear-gradient(135deg, #111, #1c1c1c); color: #fff; padding: 80px 20px; text-align: center; }\n.engraving-cta-strip h2 { color: #fff; margin-bottom: 20px; }\n.engraving-cta-strip p { color: #ccc; margin-bottom: 30px; }\n.engraving-fade { opacity: 0; transform: translateY(30px); transition: 1s ease; }\n.engraving-fade.show { opacity: 1; transform: none; }\n.engraving-collection-btn { position: relative; padding: 14px 28px; border-radius: 999px; background: linear-gradient(135deg, #c7aaaa, #1a1a1a); color: #fff; font-weight: 400; font-size: 13px; letter-spacing: .5px; border: 1px solid rgba(220,184,75,0.6); cursor: pointer; overflow: hidden; transition: all .35s ease; }\n.engraving-collection-btn:hover { transform: translateY(-1px); box-shadow: 0 0 25px rgba(220,184,75,.45), inset 0 0 20px rgba(220,184,75,.15); color: #ffdd7a; }\n.engraving-collection-btn::before { content: ''; position: absolute; inset: -1px; border-radius: inherit; background: radial-gradient(circle at 50% 120%, rgba(220,184,75,.35), transparent 65%); opacity: .45; pointer-events: none; }\n.engraving-collection-btn i { margin-left: 8px; }\n.micro-trust-valentine { margin-top: 1.5rem; font-size: 1.3rem; color: #746742; font-weight: 600; }\n.hero-subline { display: flex; align-items: center; gap: 14px; margin-top: 12px; flex-wrap: wrap; }\n.hero-subline .engraving-badge { font-size: 1.1rem; opacity: 0.85; }\n@media (max-width: 768px) { .hero-subline { justify-content: center; } }\n.luxury-shine-btn { position: relative; font-size: 1.2rem; margin-bottom: 16px; display: inline-flex; align-items: center; gap: 8px; padding: 5px 12px; border-radius: 999px; font-weight: 600; letter-spacing: 0.03em; text-decoration: none; color: #e6d3a3; background: linear-gradient(180deg, #141414, #0d0d0d); border: 1px solid rgba(201,168,92,0.45); overflow: hidden; isolation: isolate; transition: transform 0.25s ease, box-shadow 0.25s ease; }\n.luxury-shine-btn:hover { transform: translateY(-1px); box-shadow: 0 8px 20px rgba(0,0,0,0.35), 0 0 0 1px rgba(201,168,92,0.35); }\n.luxury-shine-btn::before { content: \"\"; position: absolute; top: -60%; left: -120%; width: 60%; height: 220%; background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0) 35%, rgba(255,214,130,0.65) 50%, rgba(255,255,255,0) 65%, transparent 100%); transform: skewX(-20deg); opacity: 0.9; animation: goldLaser 3s ease-in-out infinite; }\n@keyframes goldLaser { 0% { left: -120%; } 55% { left: 140%; } 100% { left: 140%; } }\n.luxury-shine-btn i { color: #c9a85c; font-size: 1.1em; }\n.live-preview-link.luxury { margin-left: 8px; font-weight: 600; color: #ab8e4c; text-decoration: none; position: relative; letter-spacing: 0.02em; transition: color 0.25s ease, opacity 0.25s ease; }\n.live-preview-link.luxury::after { content: \"\"; position: absolute; left: 0; bottom: -2px; width: 0%; height: 1px; background: linear-gradient(90deg, rgba(201,168,92,0), rgba(201,168,92,0.9), rgba(201,168,92,0)); transition: width 0.35s ease; }\n.live-preview-link.luxury:hover::after { width: 100%; }\n.live-preview-link.luxury:hover { opacity: 0.9; }\n.size-info { margin-top: 10px; margin-bottom: 10px; }\n.size-badges { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }\n.shape-badge { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; font-family: 'Inter', sans-serif; font-size: 13px; letter-spacing: 0.5px; background: #f5f5f5; color: #333; border: 2px solid #e0e0e0; margin-right: 10px; margin-top: 8px; border-radius: 6px; transition: all 0.25s ease; }\n.shape-badge:hover { border-color: #b6a573; color: #34aa8b; transform: translateY(-2px); }\n\n\/* RINGGROESSE *\/\n.jm-rsz-section { background: linear-gradient(160deg, #2a2018 0%, #1a1410 55%, #241c0e 100%); padding: 56px 24px 52px; position: relative; }\n.jm-rsz-section::before { content: ''; position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 0%, rgba(201,168,76,0.06) 0%, transparent 65%); pointer-events: none; }\n.jm-rsz-inner { max-width: 1200px; margin: 0 auto; }\n.jm-rsz-header { text-align: center; margin-bottom: 40px; }\n.jm-rsz-eyebrow { display: block; font-family: 'Playfair Display', serif; font-size: 11px; letter-spacing: 4px; text-transform: uppercase; color: #c9a84c; margin-bottom: 8px; opacity: 0.75; }\n.jm-rsz-title { display: block; font-family: 'Playfair Display', serif; font-size: 28px; color: #f7f0e3; line-height: 1.2; margin-bottom: 10px; }\n.jm-rsz-subtitle { display: block; color: #8a7055; font-size: 14px; font-weight: 300; letter-spacing: 0.3px; }\n.jm-rsz-grid { display: grid; grid-template-columns: 200px 1fr 1fr; gap: 40px; align-items: start; }\n@media (max-width: 900px) { .jm-rsz-grid { grid-template-columns: 1fr 1fr; gap: 28px; } .jm-rsz-col--svg { grid-column: 1 \/ -1; display: flex; justify-content: center; } }\n@media (max-width: 560px) { .jm-rsz-grid { grid-template-columns: 1fr; gap: 24px; } .jm-rsz-col--svg { grid-column: auto; } }\n.jm-rsz-svg-wrap svg { filter: drop-shadow(0 0 18px rgba(201,168,76,0.22)); display: block; }\n.jm-rsz-col--anno { display: flex; flex-direction: column; gap: 14px; }\n.jm-rsz-anno { background: rgba(201,168,76,0.07); border-left: 3px solid #c9a84c; border-radius: 4px; padding: 12px 16px; }\n.jm-rsz-anno-label { display: block; font-size: 10px; letter-spacing: 2px; text-transform: uppercase; color: #c9a84c; font-weight: 700; margin-bottom: 4px; }\n.jm-rsz-anno-value { display: block; font-family: 'Playfair Display', serif; font-size: 20px; color: #f7f0e3; line-height: 1.15; margin-bottom: 5px; }\n.jm-rsz-anno-desc { display: block; font-size: 13px; color: #8a7055; line-height: 1.55; }\n.jm-rsz-anno-desc strong { color: #e8c96a; font-weight: 500; }\n.jm-rsz-tip { display: flex; gap: 12px; background: rgba(201,168,76,0.06); border: 1px solid rgba(201,168,76,0.2); border-radius: 6px; padding: 12px 14px; align-items: flex-start; margin-top: 4px; }\n.jm-rsz-tip-icon { font-size: 16px; flex-shrink: 0; margin-top: 2px; }\n.jm-rsz-tip-title { display: block; font-size: 13px; font-weight: 700; color: #e8c96a; margin-bottom: 4px; }\n.jm-rsz-tip-text { display: block; font-size: 12px; color: #8a7055; line-height: 1.55; }\n.jm-rsz-tip-text strong { color: #e8c96a; font-weight: 500; }\n.jm-rsz-col--guide { display: flex; flex-direction: column; gap: 16px; }\n.jm-rsz-block-title { display: block; font-family: 'Playfair Display', serif; font-size: 13px; color: #c9a84c; letter-spacing: 1px; margin-bottom: 4px; text-transform: uppercase; }\n.jm-rsz-steps { display: flex; flex-direction: column; gap: 10px; }\n.jm-rsz-step { display: flex; align-items: flex-start; gap: 12px; background: rgba(255,255,255,0.03); border: 1px solid rgba(201,168,76,0.12); border-radius: 6px; padding: 11px 14px; }\n.jm-rsz-step-num { flex-shrink: 0; width: 26px; height: 26px; border: 1.5px solid rgba(201,168,76,0.5); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: 'Playfair Display', serif; font-size: 12px; color: #c9a84c; font-weight: 700; margin-top: 1px; }\n.jm-rsz-step-title { display: block; font-weight: 700; font-size: 13px; color: #f7f0e3; margin-bottom: 3px; }\n.jm-rsz-step-text { display: block; font-size: 12px; color: #8a7055; line-height: 1.5; }\n.jm-rsz-step-text strong { color: #e8c96a; font-weight: 500; }\n.jm-rsz-table-wrap { overflow-x: auto; }\n.jm-rsz-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 280px; }\n.jm-rsz-thead { display: table-header-group; }\n.jm-rsz-tbody { display: table-row-group; }\n.jm-rsz-thead .jm-rsz-tr { border-bottom: 1px solid rgba(201,168,76,0.35); }\n.jm-rsz-th { text-align: left; padding: 7px 10px; font-size: 10px; letter-spacing: 1.5px; text-transform: uppercase; color: #c9a84c; font-weight: 500; }\n.jm-rsz-tbody .jm-rsz-tr { border-bottom: 1px solid rgba(255,255,255,0.04); transition: background 0.15s; }\n.jm-rsz-tbody .jm-rsz-tr:hover { background: rgba(201,168,76,0.05); }\n.jm-rsz-tbody .jm-rsz-tr.jm-rsz-hl { background: rgba(201,168,76,0.1); border-color: rgba(201,168,76,0.3); }\n.jm-rsz-td { padding: 8px 10px; color: #8a7055; font-size: 13px; }\n.jm-rsz-td:first-child { color: #f7f0e3; font-weight: 700; }\n.jm-rsz-tbody .jm-rsz-tr.jm-rsz-hl .jm-rsz-td { color: #f7f0e3; }\n.jm-rsz-hl-badge { display: inline-block; background: #c9a84c; color: #1a1410; font-size: 9px; letter-spacing: 0.8px; text-transform: uppercase; padding: 2px 7px; border-radius: 10px; margin-left: 6px; font-weight: 700; vertical-align: middle; }\n\n\/* SHIPPING *\/\n.engraving-shipping { padding: 20px 0; background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%); }\n.engraving-shipping-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; }\n.engraving-shipping h2 { font-size: 2.2rem; font-weight: 700; margin-bottom: 40px; color: #1f2a2a; text-align: center; }\n.shipping-item { text-align: center; padding: 40px 28px; background: #fff; border-radius: 20px; box-shadow: 0 18px 45px rgba(0,0,0,0.06); transition: transform 0.4s ease, box-shadow 0.4s ease; }\n.shipping-item:hover { transform: translateY(-6px); box-shadow: 0 28px 65px rgba(0,0,0,0.1); }\n.shipping-item i { font-size: 2.8rem; color: #bfac79; margin-bottom: 18px; }\n.shipping-item h3 { font-size: 1.6rem; margin-bottom: 10px; font-weight: 600; color: #1f2a2a; margin-top: 10px; }\n.shipping-item p { font-size: 1.3rem; color: #555; line-height: 1.6; }\n@media (max-width: 900px) { .engraving-shipping-grid { grid-template-columns: 1fr; gap: 28px; } .shipping-item { padding: 32px 22px; } }\n\n\/* WHY *\/\n.engraving-why-heart { padding: 80px 0; background: #faf9f7; text-align: center; }\n.engraving-why-heart h2 { font-size: 2.2rem; font-weight: 700; margin-bottom: 16px; color: #1f2a2a; }\n.engraving-why-heart p { max-width: 650px; margin: 0 auto 50px auto; font-size: 1.3rem; line-height: 1.7; color: #555; }\n.engraving-why-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 13px; }\n@media (max-width: 1200px) { .engraving-why-grid { grid-template-columns: repeat(2, 1fr); gap: 30px; } }\n@media (max-width: 700px) { .engraving-why-grid { grid-template-columns: 1fr; gap: 25px; } .engraving-why-heart p { margin-bottom: 40px; } }\n\n\/* WARNING *\/\n.jm-rgt-warning { display: flex; gap: 14px; align-items: flex-start; background: linear-gradient(135deg, #2a1f0a, #1e1608); border: 1px solid rgba(201,168,76,0.35); border-left: 4px solid #c9a84c; border-radius: 10px; padding: 18px 20px; margin-bottom: 40px; }\n.jm-rgt-warning-icon { font-size: 22px; color: #c9a84c; flex-shrink: 0; margin-top: 1px; }\n.jm-rgt-warning-title { display: block; font-size: 14px; font-weight: 700; color: #f7f0e3; margin-bottom: 6px; }\n.jm-rgt-warning-text { display: block; font-size: 13px; color: #8a7055; line-height: 1.65; }\n.jm-rgt-warning-text strong { color: #e8c96a; font-weight: 500; }\n\n\/* PREVIEW SECTION *\/\n.engraving-preview-section { padding: 40px 0; background: #ffffff; }\n.engraving-preview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 80px; align-items: center; }\n.engraving-preview-image { position: relative; max-width: 560px; }\n.engraving-preview-image img { width: 100%; border-radius: 28px; transition: opacity 0.3s ease; }\n\/* Bild + Gravur liegen in derselben Box → Position nur über JM_ARC (Tweak) steuern, keine CSS-Verschiebungen *\/\n.jm-mh-stage { position: relative; border-radius: 28px; overflow: hidden; line-height: 0; }\n.jm-mh-stage img { display: block; width: 100%; }\n.engraving-overlay { position: absolute; inset: 0; pointer-events: none; opacity: 0; transform: translateY(6px); transition: opacity 0.35s ease, transform 0.35s ease; }\n.engraving-overlay.active { opacity: 1; transform: translateY(0); }\n.engraving-overlay svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }\n\/* Lasergravur-Optik auf silberfarbigem Edelstahl (wie Herzring) *\/\n.engraving-arc-text, .engraving-arc-popup-text { font-size: 8px; letter-spacing: 0; fill: rgb(120 120 124 \/ 92%);  }\n.engraving-preview-content h2 { font-size: 2.1rem; margin-bottom: 12px; color: #2a1f10; font-weight: 600; margin-top: 25px; }\n.engraving-preview-content p { max-width: 480px; margin-bottom: 28px; color: #555; line-height: 1.6; }\n.engraving-input-wrap, .engraving-font-select { margin-bottom: 18px; }\n.engraving-input-wrap label, .engraving-font-select label { display: block; font-weight: 600; margin-bottom: 6px; }\n.engraving-input-wrap input, .engraving-font-select select { width: 50%; padding: 14px 16px; border-radius: 12px; border: 1px solid #ddd; font-size: 1.5rem; }\n.engraving-input-wrap input:focus, .engraving-font-select select:focus { outline: none; border-color: #bfac79; }\n.engraving-input-wrap small { display: block; margin-top: 6px; font-size: 0.85rem; color: #777; }\n.engraving-symbol-picker { margin-bottom: 22px; }\n.symbol-title { display: block; font-size: 1.1rem; font-weight: 600; margin-bottom: 8px; color: #444; }\n.symbol-list { display: flex; gap: 10px; flex-wrap: wrap; }\n.symbol-btn { width: 44px; height: 44px; border-radius: 12px; border: 1px solid #ddd; background: #fff; font-size: 2rem; cursor: pointer; transition: all 0.25s ease; }\n.symbol-btn:hover { border-color: #bfac79; background: #f6f3ea; transform: translateY(-2px); }\n.symbol-btn:active { transform: scale(1.05); background: #d7bf78; }\n.engraving-font-picker { margin-bottom: 28px; }\n.font-picker-label { display: block; margin-bottom: 12px; }\n.font-group { margin-bottom: 16px; }\n.font-group-title { display: block; font-size: 0.85rem; text-transform: uppercase; letter-spacing: 1px; color: #777; margin-bottom: 8px; }\n.font-btn { display: inline-block; margin: 6px 6px 0 0; padding: 12px 16px; border-radius: 14px; border: 1px solid #ddd; background: #fff; cursor: pointer; font-size: 1.05rem; transition: all 0.25s ease; }\n.font-btn.script { font-size: 1.2rem; }\n.font-btn:hover { border-color: #bfac79; transform: translateY(-1px); }\n.font-btn.active { border-color: #bfac79; background: rgba(191,172,121,0.15); box-shadow: 0 6px 18px rgba(0,0,0,0.08); }\n.innengravur-badge { display: inline-flex; align-items: center; gap: 8px; background: linear-gradient(135deg, #2a1f10, #3d2c0e); color: #e6d3a3; border: 1px solid rgba(201,168,92,0.4); border-radius: 999px; padding: 6px 14px; font-size: 1.1rem; font-weight: 600; letter-spacing: 0.03em; margin-bottom: 12px; }\n.innengravur-badge i { color: #c9a85c; }\n.jm-grav-trust-line { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: #4b8484; margin-top: 16px; }\n.jm-grav-trust-line i { color: #4b8484; }\n@media (max-width: 900px) { .engraving-preview-grid { grid-template-columns: 1fr; gap: 50px; text-align: center; } .engraving-preview-image { margin: 0 auto; } }\n@media (max-width: 640px) {\n  .font-group { display: grid; grid-template-columns: auto 1fr; column-gap: 50px; align-items: start; margin-bottom: 16px; border-bottom: 1px solid rgba(0,0,0,0.06); padding-bottom: 12px; }\n  .font-group-buttons { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }\n  .font-btn { height: 42px; padding: 0 6px; font-size: 0.9rem; border-radius: 10px; display: flex; align-items: center; justify-content: center; white-space: nowrap; line-height: 1; }\n  .font-btn.script { font-size: 1rem; }\n  .symbol-list { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; }\n  .symbol-btn { height: 44px; font-size: 1.25rem; display: flex; align-items: center; justify-content: center; border-radius: 10px; }\n  .font-group-title { font-size: 0.75rem; font-weight: 600; opacity: 0.6; white-space: nowrap; padding-top: 12px; }\n}\n.preview-check { font-size: 14px; opacity: 0; transform: scale(0.6); transition: opacity 0.25s ease, transform 0.25s ease; }\n.preview-check.show { opacity: 1; transform: scale(1); }\n@keyframes engraveFade { 0% { text-shadow: 0 0 0 rgba(191,172,121,0); } 40% { text-shadow: 0 0 6px rgba(191,172,121,0.55), 0 0 14px rgba(191,172,121,0.30); } 100% { text-shadow: 0 0 0 rgba(191,172,121,0); } }\n.engrave-fade { animation: engraveFade 0.9s ease-out; }\n@keyframes engravingPulse { 0% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0); } 40% { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); } 100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0); } }\n.engraving-preview-image.pulse { animation: engravingPulse 0.6s ease-out; }\n.engraving-preview-note { margin-top: 10px; font-size: 12.5px; line-height: 1.45; color: rgba(60,60,60,0.75); text-align: center; letter-spacing: 0.02em; }\n@media (max-width: 640px) { .engraving-preview-note { font-size: 12px; padding: 0 12px; } }\n\n\/* MOBILE POPUP *\/\n#engraving-mobile-popup { display: block; position: fixed; left: 0; right: 0; bottom: 285px; z-index: 9999; background: #6e644533; padding: 20px; box-shadow: 0 -10px 30px rgba(0,0,0,.18); opacity: 0; transform: translateY(18px); pointer-events: none; transition: opacity 0.35s ease, transform 0.35s ease; }\n#engraving-mobile-popup.show { opacity: 1; transform: translateY(0); pointer-events: auto; }\n.popup-preview-check { position: absolute; top: 36%; right: 14%; font-size: 2rem; opacity: 0; transition: opacity 0.5s ease; }\n.popup-preview-check.show { opacity: 1; }\n@media (min-width: 769px) { #engraving-mobile-popup { display: none !important; } }\n#engraving-mobile-popup .engraving-overlay svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }\n#engraving-mobile-popup .jm-mh-stage { border-radius: 14px; max-width: 360px; margin: 0 auto; }\n  \/* ═══════════════════════════════════════════════════════\n   TRUST BAR (LIGHT VERSION)  AB HIER ins GLOBALE CSS DATEI\n═══════════════════════════════════════════════════════ *\/\n.trust-bar {\n  position: relative;\n  background: #ffffff;\n  border-top: 1px solid rgba(191,172,121,0.25);\n  border-bottom: 1px solid rgba(191,172,121,0.25);\n  padding: 28px 40px;\n  overflow: hidden;\n  margin-bottom: 20px;\n}\n\n\/* ✨ subtiler Gold-Shimmer *\/\n.trust-bar::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: -50%;\n  width: 200%; \/* wichtig für sichtbare Bewegung *\/\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent 30%,\n    rgba(191,172,121,0.18) 45%,  \/* stärker sichtbar *\/\n    rgba(191,172,121,0.28) 50%,  \/* Highlight *\/\n    rgba(191,172,121,0.18) 55%,\n    transparent 70%\n  );\n  animation: trustShimmer 5s ease-in-out infinite;\n  pointer-events: none;\n}\n\n@keyframes trustShimmer {\n  0% {\n    transform: translateX(-50%);\n  }\n  100% {\n    transform: translateX(50%);\n  }\n}\n\n.trust-bar-inner {\n  max-width: 1200px;\n  margin: 0 auto;\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 32px;\n  flex-wrap: wrap;\n}\n\n\/* 🔥 Text jetzt dunkler \u0026 edler *\/\n.trust-item-3d {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  font-size: 14px;\n  font-weight: 500;\n  color: #746742;\n}\n\n.trust-item-3d i {\n  font-size: 18px;\n  color: #bfac79; \/* dein Gold *\/\n}\n\n\/* Divider dezenter *\/\n.trust-divider-v {\n  width: 1px;\n  height: 32px;\n  background: rgba(0,0,0,0.08);\n}\n\n\/* 🟢 Live Dot bleibt sichtbar auf weiß *\/\n.live-dot-3d {\n  width: 8px;\n  height: 8px;\n  border-radius: 50%;\n  background: #4caf7d;\n  box-shadow: 0 0 0 0 rgba(76,175,125,.4);\n  animation: livePulse 2s infinite;\n  flex-shrink: 0;\n}\n\n@keyframes livePulse {\n  0% { box-shadow: 0 0 0 0 rgba(76,175,125,.5); }\n  70% { box-shadow: 0 0 0 8px transparent; }\n  100% { box-shadow: 0 0 0 0 transparent; }\n}\n\n    \/* ═══════════════════════════════════════════════════════\n   SECTION SHARED (OPTIMIERT)\n═══════════════════════════════════════════════════════ *\/\n\n    .section-dark {\n        background: #ffff;\n        padding: 120px 40px;\n    }\n\n    .section-cream {\n        background: var(--cream);\n        padding: 120px 40px;\n    }\n\n    .section-mid {\n        background: #ffff;\n        padding: 60px 15px;\n    }\n\n    .container-lg {\n        max-width: 1200px;\n        margin: 0 auto;\n    }\n\n    \/* 🔥 Eyebrow *\/\n    .section-eyebrow {\n        display: inline-block;\n        font-size: 14px;\n        letter-spacing: 4px;\n        text-transform: uppercase;\n        color: #bfac79; \/* Gold sauber definiert *\/\n        font-weight: 700;\n        margin-bottom: 16px;\n    }\n\n    \/* optional override für light *\/\n    .section-eyebrow-dark {\n        color: #bfac79;\n    }\n\n    \/* 🔥 Titel *\/\n    .section-title {\n        font-family: 'Playfair Display', serif;\n        font-size: clamp(28px, 3.5vw, 52px);\n        line-height: 1.1;\n        font-weight: 600;\n        color: #000;\n        margin-bottom: 20px;\n    }\n\n    \/* ✅ Light Mode Titel *\/\n    .section-title-dark {\n        color: #ffffff; \/* statt var(--text) → edler, wärmer *\/\n    }\n\n    \/* 🔥 Subtext *\/\n    .section-sub {\n        font-size: 16px;\n        line-height: 1.7;\n        color: rgb(25 23 23 \/ 70%); \/* vorher zu schwach *\/\n        max-width: 560px;\n    }\n\n    \/* ✅ Light Mode Subtext *\/\n    .section-sub-dark {\n        color: #746742; \/* dein Wunschton *\/\n    }\n\n\/* ═══════════════════════════════════════════════════════\n   WHY \/ FEATURES – 3D CARDS\n═══════════════════════════════════════════════════════ *\/\n.cards-3d-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 24px;\n  margin-top: 64px;\n}\n  @media (max-width: 768px) {\n   .cards-3d-grid {\n     grid-template-columns: repeat(auto-fit, minmax(240px, 1fr))!important;\n   }\n}\n\n.card-3d {\n  position: relative;\n  background: #faf9f7;\n  border: 1px solid rgba(255,255,255,.07);\n  border-radius: 20px;\n  padding: 44px 36px;\n  overflow: hidden;\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n  transform-style: preserve-3d;\n  cursor: default;\n}\n.card-3d::before {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: radial-gradient(ellipse at 30% 0%, rgba(201,168,76,.08) 0%, transparent 60%);\n  opacity: 0;\n  transition: opacity .4s;\n}\n.card-3d::after {\n  content: '';\n  position: absolute;\n  top: 0; left: 0; right: 0;\n  height: 1px;\n  background: linear-gradient(90deg, transparent, var(--gold), transparent);\n  opacity: 0;\n  transition: opacity .4s;\n}\n.card-3d:hover {\n  transform: translateY(-6px);\n  border-color: rgba(201,168,76,.3);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n.card-3d:hover::before, .card-3d:hover::after { opacity: 1; }\n\n.card-3d-icon {\n  width: 56px;\n  height: 56px;\n  border-radius: 16px;\n  background: rgba(201,168,76,.1);\n  border: 1px solid rgba(201,168,76,.2);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 24px;\n  font-size: 24px;\n  color: #bfac79;\n  transition: all .4s;\n}\n.card-3d:hover .card-3d-icon {\n  background: rgba(201,168,76,.18);\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n}\n.card-3d h3 {\n  font-size: 17px;\n  font-weight: 600;\n  color: #000;\n  margin-bottom: 10px;\n}\n.card-3d p {\n  font-size: 14px;\n  line-height: 1.65;\n  color: #555;\n}\n\n\/* Cream variant *\/\n.card-3d-light {\n  background: #fff;\n  border-color: rgba(0,0,0,.06);\n}\n.card-3d-light::before {\n  background: radial-gradient(ellipse at 30% 0%, rgba(201,168,76,.06) 0%, transparent 60%);\n}\n.card-3d-light:hover {\n  box-shadow: 0 32px 80px rgba(0,0,0,.1), 0 0 30px rgba(201,168,76,.08);\n  border-color: rgba(201,168,76,.3);\n}\n.card-3d-light h3 { color: #000; }\n.card-3d-light p { color: #7a6d47; }\n.card-3d-light .card-3d-icon {\n  background: rgba(201,168,76,.08);\n}\n  \/* ═══════════════════════════════════════════════════════\n   SPECS – TWO COLUMN MINIMAL\n═══════════════════════════════════════════════════════ *\/\n.specs-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 60px;\n  margin-top: 60px;\n      border-radius: 30px;\n   background:radial-gradient(ellipse at 30% 0%, rgba(201, 168, 76, .08) 0%, transparent 60%);\n    padding-right: 20px;\n}\n.specs-list {\n  list-style: none;\n}\n.specs-list li {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  padding: 16px 0;\n  border-bottom: 1px solid rgba(255,255,255,.06);\n  font-size: 14px;\n  color: #555;\n}\n.specs-list li i { color: #bfac79;\n    transition: transform 0.3s ease, color 0.3s ease; font-size: 16px; flex-shrink: 0; }\n.specs-list li strong { color: #555; margin-right: 4px; }\n@media (max-width: 768px) { .specs-grid { grid-template-columns: 1fr 1fr; gap: 0; } }\n\/* ═══════════════════════════════════════════════════════\n   SCROLL ANIMATIONS\n═══════════════════════════════════════════════════════ *\/\n.reveal,\n.reveal-left,\n.reveal-right,\n.reveal-scale {\n  opacity: 0;\n  will-change: transform, opacity;\n}\n\n\/* ↓ Standard *\/\n.reveal {\n  transform: translateY(48px);\n  transition: opacity .9s cubic-bezier(.22,1,.36,1),\n              transform .9s cubic-bezier(.22,1,.36,1);\n}\n.reveal.in {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n\/* ↓ LEFT *\/\n.reveal-left {\n  transform: translateX(-60px);\n  transition: opacity 1s cubic-bezier(.22,1,.36,1),\n              transform 1s cubic-bezier(.22,1,.36,1);\n}\n.reveal-left.in {\n  opacity: 1;\n  transform: translateX(0);\n}\n\n\/* ↓ RIGHT *\/\n.reveal-right {\n  transform: translateX(60px);\n  transition: opacity 1s cubic-bezier(.22,1,.36,1),\n              transform 1s cubic-bezier(.22,1,.36,1);\n}\n.reveal-right.in {\n  opacity: 1;\n  transform: translateX(0);\n}\n\n\/* ↓ SCALE *\/\n.reveal-scale {\n  transform: scale(.88);\n  transition: opacity .9s cubic-bezier(.22,1,.36,1),\n              transform .9s cubic-bezier(.22,1,.36,1);\n}\n.reveal-scale.in {\n  opacity: 1;\n  transform: scale(1);\n}\n\n[data-delay=\"1\"] { transition-delay: .1s !important; }\n[data-delay=\"2\"] { transition-delay: .2s !important; }\n[data-delay=\"3\"] { transition-delay: .3s !important; }\n[data-delay=\"4\"] { transition-delay: .4s !important; }\n[data-delay=\"5\"] { transition-delay: .5s !important; }\n[data-delay=\"6\"] { transition-delay: .6s !important; }\n\n  \/* ═══════════════════════════════════════════════════════\n   HERO PRODUCT GRID (two-col section)\n═══════════════════════════════════════════════════════ *\/\n.product-grid-section {\n  padding: 0 40px 120px;\n  background: var(--dark);\n}\n.product-split {\n  max-width: 1200px;\n  margin: 0 auto;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n@media (max-width: 900px) {\n  .product-split { grid-template-columns: 1fr; gap: 48px; }\n}\n\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n    \u003c!-- HERO --\u003e\n    \u003csection class=\"engraving-hero engraving-fade show\"\u003e\n        \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n            \u003cdiv class=\"hero-eyebrow hero-visible\"\u003eGravur mit Liebe · Seit 1991\u003c\/div\u003e\n            \u003cdiv class=\"engraving-hero-grid\"\u003e\n                \u003cdiv class=\"engraving-hero-text\"\u003e\n\n                    \u003ch1\u003eMini Herz Kette mit Gravur | Winziger Edelstahl Herzanhänger mit Initialen\u003c\/h1\u003e\n                    \u003cdiv class=\"hero-subline\"\u003e\n                        \u003cspan class=\"engraving-badge\"\u003e\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\u003c\/span\u003e\n                        \u003ca href=\"#jm-cfg-wrap\" class=\"luxury-shine-btn live-preview-link luxury\"\u003e\u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e Live-Vorschau ansehen\u003c\/a\u003e\n                    \u003c\/div\u003e\n                    \u003cp\u003eKlein, fein und ganz persönlich: Ein winziges Herz aus Edelstahl – nur 6 × 6 mm – an einer zarten Gliederkette. Graviert mit deinen Initialen, einem Buchstaben oder einem Symbol wird es zu einem stillen Liebesbeweis, den man jeden Tag trägt.\u003c\/p\u003e\n                    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003eJetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\u003c\/button\u003e\n\n                    \u003cdiv class=\"micro-trust-valentine\"\u003eMinimalistisch · Persönlich · Mit Liebe graviert\u003c\/div\u003e\n                    \u003cdiv class=\"engraving-trust\"\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl silberfarbig\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-pencil-square\"\u003e\u003c\/i\u003e Gravur vorne \u0026amp; hinten\u003c\/span\u003e\n                        \u003cbutton type=\"button\" class=\"jm-hero-details-btn\" onclick=\"document.getElementById('jm-features-specs').scrollIntoView({behavior:'smooth', block:'start'})\"\u003e\n                            \u003ci class=\"bi bi-list-ul\"\u003e\u003c\/i\u003e Produktdetails ansehen \u003ci class=\"bi bi-chevron-down\"\u003e\u003c\/i\u003e\n                        \u003c\/button\u003e\n                        \u003cdiv class=\"size-info\"\u003e\n                            \u003cdiv class=\"size-badges\"\u003e\n                                \u003cspan class=\"shape-badge\"\u003e\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e Herz: 6 × 6 mm\u003c\/span\u003e\n                                \u003cspan class=\"shape-badge\"\u003e\u003ci class=\"bi bi-link-45deg\"\u003e\u003c\/i\u003e Kette: 38 + 4 cm\u003c\/span\u003e\n                                \u003cspan class=\"shape-badge\"\u003e\u003ci class=\"bi bi-feather\"\u003e\u003c\/i\u003e Nur 1,5 g\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"micro-trust-valentine\"\u003eVerstellbar von 38 bis 42 cm\u003c\/div\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"engraving-image\"\u003e\n                    \u003cdiv class=\"watch-image\"\u003e\n                        \u003c!-- Bilder kommen aus den Produktbildern dieses Produkts (JS) --\u003e\n                        \u003cimg class=\"watch-img-primary\" id=\"mhHeroPrimary\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herz Kette aus Edelstahl mit Gravur\"\u003e\n                        \u003cimg class=\"watch-img-hover\" id=\"mhHeroHover\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herzanhänger getragen\"\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"hero-scroll hero-visible\"\u003e\n            \u003cdiv class=\"scroll-line\"\u003e\u003c\/div\u003e\n            Scroll\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- TRUST BAR --\u003e\n    \u003cdiv class=\"trust-bar \"\u003e\n        \u003cdiv class=\"trust-bar-inner\"\u003e\n            \u003cdiv class=\"trust-item-3d\"\u003e\n                \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eGravur in Deutschland\u003c\/span\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"trust-divider-v\"\u003e\u003c\/div\u003e\n            \u003cdiv class=\"trust-item-3d\"\u003e\n                \u003ci class=\"bi bi-badge-3d\"\u003e\u003c\/i\u003e\n                \u003cspan\u003ePräzisionsgravur seit 1991\u003c\/span\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"trust-divider-v\"\u003e\u003c\/div\u003e\n            \u003cdiv class=\"trust-item-3d\"\u003e\n                \u003cdiv class=\"live-dot-3d\"\u003e\u003c\/div\u003e\n                \u003cspan\u003eLive Vorschau\u003c\/span\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"trust-divider-v\"\u003e\u003c\/div\u003e\n            \u003cdiv class=\"trust-item-3d\"\u003e\n                \u003ci class=\"bi bi-box-seam\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eVersand in 1–3 Werktagen\u003c\/span\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"trust-divider-v\"\u003e\u003c\/div\u003e\n            \u003cdiv class=\"trust-item-3d\"\u003e\n                \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eZufriedenheitsgarantie\u003c\/span\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- GRÖSSE \u0026 KETTENLÄNGE --\u003e\n    \u003csection class=\"jm-rsz-section engraving-fade\"\u003e\n        \u003cdiv class=\"jm-rsz-inner\"\u003e\n            \u003cdiv class=\"jm-rsz-header\"\u003e\n                \u003cspan class=\"jm-rsz-eyebrow\"\u003eJuwelier Milano\u003c\/span\u003e\n                \u003cspan class=\"jm-rsz-title\"\u003eWie klein ist „mini“?\u003c\/span\u003e\n                \u003cspan class=\"jm-rsz-subtitle\"\u003eHerzgröße, Kettenlänge und Gravurfläche – alle Maße einfach erklärt.\u003c\/span\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jm-rsz-grid\"\u003e\n                \u003cdiv class=\"jm-rsz-col jm-rsz-col--svg\"\u003e\n                    \u003cdiv class=\"jm-rsz-svg-wrap\"\u003e\n                        \u003csvg viewbox=\"0 0 180 200\" width=\"180\" height=\"200\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"Größenvergleich: Herz 6 mm neben einer 1-Cent-Münze\"\u003e\n                            \u003cdefs\u003e\n                                \u003cradialgradient id=\"jmMhCoin\" cx=\"45%\" cy=\"40%\" r=\"60%\"\u003e\u003cstop offset=\"0%\" stop-color=\"#e3a879\"\u003e\u003c\/stop\u003e\u003cstop offset=\"100%\" stop-color=\"#8a4f2a\"\u003e\u003c\/stop\u003e\u003c\/radialgradient\u003e\n                                \u003clineargradient id=\"jmMhSteel\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"1\"\u003e\u003cstop offset=\"0%\" stop-color=\"#f4f4f4\"\u003e\u003c\/stop\u003e\u003cstop offset=\"55%\" stop-color=\"#bdbdbd\"\u003e\u003c\/stop\u003e\u003cstop offset=\"100%\" stop-color=\"#8d8d8d\"\u003e\u003c\/stop\u003e\u003c\/lineargradient\u003e\n                                \u003cfilter id=\"jmRszGlow\"\u003e\u003cfegaussianblur stddeviation=\"2\" result=\"blur\"\u003e\u003c\/fegaussianblur\u003e\u003cfemerge\u003e\u003cfemergenode in=\"blur\"\u003e\u003c\/femergenode\u003e\u003cfemergenode in=\"SourceGraphic\"\u003e\u003c\/femergenode\u003e\u003c\/femerge\u003e\u003c\/filter\u003e\n                            \u003c\/defs\u003e\n                            \u003ctext x=\"90\" y=\"16\" text-anchor=\"middle\" font-family=\"Inter, sans-serif\" font-size=\"9.5\" font-weight=\"600\" fill=\"#c9a84c\" letter-spacing=\"0.8\"\u003eORIGINALGRÖSSE IM VERGLEICH\u003c\/text\u003e\n                            \u003c!-- 1-Cent-Münze Ø 16,25 mm (1 mm = 6 Einheiten) --\u003e\n                            \u003ccircle cx=\"58\" cy=\"100\" r=\"48.75\" fill=\"url(#jmMhCoin)\"\u003e\u003c\/circle\u003e\n                            \u003ccircle cx=\"58\" cy=\"100\" r=\"42\" fill=\"none\" stroke=\"rgba(255,255,255,0.25)\" stroke-width=\"1\"\u003e\u003c\/circle\u003e\n                            \u003ctext x=\"58\" y=\"106\" text-anchor=\"middle\" font-family=\"Playfair Display, serif\" font-size=\"18\" fill=\"rgba(255,255,255,0.55)\"\u003e1\u003c\/text\u003e\n                            \u003ctext x=\"58\" y=\"166\" text-anchor=\"middle\" font-family=\"Inter, sans-serif\" font-size=\"9\" fill=\"#8a7055\"\u003e1 Cent · Ø 16,25 mm\u003c\/text\u003e\n                            \u003c!-- Herz 6 × 6 mm = 36 Einheiten --\u003e\n                            \u003cg transform=\"translate(122,82)\" filter=\"url(#jmRszGlow)\"\u003e\n                                \u003cpath d=\"M18,36 C6,26 0,19 0,11 C0,4.5 4.5,0 10,0 C13.5,0 16.3,2 18,5 C19.7,2 22.5,0 26,0 C31.5,0 36,4.5 36,11 C36,19 30,26 18,36 Z\" fill=\"url(#jmMhSteel)\"\u003e\u003c\/path\u003e\n                                \u003ctext x=\"18\" y=\"19\" text-anchor=\"middle\" font-family=\"Playfair Display, serif\" font-size=\"10\" fill=\"#6f6f72\"\u003eAM\u003c\/text\u003e\n                            \u003c\/g\u003e\n                            \u003cline x1=\"122\" y1=\"128\" x2=\"158\" y2=\"128\" stroke=\"#e8c96a\" stroke-width=\"1\" stroke-dasharray=\"3,2\"\u003e\u003c\/line\u003e\n                            \u003cpolygon points=\"122,128 127,125.5 127,130.5\" fill=\"#e8c96a\"\u003e\u003c\/polygon\u003e\n                            \u003cpolygon points=\"158,128 153,125.5 153,130.5\" fill=\"#e8c96a\"\u003e\u003c\/polygon\u003e\n                            \u003ctext x=\"140\" y=\"142\" text-anchor=\"middle\" font-family=\"Playfair Display, serif\" font-size=\"11.5\" fill=\"#e8c96a\"\u003e6 mm\u003c\/text\u003e\n                            \u003ctext x=\"140\" y=\"166\" text-anchor=\"middle\" font-family=\"Inter, sans-serif\" font-size=\"9\" fill=\"#8a7055\"\u003eHerz 6 × 6 mm\u003c\/text\u003e\n                        \u003c\/svg\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-rsz-col jm-rsz-col--anno\"\u003e\n                    \u003cdiv class=\"jm-rsz-anno\"\u003e\n                        \u003cspan class=\"jm-rsz-anno-label\"\u003eGewählte Länge\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-value\" id=\"jm-mh-anno-len\"\u003e38 cm\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-desc\" id=\"jm-mh-anno-fit\"\u003eSitzt dicht am Halsansatz – zart und dezent.\u003c\/span\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"jm-rsz-anno\"\u003e\n                        \u003cspan class=\"jm-rsz-anno-label\"\u003eHerzanhänger\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-value\"\u003e6 × 6 mm · 1,5 g\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-desc\"\u003eKleiner als ein Fingernagel und federleicht – du spürst die Kette kaum.\u003c\/span\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"jm-rsz-anno\"\u003e\n                        \u003cspan class=\"jm-rsz-anno-label\"\u003eGravurfläche\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-value\"\u003eje Seite max. 2 Zeichen\u003c\/span\u003e\u003cspan class=\"jm-rsz-anno-desc\"\u003eVorderseite und – optional – Rückseite: Auf jeder Seite bleiben \u003cstrong\u003ezwei Zeichen\u003c\/strong\u003e klar lesbar – z. B. vorne „AM“, hinten ein ♥.\u003c\/span\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"jm-rgt-warning\"\u003e\n                        \u003ci class=\"bi bi-info-circle-fill jm-rgt-warning-icon\"\u003e\u003c\/i\u003e\u003cdiv\u003e\n                            \u003cspan class=\"jm-rgt-warning-title\"\u003eWarum nur 2 Zeichen?\u003c\/span\u003e\u003cspan class=\"jm-rgt-warning-text\"\u003eDas Herz misst nur 6 mm. Mit \u003cstrong\u003ezwei Zeichen\u003c\/strong\u003e wird jede Gravur groß genug, um sie mit bloßem Auge zu erkennen – mehr Zeichen würden zu winzig und unleserlich.\u003c\/span\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-rsz-col jm-rsz-col--guide\"\u003e\n                    \u003cspan class=\"jm-rsz-block-title\"\u003eLänge einstellen\u003c\/span\u003e\n                    \u003cdiv class=\"jm-rsz-steps\"\u003e\n                        \u003cdiv class=\"jm-rsz-step\"\u003e\n                            \u003cdiv class=\"jm-rsz-step-num\"\u003e1\u003c\/div\u003e\n                            \u003cdiv\u003e\n                                \u003cspan class=\"jm-rsz-step-title\"\u003eGrundlänge 38 cm\u003c\/span\u003e\u003cspan class=\"jm-rsz-step-text\"\u003eDie feine Gliederkette ist \u003cstrong\u003e38 cm\u003c\/strong\u003e lang.\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"jm-rsz-step\"\u003e\n                            \u003cdiv class=\"jm-rsz-step-num\"\u003e2\u003c\/div\u003e\n                            \u003cdiv\u003e\n                                \u003cspan class=\"jm-rsz-step-title\"\u003e+ 4 cm Verlängerung\u003c\/span\u003e\u003cspan class=\"jm-rsz-step-text\"\u003eAm Ende sitzen \u003cstrong\u003everstellbare Ösen\u003c\/strong\u003e – für bis zu 42 cm.\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"jm-rsz-step\"\u003e\n                            \u003cdiv class=\"jm-rsz-step-num\"\u003e3\u003c\/div\u003e\n                            \u003cdiv\u003e\n                                \u003cspan class=\"jm-rsz-step-title\"\u003eEinhängen\u003c\/span\u003e\u003cspan class=\"jm-rsz-step-text\"\u003eVerschluss in die gewünschte Öse einhängen – \u003cstrong\u003efertig\u003c\/strong\u003e.\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                    \u003cspan class=\"jm-rsz-block-title\"\u003eWo sitzt die Kette?\u003c\/span\u003e\n                    \u003cdiv class=\"jm-rsz-table-wrap\"\u003e\n                        \u003ctable class=\"jm-rsz-table\"\u003e\n                            \u003cthead class=\"jm-rsz-thead\"\u003e\n                                \u003ctr class=\"jm-rsz-tr\"\u003e\n                                    \u003cth class=\"jm-rsz-th\"\u003eLänge\u003c\/th\u003e\n                                    \u003cth class=\"jm-rsz-th\"\u003eSitz (ca.)\u003c\/th\u003e\n                                \u003c\/tr\u003e\n                            \u003c\/thead\u003e\n                            \u003ctbody class=\"jm-rsz-tbody\"\u003e\n                                \u003ctr class=\"jm-rsz-tr jm-rsz-hl\" data-len=\"38\" data-fit=\"Sitzt dicht am Halsansatz – zart und dezent.\"\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003e38 cm \u003cspan class=\"jm-rsz-hl-badge\"\u003eGewählt\u003c\/span\u003e\n\u003c\/td\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003eDicht am Halsansatz\u003c\/td\u003e\n                                \u003c\/tr\u003e\n                                \u003ctr class=\"jm-rsz-tr\" data-len=\"40\" data-fit=\"Liegt locker zwischen Hals und Schlüsselbein – der Klassiker.\"\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003e40 cm \u003cspan class=\"jm-rsz-hl-badge\"\u003eGewählt\u003c\/span\u003e\n\u003c\/td\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003eZwischen Hals \u0026amp; Schlüsselbein\u003c\/td\u003e\n                                \u003c\/tr\u003e\n                                \u003ctr class=\"jm-rsz-tr\" data-len=\"42\" data-fit=\"Fällt bis etwa aufs Schlüsselbein – ideal zum Layering.\"\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003e42 cm \u003cspan class=\"jm-rsz-hl-badge\"\u003eGewählt\u003c\/span\u003e\n\u003c\/td\u003e\n                                    \u003ctd class=\"jm-rsz-td\"\u003eEtwa am Schlüsselbein\u003c\/td\u003e\n                                \u003c\/tr\u003e\n                            \u003c\/tbody\u003e\n                        \u003c\/table\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n\n    \u003c!-- WHY --\u003e\n    \u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n        \u003cdiv class=\"container\"\u003e\n            \u003ch2\u003eWarum ein Mini-Herz mit Gravur?\u003c\/h2\u003e\n            \u003cp\u003eDie schönsten Botschaften sind oft die leisesten. Ein winziges Herz mit zwei Zeichen – nur du weißt, wofür sie stehen. Minimalistisch getragen, maximal bedeutungsvoll.\u003c\/p\u003e\n            \u003cdiv class=\"engraving-why-grid\"\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\u003ch3\u003eZart \u0026amp; minimalistisch\u003c\/h3\u003e\n                    \u003cp\u003eNur 6 × 6 mm und 1,5 g – perfekt für jeden Tag, allein oder im Layering mit anderen Ketten.\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\u003ch3\u003eZwei Zeichen, eine Geschichte\u003c\/h3\u003e\n                    \u003cp\u003eDeine Initialen, die eines geliebten Menschen, ein Buchstabe mit ♥ – klein graviert, groß in der Bedeutung.\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\u003ch3\u003eEdelstahl silberfarbig\u003c\/h3\u003e\n                    \u003cp\u003eRobust, hautfreundlich und pflegeleicht – mit klarem, silberfarbigem Glanz.\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\u003ch3\u003eDas kleine Geschenk mit Gefühl\u003c\/h3\u003e\n                    \u003cp\u003eFür Freundin, Partnerin, Mama, Schwester oder Tochter – zum Geburtstag, Jahrestag oder einfach so.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n\n    \u003c!-- SHIPPING --\u003e\n    \u003csection class=\"engraving-shipping engraving-fade\"\u003e\n        \u003cdiv class=\"container\"\u003e\n            \u003ch2\u003eSorgfältig gefertigt \u0026amp; sicher geliefert\u003c\/h2\u003e\n            \u003cdiv class=\"engraving-shipping-grid\"\u003e\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n                    \u003cp\u003eVersand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e nach Gravur – sorgfältig \u0026amp; sicher verpackt.\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n                    \u003cp\u003eJede Gravur entsteht in unserem Familienbetrieb – \u003cstrong\u003ekein Dropshipping\u003c\/strong\u003e, keine externe Arbeit.\u003c\/p\u003e\n                    \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert.\u003c\/p\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n                    \u003cp\u003eSichere Zahlung, persönlicher Support und höchste Qualitätskontrolle vor dem Versand.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n\n    \u003c!-- ════════════════════════════════════════\n         FEATURES + SPECS\n    ════════════════════════════════════════ --\u003e\n    \u003csection class=\"section-mid\" id=\"jm-features-specs\"\u003e\n        \u003cdiv class=\"container-lg\"\u003e\n            \u003cdiv class=\"product-split\"\u003e\n                \u003c!-- Features --\u003e\n                \u003cdiv class=\"reveal-left\"\u003e\n                    \u003cspan class=\"section-eyebrow\"\u003eFeatures\u003c\/span\u003e\n                    \u003ch2 class=\"section-title\" style=\"font-size:clamp(24px,2.8vw,40px);\"\u003eKlein im Format.\u003cbr\u003eGroß im Gefühl.\u003c\/h2\u003e\n                    \u003cp class=\"section-sub\" style=\"margin-bottom:40px;\"\u003eEin filigranes Herz, das jeden Look begleitet – und mit deiner Gravur einzigartig wird.\u003c\/p\u003e\n                    \u003cdiv class=\"cards-3d-grid\" style=\"grid-template-columns:1fr 1fr;gap:16px;margin-top:0;\"\u003e\n                        \u003cdiv class=\"card-3d\" style=\"padding:28px 24px;\"\u003e\n                            \u003cdiv class=\"card-3d-icon\" style=\"width:44px;height:44px;font-size:18px;margin-bottom:16px;\"\u003e\u003ci class=\"bi bi-pencil-square\"\u003e\u003c\/i\u003e\u003c\/div\u003e\n                            \u003ch3 style=\"font-size:15px;\"\u003eGravur inklusive\u003c\/h3\u003e\n                            \u003cp style=\"font-size:13px;\"\u003eVorder- \u0026amp; Rückseite – je bis zu 2 Zeichen.\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"card-3d\" style=\"padding:28px 24px;\"\u003e\n                            \u003cdiv class=\"card-3d-icon\" style=\"width:44px;height:44px;font-size:18px;margin-bottom:16px;\"\u003e\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\u003c\/div\u003e\n                            \u003ch3 style=\"font-size:15px;\"\u003eVerstellbar\u003c\/h3\u003e\n                            \u003cp style=\"font-size:13px;\"\u003e38 cm + 4 cm Verlängerung – passt sich deinem Look an.\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"card-3d\" style=\"padding:28px 24px;\"\u003e\n                            \u003cdiv class=\"card-3d-icon\" style=\"width:44px;height:44px;font-size:18px;margin-bottom:16px;\"\u003e\u003ci class=\"bi bi-feather\"\u003e\u003c\/i\u003e\u003c\/div\u003e\n                            \u003ch3 style=\"font-size:15px;\"\u003eFederleicht\u003c\/h3\u003e\n                            \u003cp style=\"font-size:13px;\"\u003eNur 1,5 g – angenehm zu tragen, Tag und Nacht.\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"card-3d\" style=\"padding:28px 24px;\"\u003e\n                            \u003cdiv class=\"card-3d-icon\" style=\"width:44px;height:44px;font-size:18px;margin-bottom:16px;\"\u003e\u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\u003c\/div\u003e\n                            \u003ch3 style=\"font-size:15px;\"\u003eElegant verpackt\u003c\/h3\u003e\n                            \u003cp style=\"font-size:13px;\"\u003eHochwertige Verpackung – sofort bereit als Geschenk.\u003c\/p\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n\n                \u003c!-- Specs --\u003e\n                \u003cdiv class=\"reveal-right\"\u003e\n                    \u003cspan class=\"section-eyebrow\"\u003eProduktdetails\u003c\/span\u003e\n                    \u003ch2 class=\"section-title\" style=\"font-size:clamp(24px,2.8vw,40px);\"\u003eTechnische\u003cbr\u003eSpezifikationen\u003c\/h2\u003e\n                    \u003cdiv class=\"specs-grid\" style=\"margin-top:36px;gap:0;\"\u003e\n                        \u003cul class=\"specs-list\"\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eTyp:\u003c\/strong\u003e Herzanhänger mit Kette\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eFarbe:\u003c\/strong\u003e Silberfarbig\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eHerz:\u003c\/strong\u003e 6 × 6 mm\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eFür:\u003c\/strong\u003e Damen\u003c\/span\u003e\n\u003c\/li\u003e\n                        \u003c\/ul\u003e\n                        \u003cul class=\"specs-list\"\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-link-45deg\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eKette:\u003c\/strong\u003e feine Gliederkette\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eLänge:\u003c\/strong\u003e 38 + 4 cm (verstellbar)\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-box-seam\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eGewicht:\u003c\/strong\u003e 1,5 g\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eGravur:\u003c\/strong\u003e Vorder- \u0026amp; Rückseite · je 2 Zeichen · kostenlos\u003c\/span\u003e\n\u003c\/li\u003e\n                            \u003cli\u003e\n\u003ci class=\"bi bi-droplet-half\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003ePflege:\u003c\/strong\u003e Parfüm \u0026amp; Chemikalien meiden\u003c\/span\u003e\n\u003c\/li\u003e\n                        \u003c\/ul\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n\n    \u003c!-- 3-SCHRITT KONFIGURATOR --\u003e\n    \u003cdiv class=\"jm-cfg-wrap\" id=\"jm-cfg-wrap\"\u003e\n        \u003cdiv class=\"hero-particles\" id=\"heroParticles\"\u003e\u003c\/div\u003e\n        \u003cdiv class=\"jm-cfg-header\"\u003e\n            \u003cspan class=\"jm-cfg-eyebrow\"\u003eJuwelier Milano · Gravur-Studio\u003c\/span\u003e\n            \u003ch2 class=\"jm-cfg-headline\"\u003eZwei Zeichen. Eine Geschichte.\u003c\/h2\u003e\n            \u003cp class=\"jm-cfg-subline\"\u003eGestalte in 3 Schritten deine persönliche Gravur – und sieh sofort, wie sie auf dem Mini-Herz wirkt. Kostenlos, präzise und mit Liebe gefertigt.\u003c\/p\u003e\n            \u003cdiv class=\"jm-cfg-steps\"\u003e\n                \u003cdiv class=\"jm-cfg-step-item active\" id=\"jm-cfg-si-1\"\u003e\n                    \u003cdiv class=\"jm-cfg-step-circle\" id=\"jm-cfg-sc-1\"\u003e1\u003c\/div\u003e\n                    \u003cspan class=\"jm-cfg-step-label\"\u003eSchmuckstück\u003c\/span\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-step-line\" id=\"jm-cfg-line-1\"\u003e\u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-step-item\" id=\"jm-cfg-si-2\"\u003e\n                    \u003cdiv class=\"jm-cfg-step-circle\" id=\"jm-cfg-sc-2\"\u003e2\u003c\/div\u003e\n                    \u003cspan class=\"jm-cfg-step-label\"\u003eGravur\u003c\/span\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-step-line\" id=\"jm-cfg-line-2\"\u003e\u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-step-item\" id=\"jm-cfg-si-3\"\u003e\n                    \u003cdiv class=\"jm-cfg-step-circle\" id=\"jm-cfg-sc-3\"\u003e3\u003c\/div\u003e\n                    \u003cspan class=\"jm-cfg-step-label\"\u003eBestätigung\u003c\/span\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jm-cfg-progress-bar\"\u003e\u003cdiv class=\"jm-cfg-progress-fill\" id=\"jm-cfg-progress\"\u003e\u003c\/div\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- SCHRITT 1 --\u003e\n        \u003cdiv class=\"jm-cfg-card active\" id=\"jm-cfg-card-1\"\u003e\n            \u003cdiv class=\"jm-cfg-card-body\"\u003e\n                \u003cdiv class=\"jm-cfg-s1-grid\"\u003e\n                    \u003cdiv class=\"jm-cfg-s1-left\"\u003e\n                        \u003ch3\u003eDein Mini-Herz\u003c\/h3\u003e\n                        \u003cp\u003eEin Schmuckstück, das du kaum spürst – aber nie vergisst. Das steckt drin:\u003c\/p\u003e\n                        \u003cdiv class=\"jm-mh-facts\"\u003e\n                            \u003cdiv class=\"jm-mh-fact\"\u003e\n                                \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                                \u003cspan class=\"jm-mh-fact-info\"\u003e\u003cspan class=\"jm-mh-fact-name\"\u003eHerzanhänger 6 × 6 mm\u003c\/span\u003e\u003cspan class=\"jm-mh-fact-desc\"\u003eEdelstahl · silberfarbig · 1,5 g\u003c\/span\u003e\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"jm-mh-fact\"\u003e\n                                \u003ci class=\"bi bi-link-45deg\"\u003e\u003c\/i\u003e\n                                \u003cspan class=\"jm-mh-fact-info\"\u003e\u003cspan class=\"jm-mh-fact-name\"\u003eFeine Gliederkette 38 + 4 cm\u003c\/span\u003e\u003cspan class=\"jm-mh-fact-desc\"\u003eStufenlos über die Ösen von 38 bis 42 cm\u003c\/span\u003e\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"jm-mh-fact\"\u003e\n                                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                                \u003cspan class=\"jm-mh-fact-info\"\u003e\u003cspan class=\"jm-mh-fact-name\"\u003eGravur vorne \u0026amp; hinten inklusive\u003c\/span\u003e\u003cspan class=\"jm-mh-fact-desc\"\u003eJe Seite max. 2 Zeichen – Rückseite optional\u003c\/span\u003e\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"jm-cfg-size-strip\"\u003e\n                            \u003cstrong\u003eMini-Herz 6 × 6 mm\u003c\/strong\u003e · Kette 38 + 4 cm · Edelstahl silberfarbig\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"jm-cfg-s1-right\"\u003e\n                        \u003cdiv class=\"jm-cfg-ring-img-wrap\"\u003e\n                            \u003cimg class=\"jm-cfg-ring-img-primary\" id=\"mhCfgPrimary\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herz Kette Edelstahl\"\u003e\n                            \u003cimg class=\"jm-cfg-ring-img-hover\" id=\"mhCfgHover\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herz Kette getragen\"\u003e\n                            \u003cspan class=\"jm-cfg-ring-img-label\"\u003eMini-Herz\u003c\/span\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"jm-cfg-ring-img-caption\"\u003eEdelstahl · silberfarbig\u003c\/p\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jm-cfg-card-footer\"\u003e\n                \u003cbutton class=\"jm-cfg-btn-back\" hidden\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Zurück\u003c\/button\u003e\n                \u003cbutton class=\"jm-cfg-btn-next\" id=\"jm-cfg-next-1\"\u003eWeiter zur Gravur \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e\u003c\/button\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- SCHRITT 2 --\u003e\n        \u003cdiv class=\"jm-cfg-card\" id=\"jm-cfg-card-2\"\u003e\n            \u003cdiv class=\"jm-cfg-card-body jm-cfg-s2-wrap\"\u003e\n                \u003csection class=\"engraving-preview-section\"\u003e\n                    \u003cdiv class=\"engraving-preview-grid\"\u003e\n                        \u003cdiv class=\"engraving-preview-image\" id=\"previewImageWrap\"\u003e\n                            \u003cdiv class=\"jm-mh-stage\"\u003e\n                                \u003c!-- Eigene ID: wird nicht vom globalen theme.js überschrieben --\u003e\n                                \u003cspan class=\"jm-mh-side-label\" id=\"mhStep2SideLabel\"\u003eVorderseite\u003c\/span\u003e\n                                \u003cimg id=\"mhStep2Img\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herz Gravur Vorschau\"\u003e\n                                \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n                                    \u003csvg id=\"engravingArcSvg\" viewbox=\"0 0 100 100\" preserveaspectratio=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n                                        \u003cdefs\u003e\u003cpath id=\"ringArcPath\" d=\"M 35,52 L 65,52\" fill=\"none\"\u003e\u003c\/path\u003e\u003c\/defs\u003e\n                                        \u003ctext class=\"engraving-arc-text\"\u003e\n                                            \u003ctextpath href=\"#ringArcPath\" id=\"engravingArcTextEl\" startoffset=\"50%\" text-anchor=\"middle\"\u003eAM\u003c\/textpath\u003e\n                                        \u003c\/text\u003e\n                                    \u003c\/svg\u003e\n                                    \u003cspan id=\"engravingPreviewText\" style=\"display:none;\"\u003eAM\u003c\/span\u003e\n                                    \u003cspan class=\"preview-check\" style=\"position:absolute;top:30%;right:14%;font-size:2rem;line-height:1;\"\u003e\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e\u003c\/span\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n                            \u003cp class=\"engraving-preview-note\"\u003e✦ Die Vorschau ist vergrößert dargestellt – das Herz misst in echt 6 × 6 mm. Jede Gravur ist handwerkliches Unikat; Schriftgröße und Position werden optimal angepasst.\u003c\/p\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n                            \u003cspan class=\"innengravur-badge\"\u003e\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Gravur · Kostenlos \u0026amp; Persönlich\u003c\/span\u003e\n                            \u003ch2\u003eMach dein Mini-Herz einzigartig\u003c\/h2\u003e\n                            \u003cp\u003eGestalte die Vorderseite – und auf Wunsch auch die Rückseite – mit je bis zu zwei Zeichen und sieh sofort, wie dein Herz aussieht.\u003c\/p\u003e\n                            \u003cdiv class=\"jm-mh-limit\"\u003e\n\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e\u003cspan\u003eDas Herz ist nur 6 mm groß – deshalb sind \u003cstrong\u003eje Seite maximal 2 Zeichen\u003c\/strong\u003e möglich. Ein Symbol zählt als 1 Zeichen.\u003c\/span\u003e\n\u003c\/div\u003e\n                            \u003cdiv class=\"jm-mh-sides\" role=\"tablist\" aria-label=\"Gravurseite wählen\"\u003e\n                                \u003cbutton type=\"button\" class=\"jm-mh-side active\" data-side=\"front\" role=\"tab\" aria-selected=\"true\"\u003eVorderseite\u003csmall id=\"jm-mh-side-front\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"jm-mh-side\" data-side=\"back\" role=\"tab\" aria-selected=\"false\"\u003eRückseite \u003cem\u003eoptional\u003c\/em\u003e\u003csmall id=\"jm-mh-side-back\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"engraving-input-wrap\"\u003e\n                                \u003clabel for=\"engravingInput\" id=\"engravingInputLabel\"\u003eGravur Vorderseite\u003c\/label\u003e\n                                \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"2\" placeholder=\"z. B. AM | J♥\" autocomplete=\"off\"\u003e\n                                \u003csmall id=\"engravingCounter\"\u003eMax. 2 Zeichen · Buchstaben, Zahlen \u0026amp; Symbole\u003c\/small\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"engraving-symbol-picker\"\u003e\n                                \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n                                \u003cdiv class=\"symbol-list\"\u003e\n                                    \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"♥\"\u003e♥\u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"∞\"\u003e∞\u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"★\"\u003e★\u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"✝\"\u003e✝\u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"❥\"\u003e❥\u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"engraving-font-picker\"\u003e\n                                \u003clabel class=\"font-picker-label\"\u003eSchriftart wählen\u003c\/label\u003e\n                                \u003cdiv class=\"font-group\"\u003e\n                                    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\u003cdiv class=\"font-group-buttons\"\u003e\n                                        \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003eTimes New Roman\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003eGeorgia\u003c\/button\u003e\n                                    \u003c\/div\u003e\n                                \u003c\/div\u003e\n                                \u003cdiv class=\"font-group\"\u003e\n                                    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\u003cdiv class=\"font-group-buttons\"\u003e\n                                        \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003eArial\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003eHelvetica\u003c\/button\u003e\n                                    \u003c\/div\u003e\n                                \u003c\/div\u003e\n                                \u003cdiv class=\"font-group\"\u003e\n                                    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\u003cdiv class=\"font-group-buttons\"\u003e\n                                        \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003eCourier New\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003eLucida Console\u003c\/button\u003e\n                                    \u003c\/div\u003e\n                                \u003c\/div\u003e\n                                \u003cdiv class=\"font-group\"\u003e\n                                    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\u003cdiv class=\"font-group-buttons\"\u003e\n                                        \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003eAllura\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003eAlex Brush\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003eKaushan Script\u003c\/button\u003e\n                                    \u003c\/div\u003e\n                                \u003c\/div\u003e\n                                \u003cdiv class=\"font-group\"\u003e\n                                    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\u003cdiv class=\"font-group-buttons\"\u003e\n                                        \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003ePacifico\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003eIndie Flower\u003c\/button\u003e\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003eDancing Script\u003c\/button\u003e\n                                    \u003c\/div\u003e\n                                \u003c\/div\u003e\n                                \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n                            \u003c\/div\u003e\n                            \u003cspan class=\"jm-grav-trust-line\"\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\u003c\/span\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/section\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jm-cfg-card-footer\"\u003e\n                \u003cbutton class=\"jm-cfg-btn-back\" id=\"jm-cfg-back-2\"\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Zurück\u003c\/button\u003e\n                \u003cbutton class=\"jm-cfg-btn-next\" id=\"jm-cfg-next-2\"\u003eZur Bestätigung \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e\u003c\/button\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- SCHRITT 3 --\u003e\n        \u003cdiv class=\"jm-cfg-card\" id=\"jm-cfg-card-3\"\u003e\n            \u003cdiv class=\"jm-cfg-card-body\"\u003e\n                \u003ch3 class=\"jm-cfg-s3-title\"\u003eDeine Konfiguration im Überblick\u003c\/h3\u003e\n                \u003cp class=\"jm-cfg-s3-subtitle\"\u003ePrüfe alle Angaben, bevor du sie in den Warenkorb legst.\u003c\/p\u003e\n                \u003cdiv class=\"jm-cfg-s3-grid\"\u003e\n                    \u003cimg class=\"jm-cfg-s3-thumb\" id=\"jm-cfg-s3-thumb\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Mini Herz Kette\"\u003e\n                    \u003cdiv\u003e\n                        \u003cp class=\"jm-cfg-s3-product-name\"\u003eMini Herz Kette mit Gravur\u003c\/p\u003e\n                        \u003cdiv class=\"jm-cfg-s3-rows\"\u003e\n                            \u003cdiv class=\"jm-cfg-s3-row\"\u003e\n                                \u003cspan class=\"jm-cfg-s3-row-label\"\u003eAnhänger\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\"\u003eHerz 6 × 6 mm · Edelstahl\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"jm-cfg-s3-row\"\u003e\n                                \u003cspan class=\"jm-cfg-s3-row-label\"\u003eKette\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\"\u003e38 + 4 cm · verstellbar\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"jm-cfg-s3-row\"\u003e\n                                \u003cspan class=\"jm-cfg-s3-row-label\"\u003eGravur\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-sides\"\u003eVorderseite · kostenlos\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-s3-gravur-box\"\u003e\n                    \u003cspan class=\"jm-cfg-s3-gravur-eyebrow\"\u003eDeine Gravur\u003c\/span\u003e\n                    \u003cdiv class=\"jm-cfg-s3-gravur-text\" id=\"jm-cfg-s3-gravur-text\"\u003e–\u003c\/div\u003e\n                    \u003cspan class=\"jm-cfg-s3-gravur-meta\" id=\"jm-cfg-s3-gravur-meta\"\u003eSchriftart: Playfair Display\u003c\/span\u003e\n                    \u003cdiv style=\"margin-top:14px;padding-top:12px;border-top:1px solid rgba(201,168,76,0.2);\"\u003e\n                        \u003cspan style=\"display:block;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:#c9a84c;font-weight:700;margin-bottom:10px;\"\u003eGewählte Schriftart\u003c\/span\u003e\n                        \u003cdiv id=\"jm-cfg-s3-font-preview\" style=\"display:inline-block;padding:10px 18px;border:2px solid #c9a84c;border-radius:12px;background:rgba(201,168,76,0.12);color:#f7f0e3;font-size:1.3rem;letter-spacing:0.05em;box-shadow:0 4px 14px rgba(0,0,0,0.15);\"\u003e\u003c\/div\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n                \u003cdiv class=\"jm-cfg-s3-price-wrap\" id=\"jm-cfg-s3-price\"\u003e\u003c\/div\u003e\n                \u003cbutton type=\"button\" class=\"engraving-collection-btn jm-cfg-s3-cta\" id=\"jm-cfg-s3-cta-btn\" style=\"width:100%;justify-content:center;font-size:15px;padding:18px 32px;\"\u003e\n                    \u003ci class=\"bi bi-bag-check\"\u003e\u003c\/i\u003e Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                \u003c\/button\u003e\n                \u003cdiv class=\"jm-cfg-s3-trust\"\u003e\n                    \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Gravur in Deutschland\u003c\/span\u003e\n                    \u003cspan\u003e\u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e Versand 1–3 Werktage\u003c\/span\u003e\n                    \u003cspan\u003e\u003ci class=\"bi bi-lock\"\u003e\u003c\/i\u003e Sichere Zahlung\u003c\/span\u003e\n                \u003c\/div\u003e\n                \u003cp class=\"jm-cfg-s3-note\"\u003e✦ Personalisierte Produkte sind vom Umtausch ausgeschlossen.\u003cbr\u003eBitte prüfe deine Angaben sorgfältig.\u003c\/p\u003e\n            \u003c\/div\u003e\n            \u003cdiv class=\"jm-cfg-card-footer\"\u003e\n                \u003cbutton class=\"jm-cfg-btn-back\" id=\"jm-cfg-back-3\"\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Gravur ändern\u003c\/button\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n\n    \u003c\/div\u003e\n    \u003c!-- \/jm-cfg-wrap --\u003e\n    \u003c!-- CTA STRIP --\u003e\n    \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\n        \u003ci class=\"bi bi-stars\" style=\"font-size:6rem;color:#c0a860;\"\u003e\u003c\/i\u003e\n        \u003ch2 style=\"margin-top:15px;\"\u003eDeine Gravur.\u003cbr\u003e Deine Geschichte.\u003c\/h2\u003e\n        \u003cp\u003eEin kleines Herz, das mehr sagt als Worte.\u003c\/p\u003e\n        \u003cp\u003eHandarbeit mit Herz. Wir verewigen Emotionen – präzise, hochwertig und mit Respekt.\u003c\/p\u003e\n        \u003cp style=\"color:#fff;font-weight:400;\"\u003eExcellence seit 1991.\u003c\/p\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003eJetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\u003c\/button\u003e\n    \u003c\/section\u003e\n\n\u003c\/div\u003e\u003c!-- \/engraving-product --\u003e\n\u003c!-- MOBILE POPUP --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n    \u003cdiv class=\"popup-preview\" style=\"position:relative;margin-bottom:10px;\"\u003e\n        \u003cdiv class=\"jm-mh-stage\"\u003e\n            \u003c!-- Eigene ID: wird nicht vom globalen theme.js überschrieben --\u003e\n            \u003cspan class=\"jm-mh-side-label\" id=\"mhPopupSideLabel\"\u003eVorderseite\u003c\/span\u003e\n            \u003cimg id=\"mhPopupImg\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Gravur Vorschau Mobile\"\u003e\n            \u003cdiv class=\"engraving-overlay active\"\u003e\n                \u003csvg viewbox=\"0 0 100 100\" preserveaspectratio=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n                    \u003cdefs\u003e\u003cpath id=\"popupArcPath\" d=\"M 35,52 L 65,52\" fill=\"none\"\u003e\u003c\/path\u003e\u003c\/defs\u003e\n                    \u003ctext class=\"engraving-arc-popup-text\"\u003e\n                        \u003ctextpath href=\"#popupArcPath\" id=\"popupArcTextEl\" startoffset=\"50%\" text-anchor=\"middle\"\u003e\u003c\/textpath\u003e\n                    \u003c\/text\u003e\n                \u003c\/svg\u003e\n                \u003cspan class=\"popup-preview-check\"\u003e\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e\u003c\/span\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cbutton type=\"button\" class=\"engraving-collection-btn\" id=\"jm-cfg-popup-next\"\u003e\n        Zur Bestätigung \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e\n    \u003c\/button\u003e\n\u003c\/div\u003e\n\n\n\u003cscript\u003e\/* ═══════════════════════════════════════════════════════════════\n   JUWELIER MILANO – MINI HERZ KETTE MIT GRAVUR\n   Basis: Siegelring-Template · Gravur-Logik wie Herzring\n   Gravur: Vorderseite + optional Rückseite · je max. 2 Zeichen\n   Bilder kommen aus den Produktbildern DIESES Produkts (keine festen URLs)\n   ═══════════════════════════════════════════════════════════════ *\/\n\n\n\/* ════════════════════════════════════════════════════════════\n   GRAVUR-POSITION  (Werte mit ?jmtweak=1 ermitteln)\n   Ziele:\n     step2_desktop – Gravur-Studio Schritt 2, Desktop\n     step2_mobile  – Gravur-Studio Schritt 2, Mobile\n     popup         – Mobile-Popup unten (Gravur-Studio)\n     panel         – Live-Vorschau oben, Desktop-Panel\n     mfp           – Live-Vorschau oben, Mobile-Popup\n   Werte in % der Bildfläche:\n     cx\/cy = Mitte · w = Breite · tilt = Winkel (+ = rechts höher)\n     bulge = Wölbung (0 = gerade Linie) · rot = Drehung ° · size = Schriftgröße\n     offset = Textposition auf der Linie · spacing = Zeichenabstand\n   Ziele ohne Eintrag bleiben unverändert.\n   ════════════════════════════════════════════════════════════ *\/\nvar JM_ARC = {\n    step2_desktop: { default: { cx: 50.5, cy: 76, w: 30, tilt: 0, bulge: 0, rot: 0, size: 8, offset: 50, spacing: 0 } },\n    step2_mobile:  { default: { cx: 50, cy: 77.5, w: 30, tilt: 0, bulge: 0, rot: 0, size: 7, offset: 50, spacing: 0 } },\n    popup:         { default: { cx: 49.5, cy: 77.5, w: 30, tilt: 0, bulge: 0, rot: 0, size: 8, offset: 50, spacing: 0 } },\n    panel:         { default: { cx: 50, cy: 76, w: 29, tilt: 0, bulge: 0, rot: 0, size: 7.9, offset: 48, spacing: 0 } },\n    mfp:           { default: { cx: 50.5, cy: 77.5, w: 30, tilt: 0, bulge: 0, rot: 0, size: 7, offset: 50, spacing: 0 } }\n};\n\nwindow.currentFont = \"'Playfair Display', serif\";\n\n(function () {\n  'use strict';\n\n  const MAX_CHARS = 2;\n  const PH = 'data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7';\n\n  \/* Gravurfeld im Produktformular – das erste vorhandene wird genutzt *\/\n  const FORM_FIELD_SEL = ['#gravurtext_vorderseite', '#gravurtext_oberfläche', '#gravurtext', '#gravurtext_innenseite'];\n  function formField() {\n    for (const s of FORM_FIELD_SEL) { const el = document.querySelector(s); if (el) return el; }\n    return null;\n  }\n  \/* Rückseite: vorhandenes Feld im Produktformular – sonst wird ein verstecktes Feld\n     „Gravur Rückseite“ angelegt, damit die Gravur in der Bestellung steht *\/\n  const BACK_FIELD_SEL = ['#gravurtext_rückseite', '#gravurtext_rueckseite', '#gravurtext_2'];\n  function formFieldBack() {\n    for (const s of BACK_FIELD_SEL) { const el = document.querySelector(s); if (el) return el; }\n    return null;\n  }\n  function backTarget() {\n    const ex = formFieldBack();\n    if (ex) return ex;\n    const form = document.querySelector('#product-form, form[action*=\"\/cart\/add\"]');\n    if (!form) return null;\n    let el = form.querySelector('input[name=\"properties[Gravur Rückseite]\"]');\n    if (!el) {\n      el = document.createElement('input');\n      el.type = 'hidden'; el.name = 'properties[Gravur Rückseite]'; el.disabled = true;\n      form.appendChild(el);\n    }\n    return el;\n  }\n\n  \/* Gravur je Seite *\/\n  const SIDES = { front: '', back: '' };\n  const SIDE_LABEL = { front: 'Vorderseite', back: 'Rückseite' };\n  let side = 'front';\n\n  \/* Bilder (werden aus den Produktbildern gefüllt):\n       primary = Hauptbild · hover = 2. Bild bzw. Alt-Text „getragen“\n       preview = Bild mit Alt-Text „Gravur“ oder „Vorschau“ (Nahaufnahme des Herzens) *\/\n  const IMGS = { primary: '', hover: '', preview: '', back: '' };\n\n  \/* ── DOM ── *\/\n  const engInput     = document.getElementById('engravingInput');\n  const arcEl        = document.getElementById('engravingArcTextEl');\n  const hiddenSpan   = document.getElementById('engravingPreviewText');\n  const overlay      = document.getElementById('engravingOverlay');\n  const mobilePopup  = document.getElementById('engraving-mobile-popup');\n  const popupArcEl   = document.getElementById('popupArcTextEl');\n  const hiddenFont   = document.getElementById('selectedFont');\n  const previewImage = document.querySelector('.engraving-preview-image');\n  const symbolBtns   = document.querySelectorAll('.symbol-btn');\n  const fontBtns     = document.querySelectorAll('.font-btn');\n  const popupCheck   = mobilePopup \u0026\u0026 mobilePopup.querySelector('.popup-preview-check');\n  const desktopCheck = document.querySelector('.preview-check');\n  const engCounter   = document.getElementById('engravingCounter');\n  const limitNote    = document.querySelector('.jm-mh-limit');\n\n  let lastValue = '';\n  let hasPulsed = false;\n  const jmCfgState = { stone: 'default', label: 'Mini-Herz' };\n\n  \/* Zeichen zählen (Symbole = 1 Zeichen) \u0026 auf 2 kürzen *\/\n  const chars = s =\u003e Array.from(String(s || ''));\n  function clampValue(el) {\n    if (!el) return;\n    const c = chars(el.value);\n    if (c.length \u003e MAX_CHARS) { el.value = c.slice(0, MAX_CHARS).join(''); shakeLimit(); }\n  }\n  function shakeLimit() {\n    if (!limitNote) return;\n    limitNote.classList.remove('jm-mh-shake'); void limitNote.offsetWidth; limitNote.classList.add('jm-mh-shake');\n  }\n\n  \/* ── Zähler ── *\/\n  function updateCounter(val) {\n    if (!engCounter) return;\n    const n = chars(val).length;\n    if (!n) {\n      engCounter.textContent = 'Max. 2 Zeichen · Buchstaben, Zahlen \u0026 Symbole';\n      engCounter.style.color = '';\n    } else {\n      engCounter.textContent = n + ' \/ 2 Zeichen' + (n === MAX_CHARS ? ' · voll' : '');\n      engCounter.style.color = n === MAX_CHARS ? '#c9630e' : '#777';\n    }\n  }\n\n  \/* ── Popup ── *\/\n  function showPopup() { if (window.innerWidth \u003e 768) return; mobilePopup \u0026\u0026 mobilePopup.classList.add('show'); }\n  function hidePopup() { mobilePopup \u0026\u0026 mobilePopup.classList.remove('show'); }\n\n  function syncPopupFromPreview() {\n    const konfVal = engInput ? engInput.value.trim() : '';\n    const ff = formField();\n    const val = konfVal || (ff ? ff.value.trim() : '');\n    if (!val) return;\n    if (popupArcEl) { popupArcEl.textContent = val; popupArcEl.style.fontFamily = window.currentFont; }\n    if (popupCheck) {\n      popupCheck.classList.add('show');\n      clearTimeout(popupCheck._t);\n      popupCheck._t = setTimeout(() =\u003e popupCheck.classList.remove('show'), 1000);\n    }\n    showPopup();\n  }\n\n  function updateArcs(value) {\n    if (arcEl)      { arcEl.textContent = value; arcEl.style.fontFamily = window.currentFont; }\n    if (hiddenSpan) hiddenSpan.textContent = value;\n    if (popupArcEl) { popupArcEl.textContent = value; popupArcEl.style.fontFamily = window.currentFont; }\n  }\n\n  function showCheck() {\n    [desktopCheck, popupCheck].forEach(el =\u003e {\n      if (!el) return;\n      el.classList.add('show');\n      clearTimeout(el._t);\n      el._t = setTimeout(() =\u003e el.classList.remove('show'), 1000);\n    });\n  }\n\n  function triggerGlow() {\n    if (!arcEl) return;\n    arcEl.classList.remove('engrave-fade');\n    void arcEl.getBoundingClientRect();\n    arcEl.classList.add('engrave-fade');\n  }\n\n  function triggerPulse() {\n    if (hasPulsed || !previewImage) return;\n    previewImage.classList.remove('pulse');\n    void previewImage.offsetWidth;\n    previewImage.classList.add('pulse');\n    hasPulsed = true;\n  }\n\n  \/* ── Hauptfunktion ── *\/\n  function updatePreview(forceEffects) {\n    const val = engInput ? engInput.value : '';\n    SIDES[side] = val;\n    updateSideTabs();\n    if (!val) { overlay \u0026\u0026 overlay.classList.remove('active'); hidePopup(); lastValue = ''; return; }\n    updateArcs(val);\n    overlay \u0026\u0026 overlay.classList.add('active');\n    if (forceEffects || val !== lastValue) {\n      triggerGlow();\n      showCheck();\n      if (chars(val).length === 1) triggerPulse();\n      showPopup();\n    }\n    lastValue = val;\n  }\n\n  const next2Btn = document.getElementById('jm-cfg-next-2');\n  function updateNext2State() {\n    if (!next2Btn) return;\n    const empty = !SIDES.front.trim() \u0026\u0026 !SIDES.back.trim();\n    next2Btn.disabled            = empty;\n    next2Btn.style.opacity       = empty ? '0.4' : '1';\n    next2Btn.style.cursor        = empty ? 'not-allowed' : 'pointer';\n    next2Btn.style.pointerEvents = empty ? 'none' : 'auto';\n  }\n  updateNext2State();\n\n  \/* ── Vorderseite \/ Rückseite ── *\/\n  function updateSideTabs() {\n    ['front', 'back'].forEach(k =\u003e {\n      const sm = document.getElementById('jm-mh-side-' + k);\n      if (sm) sm.textContent = SIDES[k] || '–';\n      const b = document.querySelector('.jm-mh-side[data-side=\"' + k + '\"]');\n      if (b) b.classList.toggle('filled', !!SIDES[k]);\n    });\n  }\n  function sideImage() {\n    if (side === 'back') return IMGS.back || IMGS.preview || IMGS.primary;\n    return IMGS.preview || IMGS.primary;\n  }\n  function applySideImage() {\n    const flip = side === 'back' \u0026\u0026 !IMGS.back;\n    ['mhStep2Img', 'mhPopupImg'].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (!el) return;\n      const src = sideImage();\n      if (src) el.src = src;\n      el.classList.toggle('jm-mh-flip', flip);\n    });\n    ['mhStep2SideLabel', 'mhPopupSideLabel'].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (el) el.textContent = SIDE_LABEL[side];\n    });\n  }\n  function setSide(k) {\n    if (!SIDE_LABEL[k] || !engInput) return;\n    side = k;\n    document.querySelectorAll('.jm-mh-side').forEach(b =\u003e {\n      const on = b.dataset.side === k;\n      b.classList.toggle('active', on);\n      b.setAttribute('aria-selected', on ? 'true' : 'false');\n    });\n    const lb = document.getElementById('engravingInputLabel');\n    if (lb) lb.textContent = 'Gravur ' + SIDE_LABEL[k] + (k === 'back' ? ' (optional)' : '');\n    engInput.placeholder = k === 'back' ? 'z. B. ♥ | 24' : 'z. B. AM | J♥';\n    engInput.value = SIDES[k];\n    lastValue = '';\n    applySideImage();\n    updatePreview(true);\n    updateCounter(engInput.value);\n    updateNext2State();\n    engInput.focus();\n  }\n  document.querySelectorAll('.jm-mh-side').forEach(b =\u003e b.addEventListener('click', () =\u003e setSide(b.dataset.side)));\n\n  \/* ── Input ── *\/\n  if (engInput) {\n    engInput.addEventListener('input', () =\u003e {\n      clampValue(engInput);\n      updatePreview(false);\n      updateNext2State();\n      updateCounter(engInput.value);\n      if (engInput.value.trim()) requestAnimationFrame(syncPopupFromPreview);\n    });\n  }\n\n  \/* ── Symbole: wie Buchstaben an der Cursor-Position einfügen ── *\/\n  symbolBtns.forEach(btn =\u003e {\n    btn.addEventListener('click', () =\u003e {\n      if (!engInput) return;\n      const sym = btn.dataset.symbol || '';\n      const s = engInput.selectionStart != null ? engInput.selectionStart : engInput.value.length;\n      const e = engInput.selectionEnd != null ? engInput.selectionEnd : engInput.value.length;\n      const next = engInput.value.substring(0, s) + sym + engInput.value.substring(e);\n      if (chars(next).length \u003e MAX_CHARS) { shakeLimit(); return; }\n      engInput.value = next;\n      engInput.focus();\n      engInput.selectionStart = engInput.selectionEnd = s + sym.length;\n      updatePreview(true);\n      updateNext2State();\n      updateCounter(engInput.value);\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* ── Fonts ── *\/\n  function syncFontSelect() {\n    const fontSelect = document.querySelector('#gravur_schriftart');\n    if (!fontSelect) return null;\n    Array.from(fontSelect.options).forEach((opt, i) =\u003e {\n      if (opt.value \u0026\u0026 window.currentFont.includes(opt.value)) fontSelect.selectedIndex = i;\n    });\n    return fontSelect;\n  }\n  fontBtns.forEach(btn =\u003e {\n    btn.addEventListener('click', () =\u003e {\n      window.currentFont = btn.dataset.font || window.currentFont;\n      if (hiddenFont) hiddenFont.value = window.currentFont;\n      if (arcEl)      arcEl.style.fontFamily      = window.currentFont;\n      if (popupArcEl) popupArcEl.style.fontFamily = window.currentFont;\n      const ff = formField();\n      if (ff) ff.style.fontFamily = window.currentFont;\n      syncFontSelect();\n      fontBtns.forEach(b =\u003e b.classList.remove('active'));\n      btn.classList.add('active');\n      updatePreview(true);\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* ── Polling: erkennt Änderungen ohne input-Event (z. B. Symbol-Handler des Themes) ── *\/\n  if (engInput) {\n    let lastEngVal = engInput.value;\n    setInterval(() =\u003e {\n      if (engInput.value !== lastEngVal) {\n        clampValue(engInput);\n        lastEngVal = engInput.value;\n        updatePreview(false);\n        updateCounter(engInput.value);\n        updateNext2State();\n        if (engInput.value.trim()) requestAnimationFrame(syncPopupFromPreview);\n      }\n    }, 200);\n  }\n  (function watchFormField() {\n    const ff = formField();\n    if (!ff) return;\n    ff.setAttribute('maxlength', String(MAX_CHARS));    \/* auch im Produktformular max. 2 Zeichen *\/\n    const fb = formFieldBack();\n    if (fb) fb.setAttribute('maxlength', String(MAX_CHARS));\n    let lastFormVal = ff.value;\n    setInterval(() =\u003e {\n      if (ff.value !== lastFormVal) {\n        clampValue(ff);\n        lastFormVal = ff.value;\n        if (ff.value.trim()) requestAnimationFrame(syncPopupFromPreview);\n      }\n    }, 200);\n  })();\n\n  \/* Gravur + Schrift ins Produktformular übernehmen *\/\n  function writeField(el, val, fireEvents) {\n    if (!el) return;\n    el.value = val;\n    if (el.type === 'hidden') { el.disabled = !val; return; }   \/* leere Rückseite nicht mitsenden *\/\n    el.style.fontFamily = window.currentFont;\n    if (fireEvents) {\n      el.dispatchEvent(new Event('input',  { bubbles: true }));\n      el.dispatchEvent(new Event('change', { bubbles: true }));\n      const maxNote = el.parentElement \u0026\u0026 el.parentElement.querySelector('.max-length-note');\n      if (maxNote) maxNote.textContent = maxNote.textContent.replace(\/\\d+(?=\\s*\\\/|\\s*Zeichen)\/, chars(val).length);\n    }\n  }\n  function pushToForm(fireEvents) {\n    const cut = v =\u003e chars(String(v || '').trim()).slice(0, MAX_CHARS).join('');\n    writeField(formField(), cut(SIDES.front), fireEvents);\n    writeField(SIDES.back.trim() || formFieldBack() ? backTarget() : null, cut(SIDES.back), fireEvents);\n    const fs = syncFontSelect();\n    if (fs \u0026\u0026 fireEvents) fs.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n\n  \/* ── CTA „Jetzt personalisieren“ ── *\/\n  document.querySelectorAll('.js-scroll-to-form').forEach(btn =\u003e {\n    btn.addEventListener('click', e =\u003e {\n      e.preventDefault();\n      if (SIDES.front.trim() || SIDES.back.trim()) pushToForm(false);\n      const form = document.querySelector('#product-form, form[action*=\"\/cart\/add\"]');\n      if (!form) return;\n      form.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      const first = form.querySelector('input:not([type=\"hidden\"]), textarea, select');\n      if (first) setTimeout(() =\u003e first.focus(), 500);\n    });\n  });\n\n  \/* ── Live Preview Link ── *\/\n  document.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n    link.addEventListener('click', e =\u003e {\n      e.preventDefault();\n      const w = document.getElementById('jm-cfg-wrap');\n      if (w) w.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  });\n\n  \/* ── Popup außerhalb \/ Scroll ── *\/\n  document.addEventListener('click', e =\u003e {\n    if (!mobilePopup) return;\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== engInput \u0026\u0026 !(e.target.closest \u0026\u0026 e.target.closest('.symbol-btn, .font-btn'))) hidePopup();\n  });\n  window.addEventListener('scroll', hidePopup, { passive: true });\n\n  \/* ── Intersection Observer ── *\/\n  const io = new IntersectionObserver(entries =\u003e {\n    entries.forEach(en =\u003e { if (en.isIntersecting) en.target.classList.add('show'); });\n  }, { threshold: 0.15 });\n  document.querySelectorAll('.engraving-fade').forEach(el =\u003e io.observe(el));\n\n  \/* ── Kettenlänge: Tabelle anklicken → Anzeige aktualisieren ── *\/\n  document.querySelectorAll('.jm-rsz-tr[data-len]').forEach(tr =\u003e {\n    tr.addEventListener('click', () =\u003e {\n      document.querySelectorAll('.jm-rsz-tr[data-len]').forEach(r =\u003e r.classList.toggle('jm-rsz-hl', r === tr));\n      const len = document.getElementById('jm-mh-anno-len');\n      const fit = document.getElementById('jm-mh-anno-fit');\n      if (len) len.textContent = tr.dataset.len + ' cm';\n      if (fit) fit.textContent = tr.dataset.fit || '';\n    });\n  });\n\n\n  \/* ════════════════════════════════════════════\n     3-SCHRITT KONFIGURATOR\n     ════════════════════════════════════════════ *\/\n  let jmStep = 1;\n  const TOTAL = 3;\n\n  function jmSetStep(n, scroll) {\n    jmStep = n;\n    document.querySelectorAll('.jm-cfg-card').forEach(c =\u003e c.classList.remove('active'));\n    const card = document.getElementById('jm-cfg-card-' + n);\n    if (card) card.classList.add('active');\n\n    for (let i = 1; i \u003c= TOTAL; i++) {\n      const si = document.getElementById('jm-cfg-si-' + i);\n      const sc = document.getElementById('jm-cfg-sc-' + i);\n      if (!si || !sc) continue;\n      si.classList.remove('active', 'done');\n      if (i \u003c n)   { si.classList.add('done');   sc.innerHTML = '\u003ci class=\"bi bi-check-lg\"\u003e\u003c\/i\u003e'; }\n      if (i === n) { si.classList.add('active'); sc.textContent = i; }\n      if (i \u003e n)   { sc.textContent = i; }\n    }\n    for (let i = 1; i \u003c TOTAL; i++) {\n      const ln = document.getElementById('jm-cfg-line-' + i);\n      if (ln) ln.classList.toggle('done', n \u003e i);\n    }\n    const fill = document.getElementById('jm-cfg-progress');\n    if (fill) fill.style.width = Math.round(((n - 1) \/ (TOTAL - 1)) * 100) + '%';\n\n    if (n !== 2) hidePopup();\n    if (n === 3) jmFillSummary();\n    if (n === 2) { updateNext2State(); setTimeout(applyAllArcs, 50); }\n\n    if (scroll) {\n      const wrap = document.getElementById('jm-cfg-wrap');\n      if (wrap) wrap.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  function jmFillSummary() {\n    const thumb = document.getElementById('jm-cfg-s3-thumb');\n    if (thumb \u0026\u0026 IMGS.primary) thumb.src = IMGS.primary;\n\n    const gravurEl   = document.getElementById('jm-cfg-s3-gravur-text');\n    const gravurMeta = document.getElementById('jm-cfg-s3-gravur-meta');\n    const esc = t =\u003e String(t).replace(\/[\u0026\u003c\u003e\"]\/g, c =\u003e ({ '\u0026': '\u0026amp;', '\u003c': '\u0026lt;', '\u003e': '\u0026gt;', '\"': '\u0026quot;' }[c]));\n    const used = ['front', 'back'].filter(k =\u003e SIDES[k].trim());\n    if (gravurEl) {\n      gravurEl.innerHTML = used.length\n        ? used.map(k =\u003e '\u003cspan class=\"jm-cfg-s3-gravur-line\"\u003e\u003cspan class=\"jm-cfg-s3-gravur-side\"\u003e' + SIDE_LABEL[k] + '\u003c\/span\u003e\u003cspan style=\"font-family:' + esc(window.currentFont) + '\"\u003e' + esc(SIDES[k].trim()) + '\u003c\/span\u003e\u003c\/span\u003e').join('')\n        : '–';\n    }\n    const sidesEl = document.getElementById('jm-cfg-s3-sides');\n    if (sidesEl) sidesEl.textContent = (used.length ? used.map(k =\u003e SIDE_LABEL[k]).join(' \u0026 ') : 'Keine') + ' · kostenlos';\n\n    const fontName = window.currentFont.replace(\/['\"]\/g, '').split(',')[0].trim();\n    if (gravurMeta) gravurMeta.textContent = 'Schriftart: ' + fontName + ' · je Seite max. 2 Zeichen';\n\n    const fp = document.getElementById('jm-cfg-s3-font-preview');\n    if (fp) { fp.textContent = fontName; fp.style.fontFamily = window.currentFont; }\n\n    const priceSource = document.querySelector('.price__pricing-group');\n    const priceTarget = document.getElementById('jm-cfg-s3-price');\n    if (priceSource \u0026\u0026 priceTarget) priceTarget.innerHTML = priceSource.innerHTML;\n  }\n\n  const next1 = document.getElementById('jm-cfg-next-1');\n  const back2 = document.getElementById('jm-cfg-back-2');\n  const back3 = document.getElementById('jm-cfg-back-3');\n  if (next1) next1.addEventListener('click', () =\u003e jmSetStep(2, true));\n  if (back2) back2.addEventListener('click', () =\u003e jmSetStep(1, true));\n  if (next2Btn) next2Btn.addEventListener('click', () =\u003e { pushToForm(false); jmSetStep(3, true); });\n  if (back3) back3.addEventListener('click', () =\u003e jmSetStep(2, true));\n\n  const popupNext = document.getElementById('jm-cfg-popup-next');\n  if (popupNext) {\n    popupNext.addEventListener('click', () =\u003e {\n      hidePopup();\n      if (jmStep === 2 \u0026\u0026 (SIDES.front.trim() || SIDES.back.trim())) { pushToForm(false); jmSetStep(3, true); }\n    });\n  }\n\n  const s3Cta = document.getElementById('jm-cfg-s3-cta-btn');\n  if (s3Cta) {\n    s3Cta.addEventListener('click', () =\u003e {\n      pushToForm(true);\n      fontBtns.forEach(b =\u003e b.classList.toggle('active', window.currentFont.includes(b.dataset.font || '')));\n      const form = document.querySelector('#product-form, form[action*=\"\/cart\/add\"]');\n      if (form) form.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n  }\n\n\n  \/* ════════════════════════════════════════════\n     BILDER AUS DEN PRODUKTBILDERN DIESES PRODUKTS\n     ════════════════════════════════════════════ *\/\n  function hasKey(str, keys) {\n    const s = String(str || '').toLowerCase();\n    return keys.some(k =\u003e s.indexOf(k) \u003e -1);\n  }\n  function imgUrl(src) {\n    if (!src) return '';\n    if (typeof src === 'object') src = src.src || '';\n    if (src.indexOf('\/\/') === 0) src = 'https:' + src;\n    return src + (src.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=900';\n  }\n\n  \/* Live-Vorschau oben im Produktformular (Gravur-Snippet: Desktop-Panel + Mobile-Popup) *\/\n  function setPanels(url) {\n    if (!url || url === PH) return;\n    window.jmAllowPanelChange = true;\n    if (typeof window.syncPanelImages === 'function') {\n      window.syncPanelImages(url);\n    } else {\n      const d = document.getElementById('jm-desktop-preview-img');\n      const m = document.querySelector('#jm-mobile-form-popup img');\n      if (d) d.src = url;\n      if (m) m.src = url;\n    }\n    clearTimeout(setPanels._t);\n    setPanels._t = setTimeout(() =\u003e { window.jmAllowPanelChange = false; }, 700);\n    guardPanels();\n  }\n  \/* Wächter: setzt ein fremdes Skript ein anderes Bild, kommt sofort das Bild dieses Produkts zurück *\/\n  function panelWant() { return IMGS.preview || IMGS.primary || ''; }\n  function guardOne(img) {\n    if (!img || img._jmGuard) return;\n    img._jmGuard = true;\n    new MutationObserver(() =\u003e {\n      const want = panelWant();\n      if (!want || img._jmBusy) return;\n      const a = document.createElement('a'); a.href = want;\n      if (img.src === a.href) return;\n      img._jmBusy = true;\n      window.jmAllowPanelChange = true;\n      img.src = want;\n      setTimeout(() =\u003e { img._jmBusy = false; window.jmAllowPanelChange = false; }, 60);\n    }).observe(img, { attributes: true, attributeFilter: ['src'] });\n  }\n  function guardPanels() {\n    guardOne(document.getElementById('jm-desktop-preview-img'));\n    guardOne(document.querySelector('#jm-mobile-form-popup img'));\n  }\n\n  function applyImages() {\n    if (!IMGS.primary) return;\n    const set = (id, src) =\u003e { const el = document.getElementById(id); if (el \u0026\u0026 src) el.src = src; };\n    set('mhHeroPrimary', IMGS.primary);\n    set('mhHeroHover',   IMGS.hover || IMGS.primary);\n    set('mhCfgPrimary',  IMGS.primary);\n    set('mhCfgHover',    IMGS.hover || IMGS.primary);\n    applySideImage();\n    set('jm-cfg-s3-thumb', IMGS.primary);\n    setPanels(IMGS.preview || IMGS.primary);\n  }\n\n  function loadProduct() {\n    const el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    if (el) { try { return Promise.resolve(JSON.parse(el.textContent)); } catch (e) {} }\n    return fetch(location.pathname.replace(\/\\\/$\/, '') + '.js').then(r =\u003e r.json());\n  }\n\n  loadProduct().then(p =\u003e {\n    const media = (p.media || [])\n      .filter(m =\u003e !m.media_type || m.media_type === 'image')\n      .map(m =\u003e ({ alt: String(m.alt || ''), src: m.src || (m.preview_image \u0026\u0026 m.preview_image.src) }))\n      .filter(m =\u003e m.src);\n    if (!media.length \u0026\u0026 p.images) p.images.forEach(src =\u003e media.push({ alt: '', src: src }));\n\n    const first   = imgUrl(p.featured_image || (media[0] \u0026\u0026 media[0].src));\n    const worn    = media.find(m =\u003e hasKey(m.alt, ['getragen', 'model', 'hals']));\n    const back    = media.find(m =\u003e hasKey(m.alt, ['rückseite', 'rueckseite', 'hinten']));\n    const preview = media.find(m =\u003e hasKey(m.alt, ['gravur', 'vorschau']) \u0026\u0026 m !== back);\n    const second  = media.find(m =\u003e imgUrl(m.src) !== first);\n\n    IMGS.primary = first;\n    IMGS.hover   = worn ? imgUrl(worn.src) : (second ? imgUrl(second.src) : first);\n    IMGS.preview = preview ? imgUrl(preview.src) : first;\n    IMGS.back    = back ? imgUrl(back.src) : '';\n    applyImages();\n  }).catch(err =\u003e { console.warn('[JM Mini-Herz] Produktdaten nicht geladen:', err); });\n\n\n  \/* ════════════════════════════════════════════\n     GRAVUR-POSITION anwenden\n     ════════════════════════════════════════════ *\/\n  const ARC_TARGETS = {\n    step2_desktop: { label: 'Schritt 2 · Desktop', el: 'engravingArcTextEl', path: 'ringArcPath' },\n    step2_mobile:  { label: 'Schritt 2 · Mobile',  el: 'engravingArcTextEl', path: 'ringArcPath' },\n    popup:         { label: 'Mobile-Popup (mit „Zur Bestätigung“)', el: 'popupArcTextEl', path: 'popupArcPath' },\n    panel:         { label: 'Live-Vorschau oben · Desktop', el: 'jm-desktop-arc-text', box: '#jm-desktop-preview-panel' },\n    mfp:           { label: 'Theme-Popup oben · Mobile',    el: 'jm-mfp-text',         box: '#jm-mobile-form-popup' }\n  };\n  const ARC_FALLBACK = { cx: 50, cy: 52, w: 30, tilt: 0, bulge: 0, rot: 0, size: 8, offset: 50, spacing: 0 };\n  const arcOverride = {};\n\n  function arcParts(name) {\n    const t = ARC_TARGETS[name];\n    if (!t) return null;\n    const box = t.box ? document.querySelector(t.box) : null;\n    let el = box ? box.querySelector('textPath, textpath') : null;\n    if (!el) el = document.getElementById(t.el);\n    if (!el) return null;\n    const svg = el.closest('svg');\n    if (!svg) return { html: true, el: el, box: box || el.parentElement };\n    const tp = el.tagName.toLowerCase() === 'textpath' ? el : el.querySelector('textPath, textpath');\n    const text = tp ? tp.closest('text') : (el.tagName.toLowerCase() === 'text' ? el : null);\n    if (!tp || !text) return null;\n    let path = t.path ? document.getElementById(t.path) : null;\n    if (!path) {\n      const ref = (tp.getAttribute('href') || tp.getAttribute('xlink:href') || '').replace('#', '');\n      path = (ref \u0026\u0026 document.getElementById(ref)) || svg.querySelector('path');\n    }\n    if (!path) return null;\n    const vb = svg.viewBox \u0026\u0026 svg.viewBox.baseVal;\n    return { svg, tp, text, path, vw: (vb \u0026\u0026 vb.width) || 100, vh: (vb \u0026\u0026 vb.height) || 100 };\n  }\n\n  function arcValues(name) {\n    if (arcOverride[name]) return arcOverride[name];\n    const cfg = (window.JM_ARC || {})[name] || {};\n    return cfg.default || null;\n  }\n\n  function applyArc(name, v) {\n    const p = arcParts(name);\n    if (!p || !v) return;\n    if (p.html) {\n      const W = (p.box \u0026\u0026 p.box.getBoundingClientRect().width) || window.innerWidth * 0.9;\n      p.el.style.position = 'absolute';\n      p.el.style.left = v.cx + '%';\n      p.el.style.top = v.cy + '%';\n      p.el.style.transform = 'translate(-50%, -50%) rotate(' + v.rot + 'deg)';\n      p.el.style.fontSize = (v.size * W \/ 100).toFixed(2) + 'px';\n      p.el.style.letterSpacing = (v.spacing * W \/ 100).toFixed(2) + 'px';\n      p.el.style.whiteSpace = 'nowrap';\n      return;\n    }\n    const kx = p.vw \/ 100, ky = p.vh \/ 100;\n    const x1 = (v.cx - v.w \/ 2) * kx, x2 = (v.cx + v.w \/ 2) * kx;\n    const y1 = (v.cy + v.tilt \/ 2) * ky, y2 = (v.cy - v.tilt \/ 2) * ky;\n    const qx = (x1 + x2) \/ 2, qy = (y1 + y2) \/ 2 - v.bulge * ky;\n    p.path.setAttribute('d', 'M ' + x1.toFixed(2) + ',' + y1.toFixed(2) + ' Q ' + qx.toFixed(2) + ',' + qy.toFixed(2) + ' ' + x2.toFixed(2) + ',' + y2.toFixed(2));\n    p.text.style.transform = '';\n    p.text.setAttribute('transform', 'rotate(' + v.rot + ' ' + (v.cx * kx).toFixed(2) + ' ' + (v.cy * ky).toFixed(2) + ')');\n    p.text.style.fontSize = (v.size * kx).toFixed(2) + 'px';\n    p.text.style.letterSpacing = (v.spacing * kx).toFixed(2) + 'px';\n    p.tp.setAttribute('startOffset', v.offset + '%');\n    p.tp.setAttribute('text-anchor', 'middle');\n    \/* Text vertikal mittig auf der Linie (wirkt bei 2 Zeichen ruhiger) *\/\n    p.text.setAttribute('dominant-baseline', 'central');\n  }\n\n  function step2Mode() { return window.innerWidth \u003e 768 ? 'step2_desktop' : 'step2_mobile'; }\n  function applyAllArcs() {\n    applyArc(step2Mode(), arcValues(step2Mode()));\n    ['popup', 'panel', 'mfp'].forEach(n =\u003e applyArc(n, arcValues(n)));\n  }\n\n  window.addEventListener('resize', () =\u003e { clearTimeout(applyAllArcs._r); applyAllArcs._r = setTimeout(applyAllArcs, 150); });\n  const productForm = document.querySelector('#product-form, form[action*=\"\/cart\/add\"]');\n  if (productForm) productForm.addEventListener('input', () =\u003e setTimeout(applyAllArcs, 60));\n  document.addEventListener('DOMContentLoaded', () =\u003e setTimeout(applyAllArcs, 200));\n  window.addEventListener('load', () =\u003e setTimeout(applyAllArcs, 400));\n\n  \/* ── Tweak-Panel: ?jmtweak=1  (?jmtweak=0 schaltet es aus) ── *\/\n  let jmTweakOn = false;\n  try {\n    if (\/[?\u0026]jmtweak=0\/.test(location.search)) sessionStorage.removeItem('jmtweak');\n    else if (\/[?\u0026]jmtweak\/.test(location.search)) sessionStorage.setItem('jmtweak', '1');\n    jmTweakOn = sessionStorage.getItem('jmtweak') === '1';\n  } catch (e) { jmTweakOn = \/[?\u0026]jmtweak(?!=0)\/.test(location.search); }\n\n  if (jmTweakOn) {\n    const FIELDS = [\n      ['cx', 'Mitte horizontal %', 0, 100, 0.5], ['cy', 'Mitte vertikal %', 0, 100, 0.5],\n      ['w', 'Breite %', 5, 120, 0.5], ['tilt', 'Winkel', -40, 40, 0.5],\n      ['bulge', 'Wölbung', -80, 80, 0.5], ['rot', 'Drehung °', -60, 60, 1],\n      ['size', 'Schriftgröße', 0.5, 30, 0.1], ['offset', 'Position auf Linie %', 0, 100, 0.5],\n      ['spacing', 'Zeichenabstand', -1, 5, 0.05]\n    ];\n    const css = document.createElement('style');\n    css.textContent = '#jm-arc-tweak{position:fixed;right:20px;top:90px;z-index:2147483647;width:270px;max-width:calc(100vw - 20px);max-height:85vh;overflow:auto;background:rgba(17,17,17,.94);color:#eee;border:1px solid #c9a84c;border-radius:12px;padding:0 12px 12px;font:12px\/1.4 Inter,sans-serif;box-shadow:0 10px 30px rgba(0,0,0,.4)}'\n      + '#jm-at-head{position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 -12px 4px;padding:10px 12px;background:#1b1b1b;border-bottom:1px solid #333;cursor:move;touch-action:none;user-select:none}'\n      + '#jm-at-head strong{color:#c9a84c}'\n      + '#jm-at-min,#jm-at-flip{width:auto!important;margin:0!important;padding:4px 12px!important;background:#333!important;color:#eee!important;font-size:14px!important}'\n      + '#jm-arc-tweak.jm-min{max-height:none;overflow:visible}#jm-arc-tweak.jm-min #jm-at-body{display:none}'\n      + '@media (max-width:768px){#jm-arc-tweak{width:230px;max-height:45vh;top:70px;right:8px;background:rgba(17,17,17,.85)}}'\n      + '#jm-arc-tweak select,#jm-arc-tweak button{width:100%;margin-top:6px;padding:5px;border-radius:6px;border:0;font:inherit}'\n      + '#jm-arc-tweak button{background:#c9a84c;color:#111;font-weight:600;cursor:pointer}'\n      + '#jm-arc-tweak label{display:flex;justify-content:space-between;margin-top:7px}'\n      + '#jm-arc-tweak input[type=range]{width:100%;cursor:pointer}'\n      + '#jm-arc-tweak code{display:block;margin-top:8px;padding:6px;background:#222;border-radius:6px;font-size:10.5px;white-space:pre-wrap;cursor:text;word-break:break-all}'\n      + '#jm-arc-tweak .jm-hint{color:#c9a84c;margin-top:6px;font-size:11px}';\n    document.head.appendChild(css);\n\n    const tw = document.createElement('div');\n    tw.id = 'jm-arc-tweak';\n    let html = '\u003cdiv id=\"jm-at-head\"\u003e\u003cstrong\u003e⠿ Gravur-Position\u003c\/strong\u003e\u003cspan\u003e\u003cbutton type=\"button\" id=\"jm-at-flip\" title=\"oben\/unten\"\u003e⇅\u003c\/button\u003e \u003cbutton type=\"button\" id=\"jm-at-min\" title=\"einklappen\"\u003e–\u003c\/button\u003e\u003c\/span\u003e\u003c\/div\u003e\u003cdiv id=\"jm-at-body\"\u003e'\n      + '\u003cselect id=\"jm-at-target\"\u003e' + Object.keys(ARC_TARGETS).map(k =\u003e '\u003coption value=\"' + k + '\"\u003e' + ARC_TARGETS[k].label + '\u003c\/option\u003e').join('') + '\u003c\/select\u003e'\n      + '\u003cdiv class=\"jm-hint\" id=\"jm-at-info\"\u003e\u003c\/div\u003e';\n    FIELDS.forEach(f =\u003e {\n      html += '\u003clabel\u003e' + f[1] + ' \u003cspan id=\"jm-at-v-' + f[0] + '\"\u003e\u003c\/span\u003e\u003c\/label\u003e'\n           +  '\u003cinput type=\"range\" data-k=\"' + f[0] + '\" min=\"' + f[2] + '\" max=\"' + f[3] + '\" step=\"' + f[4] + '\"\u003e';\n    });\n    html += '\u003ccode id=\"jm-at-out\"\u003e\u003c\/code\u003e\u003cbutton type=\"button\" id=\"jm-at-copy\"\u003eWerte kopieren\u003c\/button\u003e\u003c\/div\u003e';\n    tw.innerHTML = html;\n    document.body.appendChild(tw);\n\n    function keepVisible() {\n      const r = tw.getBoundingClientRect();\n      if (r.bottom \u003c 40 || r.top \u003e window.innerHeight - 40 || r.right \u003c 60 || r.left \u003e window.innerWidth - 60) {\n        tw.style.left = 'auto'; tw.style.right = '8px'; tw.style.top = '70px'; tw.style.bottom = 'auto';\n      }\n    }\n    setTimeout(keepVisible, 300);\n    window.addEventListener('resize', keepVisible);\n\n    const selT = tw.querySelector('#jm-at-target');\n    Array.from(selT.options).forEach(o =\u003e {\n      if (!arcParts(o.value)) o.textContent = ARC_TARGETS[o.value].label + ' – nicht auf dieser Seite';\n    });\n    let cur = {};\n\n    function keepOpen() {\n      if (selT.value !== 'mfp') return;\n      const pop = document.getElementById('jm-mobile-form-popup');\n      if (!pop) return;\n      clearTimeout(pop._t);\n      pop.style.display = 'block';\n    }\n    function loadTarget() {\n      const name = selT.value;\n      keepOpen();\n      cur = Object.assign({}, ARC_FALLBACK, arcValues(name) || {});\n      FIELDS.forEach(f =\u003e {\n        tw.querySelector('[data-k=\"' + f[0] + '\"]').value = cur[f[0]];\n        tw.querySelector('#jm-at-v-' + f[0]).textContent = cur[f[0]];\n      });\n      const parts = arcParts(name);\n      tw.querySelector('#jm-at-info').textContent = (parts ? (parts.html ? 'Text ohne SVG: Breite\/Winkel\/Wölbung\/Position wirken hier nicht · ' : '') : '⚠ Element nicht gefunden – ')\n        + (name.indexOf('step2') === 0 ? 'Schritt 2 öffnen \u0026 Text eingeben' : 'Gravurtext eingeben, damit es sichtbar ist');\n      writeOut();\n    }\n    function writeOut() {\n      const vals = FIELDS.map(f =\u003e f[0] + ': ' + cur[f[0]]).join(', ');\n      tw.querySelector('#jm-at-out').textContent = 'JM_ARC.' + selT.value + '.default = { ' + vals + ' };';\n    }\n    tw.addEventListener('input', e =\u003e {\n      const k = e.target.dataset \u0026\u0026 e.target.dataset.k;\n      if (!k) return;\n      cur[k] = parseFloat(e.target.value);\n      keepOpen();\n      tw.querySelector('#jm-at-v-' + k).textContent = cur[k];\n      arcOverride[selT.value] = Object.assign({}, cur);\n      applyArc(selT.value, cur);\n      writeOut();\n    });\n    selT.addEventListener('change', loadTarget);\n    tw.querySelector('#jm-at-copy').addEventListener('click', function () {\n      if (navigator.clipboard) navigator.clipboard.writeText(tw.querySelector('#jm-at-out').textContent);\n      const b = this; b.textContent = 'Kopiert ✓';\n      setTimeout(() =\u003e { b.textContent = 'Werte kopieren'; }, 1500);\n    });\n\n    \/* verschiebbar per Maus UND Finger – nur über die Kopfzeile *\/\n    const head = tw.querySelector('#jm-at-head');\n    let drag = false, ox = 0, oy = 0;\n    function dragStart(x, y) {\n      const r = tw.getBoundingClientRect();\n      tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px';\n      tw.style.right = 'auto'; tw.style.bottom = 'auto';\n      drag = true; ox = x - r.left; oy = y - r.top;\n    }\n    function dragMove(x, y) {\n      if (!drag) return;\n      const maxX = window.innerWidth - 60, maxY = window.innerHeight - 40;\n      tw.style.left = Math.min(Math.max(x - ox, -tw.offsetWidth + 60), maxX) + 'px';\n      tw.style.top  = Math.min(Math.max(y - oy, 0), maxY) + 'px';\n    }\n    const isBtn = t =\u003e t.closest \u0026\u0026 t.closest('button');\n    head.addEventListener('mousedown', e =\u003e { if (isBtn(e.target)) return; dragStart(e.clientX, e.clientY); e.preventDefault(); });\n    document.addEventListener('mousemove', e =\u003e dragMove(e.clientX, e.clientY));\n    document.addEventListener('mouseup', () =\u003e { drag = false; });\n    head.addEventListener('touchstart', e =\u003e {\n      if (isBtn(e.target)) return;\n      const t = e.touches[0]; dragStart(t.clientX, t.clientY); e.preventDefault();\n    }, { passive: false });\n    document.addEventListener('touchmove', e =\u003e {\n      if (!drag) return;\n      const t = e.touches[0]; dragMove(t.clientX, t.clientY); e.preventDefault();\n    }, { passive: false });\n    document.addEventListener('touchend', () =\u003e { drag = false; });\n\n    tw.querySelector('#jm-at-flip').addEventListener('click', () =\u003e {\n      const r = tw.getBoundingClientRect();\n      const toTop = r.top \u003e window.innerHeight \/ 2;\n      tw.style.left = 'auto'; tw.style.right = '8px';\n      if (toTop) { tw.style.top = '10px'; tw.style.bottom = 'auto'; }\n      else { tw.style.top = 'auto'; tw.style.bottom = '10px'; }\n    });\n    tw.querySelector('#jm-at-min').addEventListener('click', function () {\n      const min = tw.classList.toggle('jm-min');\n      this.textContent = min ? '+' : '–';\n    });\n\n    loadTarget();\n  }\n\n  \/* ── Init ── *\/\n  document.addEventListener('DOMContentLoaded', () =\u003e setTimeout(applyImages, 150));\n  window.addEventListener('load', () =\u003e setTimeout(applyImages, 300));\n  updateCounter('');\n  jmSetStep(1, false);\n  applyAllArcs();\n\n})();\n\n\/* ── Scroll Reveal (Features + Specs) ── *\/\n(function () {\n  const revealObs = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) { entry.target.classList.add('in'); revealObs.unobserve(entry.target); }\n    });\n  }, { threshold: 0.12 });\n  document.querySelectorAll('.reveal, .reveal-left, .reveal-right, .reveal-scale').forEach(el =\u003e revealObs.observe(el));\n})();\n\n\/* ── 3D Card Tilt (nur Desktop) ── *\/\nif (window.innerWidth \u003e 1024) {\n  document.querySelectorAll('.card-3d').forEach(card =\u003e {\n    card.addEventListener('mousemove', e =\u003e {\n      const rect = card.getBoundingClientRect();\n      const x = (e.clientX - rect.left - rect.width \/ 2) \/ (rect.width \/ 2);\n      const y = (e.clientY - rect.top - rect.height \/ 2) \/ (rect.height \/ 2);\n      card.style.transform = `translateY(-8px) rotateX(${ -y * 6 }deg) rotateY(${ x * 6 }deg)`;\n      card.style.transition = 'transform .08s ease';\n    });\n    card.addEventListener('mouseleave', () =\u003e {\n      card.style.transform = '';\n      card.style.transition = 'transform .5s cubic-bezier(.23,1,.32,1)';\n    });\n  });\n}\n\u003c\/script\u003e\n\n","brand":"Juwelier Milano","offers":[{"title":"Edelstahl \/ 38 cm + 4 cm","offer_id":57449967714569,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Herz_Halskette_fein.jpg?v=1792016101","url":"https:\/\/shop.juwelier-milano.de\/products\/mini-herz-kette-gravur-edelstahl","provider":"Juwelier Milano","version":"1.0","type":"link"}