{"title":"Muttertag 11.05. | \"Zeigen Sie Ihrer Mutter, wie sehr Sie sie lieben\"","description":"\u003ch2\u003e\u003cspan\u003eEine Umarmung in einer Schachtel: Muttertagsgeschenke, die das Herz berühren\u003c\/span\u003e\u003c\/h2\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\u003cimg style=\"margin-right: 32.5px; margin-left: 32.5px; float: none;\" alt=\"Das Bild zeigt eine liebevolle Muttertags-Grußkarte mit dem Text 'Beste Wünsche zum Muttertag!' Darunter befindet sich ein hochwertiges Schmuckstück in einer edlen Verpackung. Der Text 'Sparen Sie bis zu 25%' weist darauf hin, dass auf ausgewählte Schmuckstücke ein Rabatt gewährt wird. Das Bild ist ideal für Menschen mit Sehbehinderung oder Verbindungen mit geringer Bandbreite geeignet, da es auch durch die beschreibende Sprache des ALT-Textes zugänglich gemacht wird.\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_1024x1024.png?v=1682464352\"\u003e\u003c\/div\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch4\u003e\u003cspan\u003eDer #Muttertag ist eine besondere Gelegenheit, um Ihrer Mutter zu zeigen, wie viel sie Ihnen bedeutet. In unserer Muttertags-Kategorie finden Sie eine liebevoll ausgewählte Auswahl an Geschenken, die Ihre Liebe und Wertschätzung auf einzigartige Weise ausdrücken. Entdecken Sie unsere hochwertige Schmuck Kollektion, personalisierte Geschenke und handgefertigte Schmuckstücke, um Ihre Mutter zu überraschen und ihr an diesem besonderen Tag ein Lächeln ins Gesicht zu zaubern und Ihr Herz zu berühren. \u003c\/span\u003e\u003c\/h4\u003e\n\u003ch3\u003e\u003cspan\u003eJetzt Mama mit einem Geschenk überraschen, das sie für immer in Erinnerung behalten wird.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch3\u003e\u003cspan style=\"color: #dc4841;\"\u003e#everydayismamaday\u003c\/span\u003e\u003c\/h3\u003e","products":[{"product_id":"kostenlose-fotogravur-personalisierte-gelbgoldene-edelstahl-anhanger-rund-glanzend","title":"Kostenlose 3D Gravur + Anhänger | Personalisierte Gelbgold Edelstahl-Anhänger Rund, glänzend","description":"\u003ch1 style=\"text-align: center;\" data-mce-style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur (Foto)+ Anhänger\u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e \u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" style=\"display: block; margin-left: auto; margin-right: auto;\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" data-mce-fragment=\"1\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Edelstahl-Schmuckstück in Gelbgold Farbe mit runder Form und glänzender Oberfläche. Perfekt für besondere Anlässe oder als Geschenk für geliebte Menschen\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Vergoldet \/ Edelstahl \/ Modeschmuck","offer_id":56693554643209,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5475.jpg?v=1676115670"},{"product_id":"kostenlose-fotogravur-personalisierte-anhanger-edelstahl-anhanger-in-stahl-oval-glanzend","title":"Kostenlose 3D Gravur+ Anhänger | Personalisierte Edelstahl-Anhänger in Stahl, oval, glänzend","description":"\u003ch1 class=\"product-single__title\"\u003eKostenlose \u003cstrong\u003e3D Gravur (Foto)+ Anhänger\u003c\/strong\u003e\n\u003c\/h1\u003e\n\u003cp\u003e \u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" style=\"display: block; margin-left: auto; margin-right: auto;\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" data-mce-fragment=\"1\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Edelstahl-Schmuckstück in Stahl Farbe mit ovaler Form und glänzender Oberfläche. Perfekt für besondere Anlässe oder als Geschenk für geliebte Menschen\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Default Title","offer_id":44130800238857,"sku":"","price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5492.jpg?v=1676124386"},{"product_id":"kostenlose-fotogravur-personalisierte-anhanger-herzformiger-edelstahl-anhanger-in-stahl-glanzend","title":"Kostenlose 3D Gravur+ Anhänger | Personalisierte herzförmiger Edelstahl-Anhänger in Stahl, glänzend","description":"\u003ch1 class=\"Polaris-Header-Title_2qj8j\"\u003eKostenlose\u003cspan\u003e \u003c\/span\u003e\u003cstrong\u003e3D Gravur (Foto)+ Anhänger\u003c\/strong\u003e\n\u003c\/h1\u003e\n\u003cp\u003e \u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" data-mce-style=\"display: block; margin-left: auto; margin-right: auto;\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\" data-mce-style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten und glänzendes Edelstahl-Herz-Schmuckstück in Stahl Farbe. Perfekt für besondere Anlässe oder als Geschenk für geliebte Menschen\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Default Title","offer_id":44130810233097,"sku":"","price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5477.jpg?v=1676124593"},{"product_id":"kostenlose-fotogravur-personalisierte-anhanger-quadratischer-edelstahl-anhanger-in-geldgolb-glanzend","title":"Kostenlose 3D Gravur + Anhänger | Personalisierte quadratische Edelstahl-Anhänger in Gelbgold, glänzend","description":"\u003ch1 style=\"text-align: center;\" data-mce-style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur (Foto)+ Anhänger\u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e \u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Ein zeitloser Edelstahl-Anhänger in Geldgolb-Farbe, mit einer glänzenden Oberfläche und einer quadratischen Form. Ein elegantes Accessoire, das jeden Look vervollständigt.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Vergoldet \/ Edelstahl \/ Modeschmuck","offer_id":56693554872585,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5479.jpg?v=1676124712"},{"product_id":"kostenlose-fotogravur-personalisierte-anhanger-quadratischer-edelstahl-anhanger-in-rosegold-glanzend","title":"Kostenlose 3D Gravur (Foto)+ Anhänger | Personalisierte Quadratischer Edelstahl-Anhänger in Roségold, glänzend","description":"\u003ch1 style=\"text-align: center;\" data-mce-style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur (Foto)+ Anhänger\u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e \u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Ein romantischer Edelstahl-Anhänger in Roségold-Farbe, mit einer glänzenden Oberfläche und einer quadratischen Form mit ästhetischer Note an den Rändern. Ein zeitloses Accessoire, das jedem Outfit eine moderne Note verleiht.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Default Title","offer_id":44130819866889,"sku":"","price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5478.jpg?v=1676124849"},{"product_id":"kostenlose-fotogravur-personalisierte-edelstahl-anhanger-in-schwarz-matt-hundemarke-mattiert","title":"Kostenlose 3D Foto(gravur) + Anhänger | Personalisierte Edelstahl-Anhänger in schwarz-matt, Hundemarke, mattiert","description":"\u003ch1 style=\"text-align: center;\" data-mce-style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur (Foto) +Personalisierte Anhänger\u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e \u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" style=\"display: block; margin-left: auto; margin-right: auto;\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" data-mce-fragment=\"1\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Ein zeitloser Edelstahl-Anhänger in schwarz-matt-Farbe, mit einer mattierten Oberfläche und einer Form einer Hundemarke. Ein besonderes Accessoire, das jedem Outfit eine moderne Note verleiht.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Default Title","offer_id":44218239746313,"sku":"","price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5483.jpg?v=1676125030"},{"product_id":"kostenlose-fotogravur-personalisierte-anhanger-edelstahl-anhanger-in-stahl-quadratisch-glanzend","title":"Kostenlose 3D Gravur+ Anhänger | Personalisierte Edelstahl-Anhänger in Stahl, quadratisch, glänzend","description":"\u003ch1 class=\"Polaris-Header-Title_2qj8j\"\u003eKostenlose \u003cstrong\u003e3D Gravur (Foto) + Anhänger\u003c\/strong\u003e\n\u003c\/h1\u003e\n\u003cp\u003e \u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" alt=\"\" data-mce-fragment=\"1\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" data-mce-fragment=\"1\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur oder Fotogravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Ein zeitloser Edelstahl-Anhänger in Stahl-Farbe, mit einer glänzenden Oberfläche und quadratisch. Ein besonderes Accessoire, das jedem Outfit eine individuelle Note verleiht.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan data-mce-fragment=\"1\"\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan data-mce-fragment=\"1\"\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Default Title","offer_id":44130835071241,"sku":"","price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5488.jpg?v=1676125277"},{"product_id":"kostenlose-gravur-anhanger-3d-saulen-silber-anhanger-baren-mit-kette-in-matt-optik","title":"Kostenlose Gravur + Anhänger | 3D Säulen Silber-Anhänger (Baren) mit Kette in Matt-Optik","description":"\u003ch1 style=\"text-align: center;\" data-mce-style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur (Foto) + Silber Säulen Anhänger + Kette\u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e \u003cimg data-mce-fragment=\"1\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" style=\"display: block; margin-left: auto; margin-right: auto;\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Valentinstag_2023_banner_480x480.png?v=1676118354\" data-mce-style=\"display: block; margin-left: auto; margin-right: auto;\"\u003e\u003c\/p\u003e\n\u003ch3 data-mce-fragment=\"1\"\u003e\u003cspan style=\"color: #b46351;\" data-mce-style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 data-mce-fragment=\"1\" style=\"text-align: right;\" data-mce-style=\"text-align: right;\"\u003e\n\u003ca data-mce-fragment=\"1\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong data-mce-fragment=\"1\"\u003enähere \u003c\/strong\u003e\u003cstrong data-mce-fragment=\"1\"\u003eDetails  zu unserer Arbeit \u003c\/strong\u003e\u003c\/a\u003e\u003ca href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\" title=\"Personalisierte und feinste Gravuren auf Edelstahl, Silber oder Gold-Schmuckstücken. Erlebe die Magie der Personalisierung mit unserem exklusiven Fotogravur-Service.\" target=\"_blank\" data-mce-href=\"https:\/\/www.juwelier-milano.de\/Engraving\/Fotogravur\"\u003e\u003cstrong\u003e \u003c\/strong\u003e\u003c\/a\u003e\n\u003c\/h5\u003e\n\u003ch4\u003e\u003cstrong\u003eMaterial (Anhänger + Kette)\u003c\/strong\u003e\u003c\/h4\u003e\n\u003cul\u003e\n\u003cli\u003e925 rhodiniertem Silber\u003c\/li\u003e\n\u003cli\u003ein verschiedenen Farben rosé, silber, gelbgold erhältlich\u003c\/li\u003e\n\u003cli\u003eKette 40cm + 5cm (verstellbar anhand der Öse)\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur \u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Unsere edlen 3D Säulen Edelstahl-Anhänger (Baren) mit Kette (verstelbar) in mattierter Optik sind in drei Farben erhältlich: Silber, Rosé und Gelbgold. Die Säulen-Form des Anhängers verleiht ihm eine moderne Note und macht ihn zu einem perfekten Accessoire für jeden Anlass.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eKoordinaten, Namen, Initialen oder Symbole. \u003cstrong\u003e\u003cem\u003eAusreichend Platz für unbegrenzte Ideen.\u003c\/em\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003ch4\u003e\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003c\/h4\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Rosé","offer_id":44130917482761,"sku":"","price":69.0,"currency_code":"EUR","in_stock":true},{"title":"Gelbgold","offer_id":44130917515529,"sku":"","price":69.0,"currency_code":"EUR","in_stock":true},{"title":"Silber","offer_id":44130917548297,"sku":"","price":69.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/IMG_5497.jpg?v=1676126562"},{"product_id":"muttertag-edelstahl-herz-anhanger-kette","title":"Muttertag | Edelstahl Doppel-Herz Anhänger + Kette","description":"\u003ch2\u003e\u003cspan\u003eEine Umarmung in einer Schachtel: Muttertagsgeschenke, die das Herz berühren\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp\u003e\u003cspan\u003eDieses wunderschöne Schmuckstück in der Farbe Gold ist ein wahrer Blickfang. Das Herzförmige Anhänger ist mit funkelnden, klaren Kristallen besetzt und wird von einer zarten Kette gehalten. Das hochwertige Schmuckstück eignet sich perfekt als Geschenk für einen besonderen Menschen oder als elegante Ergänzung zu jedem Outfit. Die sorgfältige Verarbeitung und das edle Design machen dieses Schmuckstück zu einem zeitlosen Klassiker.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch4\u003e\u003cspan\u003eEntdecken Sie jetzt unser breites Sortiment an Schmuckstücken und finden Sie das perfekte Accessoire für sich selbst oder die liebste Mama.\u003c\/span\u003e\u003c\/h4\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\" alt=\"\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cblockquote\u003e\n\u003ch4\u003e\u003cspan\u003eJetzt Mama mit einem Geschenk überraschen, das sie für immer in Erinnerung behalten wird.\u003c\/span\u003e\u003c\/h4\u003e\n\u003c\/blockquote\u003e\n\u003ch3\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003e#everydayismamaday\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch4\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003eDetails\u003c\/span\u003e\u003c\/h4\u003e\n\u003cstyle\u003e\u003c!--\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n--\u003e\u003c\/style\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ctable class=\"elegant-table\" style=\"width: 382.844px;\" data-mce-style=\"width: 382.844px;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eEigenschaften\u003c\/th\u003e\n\u003cth style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan class=\"property-title\" data-spm-anchor-id=\"a2g0o.detail.0.i14.18c45c72dC5CBP\"\u003eForm \\ Muster: \u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eDoppel-Herz Anhänger mit\u003cspan data-mce-fragment=\"1\"\u003e Halskette\u003c\/span\u003e\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eEdelstahl\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eGeschlecht\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eFrauen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eFarbe\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eRosé\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eStil\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eAnhängerbreite\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cspan\u003e5\u003c\/span\u003e\u003cspan\u003e cm\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eKettenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\u003cspan\u003e40 cm+ 5 cm \u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eAnhängergröße (Breite x Höhe)\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003e\u003cspan\u003e5 cm * 4 cm\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eSteine\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003eZirkonia  (weiße)\u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano","offers":[{"title":"Rosé","offer_id":44372470366473,"sku":"","price":59.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/anhaenger_muttertag_d5a25efd-0630-4c09-af1c-741c52d7fb5f.png?v=1682470043"},{"product_id":"baby-armbander-personalisierte-3d-edelstahl-armband-kostenlose-gravur","title":"Baby Tauf-Armbänder | Personalisierte 3D Edelstahl-Armband  + kostenlose Gravur","description":"\u003ch1 style=\"text-align: center;\"\u003e\u003cstrong\u003eKostenlose 3D Gravur + Edelstahl Baby Armband \u003c\/strong\u003e\u003c\/h1\u003e\n\u003cp\u003e\u003cimg alt=\"Gravurarmbänder als Taufschmuck mit Namen und Symbolen wie Kreuzen oder Engeln. Glatt polierte Oberfläche, in verschiedenen Farben und Größen erhältlich. Perfektes Andenken für Taufkinder und Babys.\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Tauf_1024x1024.png?v=1682253945\" style=\"margin-right: -54.4px; float: none;\"\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch5 style=\"text-align: right;\"\u003e\u003cbr\u003e\u003c\/h5\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\n\u003ctable class=\"elegant-table\" style=\"width: 382.844px;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 140px;\"\u003eEigenschaften\u003c\/th\u003e\n\u003cth style=\"width: 205.844px;\"\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eTyp\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eGeometrischer Plattenarmband mit Gliederkette\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eEdelstahl \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eGeschlecht\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eBabys \/ Kinder\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eFarbe \u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eMulticolor (Gelbgold(vergoldet),Stahl,Rosé)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eStil\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003ePlattenbreite\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e6mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003ePlattenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e25mm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003eKettenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e12 cm + 3 cm (verstellbar)\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003eGewicht\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003eca. 3,25 g\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_958366d4-f53a-4024-ae86-bd7811c297ee_480x480.png?v=1694261170\" style=\"display: block; margin-left: auto; margin-right: auto;\" width=\"360\" height=\"245\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003ch3\u003e\u003cstrong\u003eBesonderheiten \/ Hinweise\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cul align=\"start\"\u003e\n\u003cli\u003e\n\u003cp class=\"detail-desc-decorate-content\" data-spm-anchor-id=\"a2g0o.detail.1000023.i2.43345d91Sv0k5M\"\u003eDas Material des Produkts besteht aus Edelstahl. Verblasst nicht nach Kontakt mit Wasser. Wird sich nicht verdunkeln. Allergien vorbeugen!\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003everrostet nicht\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003enicht allergisch\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003estark von Anti-Säure, Anti-Alkali\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003ekeine Verformung\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003everblasst nicht\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch4\u003e\n\u003cspan\u003ePersonalisierter \u003c\/span\u003e\u003cspan\u003eSchmuck zur Taufe \u003c\/span\u003e\n\u003c\/h4\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003eaus 585 Gold, 925er Sterling Silber für \u003c\/span\u003e\u003cspan\u003eBabys und Kinder\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003eExklusive Namensarmbänder\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003ekostenlose Gravur. Handgemacht mit Sorgfalt und Liebe.\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch5\u003e\u003cspan\u003eBeschreibung\u003c\/span\u003e\u003c\/h5\u003e\n\u003cp\u003eDas perfekte Geschenk für den besonderen Anlass Ihres Kindes sind unsere personalisierten Tauf- und Kommunionsarmbänder. Jede Kette besteht aus erstklassigen Materialien und wird mit einer vergoldeten Beschichtung veredelt, um einen attraktiven Glanz zu erzeugen. Die Ketten gibt es in einer Vielzahl von Längen und können individuell angepasst werden, um eine bequeme Passform zu gewährleisten.\u003cbr\u003e\u003cbr\u003eDie Namensarmbänder werden individuell für Sie hergestellt. Sie können den Namen und Datum Ihres Kindes und zusätzlichen Symbolen gravieren lassen, um ein einzigartiges und langlebiges Andenken zu schaffen. Die Gravur wird kostenlos von unseren erfahrenen Handwerkern mit Präzision und Sorgfalt durchgeführt.\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eAuch für Freunde, Paten und Großeltern, die a diesem besonderen Tag anwesend sind, sind diese Tauf- und Kommunionsarmbänder großartige Geschenkideen. Sie werden in einer wunderschönen Schmuckschatulle verpackt, die ideal für die Aufbewahrung und Präsentation des Schmucks ist.\u003cbr\u003e\u003cbr\u003eBestellen Sie eine individuelle Tauf- oder Kommunionsarmbänder noch heute, um ein wunderschönes Erinnerungsstück zu schaffen, das ein Leben lang hält.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg height=\"550\" width=\"550\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/RoadmapGravur_480x480.png?v=1682035103\" style=\"display: block; margin-left: auto; margin-right: auto;\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg height=\"548\" width=\"549\" style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/road2_480x480.png?v=1682036533\" alt=\"\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Gravur \u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eErlebe den luxuriösen Glanz mit unserem personalisierten Schmuckstücken. Unsere edlen 3D Säulen Edelstahl-Anhänger (Baren) mit Kette (verstellbar) in glänzender Optik sind in drei Farben erhältlich: Silber, Rosé und gelb Gold. Die Säulen-Form des Anhängers verleiht ihm eine moderne Note und macht ihn zu einem perfekten Accessoire für jeden Anlass.\u003c\/span\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eKoordinaten, Namen, Initialen oder Symbole. \u003cstrong\u003e\u003cem\u003eAusreichend Platz für unbegrenzte Ideen.\u003c\/em\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Stahl","offer_id":44598411755785,"sku":"","price":39.0,"currency_code":"EUR","in_stock":false},{"title":"Rosé","offer_id":44598411788553,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet","offer_id":44598411821321,"sku":"","price":39.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_d8690126-eceb-4b98-87a1-35f6f582323b.png?v=1694261252"},{"product_id":"verstellbarer-edelstahl-ring-gravur","title":"Verstellbarer 3D Edelstahl‑Damenring | Kostenlose Premium-Gravur","description":"\u003cmeta charset=\"UTF-8\"\u003e\n\u003ctitle\u003eFiligrane Damenring aus Edelstahl vereint minimalistisches Design mit persönlicher Bedeutung\u003c\/title\u003e\n\n\u003c!-- SEO --\u003e\n\u003cmeta name=\"description\" content=\"Dieser filigrane Damenring aus Edelstahl vereint minimalistisches Design mit persönlicher Bedeutung. Die hochwertige 3D‑Gravur wird kostenlos umgesetzt – wähle Namen, Initialen, ein Datum oder ein Symbol für ein einzigartiges, persönliches Schmuckstück.\"\u003e\n\u003cmeta name=\"keywords\" content=\"personalisierter Damenring, 3D Edelstahl Ring, Premium Gravur Ring, Gravur Damenring, Edelstahl Ring Geschenk, zeitloser Schmuck Damen, Geschenkidee Schmuck\"\u003e\n\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n\u003c!-- Fonts --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003c!-- Bootstrap Icons --\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n\/* ==============================\n   SCOPED PRODUCT STYLES\n   ============================== *\/\n\n.engraving-product-2 {\n  font-family: 'Inter', sans-serif;\n  color: #111;\n  padding-left: 0px !important;\n  padding-right: 0px !important;\n}\n\n.engraving-product-2 .container {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n.engraving-product-2 .container2 {\n  max-width: 1200px;\n  width: 110%;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n@media (max-width: 768px) {\n  .engraving-product-2 {\n    padding-left: 0px !important;\n    padding-right: 0px !important;\n  }\n}\n\n\/* HERO *\/\n.engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n  line-height: 1.2;\n  margin-bottom: 20px;\n  color: #222;\n  font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n.engraving-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 40px;\n  background: #111;\n  color: #fff;\n  border-radius: 40px;\n  font-weight: 500;\n  transition: all .3s ease;\n}\n\n.engraving-cta:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 20px 40px rgba(0,0,0,.2);\n}\n\n.engraving-trust {\n  margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n  color: #777;\n}\n\n.engraving-trust span {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.engraving-image {\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n}\n\n.engraving-image img {\n  width: 140%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n}\n\n\/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n    margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n\/* SECTIONS *\/\n.engraving-section {\n  padding: 40px 0;\n}\n\n.engraving-section h2 {\n  font-family: 'Playfair Display', serif;\n  font-size: 38px;\n  margin-bottom: 20px;\n}\n\n.engraving-section-desc {\n  max-width: 720px;\n  color: #666;\n  margin-bottom: 60px;\n}\n\n\/* FEATURES *\/\n.engraving-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 40px;\n  border-radius: 28px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.06);\n  transition: transform .4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n}\n\n.engraving-feature i {\n  font-size: 32px;\n  color: #b6a573;\n  margin-bottom: 14px;\n  display: inline-block;\n}\n\n.engraving-feature h3 {\n  margin-bottom: 10px;\n  font-size: 18px;\n}\n\n.engraving-feature p {\n  font-size: 15px;\n  color: #666;\n}\n\n\/* CTA STRIP *\/\n.engraving-cta-strip {\n  background: linear-gradient(135deg, #111, #1c1c1c);\n  color: #fff;\n  padding: 80px 20px;\n  text-align: center;\n}\n\n.engraving-cta-strip h2 {\n  color: #fff;\n  margin-bottom: 20px;\n}\n\n.engraving-cta-strip p {\n  color: #ccc;\n  margin-bottom: 30px;\n}\n\n\/* ANIMATION *\/\n.engraving-fade {\n  opacity: 0;\n  transform: translateY(30px);\n  transition: 1s ease;\n}\n\n.engraving-fade.show {\n  opacity: 1;\n  transform: none;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n}\n\n.engraving-collection-btn {\n  position: relative;\n  padding: 14px 28px;\n  background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n  color: rgb(255, 255, 255);\n  font-weight: 400;\n  font-size: 13px;\n  border-radius: 999px;\n  letter-spacing: .5px;\n  border: 1px solid rgba(220, 184, 75, 0.6);\n  cursor: pointer;\n  overflow: hidden;\n  box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n  transition: all .35s ease;\n}\n\n.engraving-collection-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n  color: #ffdd7a;\n}\n\n.engraving-collection-btn::before {\n  content: '';\n  position: absolute;\n  inset: -1px;\n  border-radius: inherit;\n  background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n  opacity: .45;\n  pointer-events: none;\n  animation: idleGlow 4.5s ease-in-out infinite;\n}\n\n.engraving-collection-btn::after {\n  content: '';\n  position: absolute;\n  inset: -120%;\n  background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n  opacity: 0;\n  transform: scale(.2);\n  pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n  animation: pulseGlow 1.1s ease-out forwards;\n}\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n.micro-trust-valentine {\n  margin-top: 1.5rem;\n  font-size: 1.3rem;\n  color: #746742;\n  font-weight: 600;\n}\n\n\/* =========================\n   SPECS\n========================== *\/\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px;\n  flex-wrap: wrap;\n  margin-top: 30px;\n  background: #fff;\n  border-radius: 30px;\n  padding: 50px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.05);\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n  color: #bfac79;\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n\n.engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    padding: 30px 20px;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n\/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n  text-align: center;\n}\n\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79;\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-why-heart .engraving-feature {\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-why-heart .engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-why-heart .engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79;\n  margin-bottom: 16px;\n}\n\n.engraving-why-heart .engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n\n.engraving-why-heart .engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n\n\/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.6rem;\n  letter-spacing: 0.08em;\n  color: rgb(186 186 186 \/ 94%);\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(0px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n  font-size: 2.1rem;\n  margin-bottom: 12px;\n  color: #4b2f2f;\n  font-weight: 600;\n  margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-preview-content .engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n\n\/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n  transform: scale(1.05);\n  background: #d7bf78;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n\/* FONT PICKER *\/\n.engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem;\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem;\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n@media (max-width: 640px) {\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n    padding-bottom: 12px;\n  }\n\n  .font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr);\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    width: auto;\n    font-size: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 10px;\n  }\n\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px;\n    margin-bottom: 15px;\n  }\n}\n\n\/* =========================\n   LIVE PREVIEW LINK\n========================== *\/\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c;\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n}\n\n@keyframes luxuryGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(201,168,92,0), 0 0 0 rgba(201,168,92,0);\n  }\n  50% {\n    text-shadow: 0 0 10px rgba(201,168,92,0.55), 0 0 22px rgba(201,168,92,0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(201,168,92,0), 0 0 0 rgba(201,168,92,0);\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================== *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n  margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  color: #e6d3a3;\n  background: linear-gradient(180deg, #141414, #0d0d0d);\n  border: 1px solid rgba(201,168,92,0.45);\n  overflow: hidden;\n  isolation: isolate;\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n  width: 60%;\n  height: 220%;\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n  transform: skewX(-20deg);\n  opacity: 0.9;\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n@keyframes goldLaser {\n  0%   { left: -120%; }\n  55%  { left: 140%; }\n  100% { left: 140%; }\n}\n\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n\/* Roségold *\/\n.luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n  font-size: 1.1em;\n}\n\n\/* Weißgold *\/\n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\n\/* Silber *\/\n.luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n\n@media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n}\n\n\/* =========================\n   PREVIEW EFFEKTE\n========================== *\/\n@keyframes engravingPulse {\n  0%   { transform: scale(1);    box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1);    box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n\n@keyframes pulseGlow {\n  0%   { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50%  { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n@keyframes idleGlow {\n  0%   { opacity: .35; }\n  50%  { opacity: .6; }\n  100% { opacity: .35; }\n}\n\n.engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 103px;\n  left: 34px;\n}\n\n\/* Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* Golden fade *\/\n.engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n  animation: fadeInSoft 0.6s ease-out both;\n}\n\n@keyframes fadeInSoft {\n  from { opacity: 0; transform: translateY(-2px); }\n  to   { opacity: 1; transform: translateY(0); }\n}\n\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\/* =========================\n   MOBILE POPUP\n========================== *\/\n#engraving-mobile-popup {\n  display: block;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 235px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-check {\n  position: absolute;\n  top: -15px;\n  left: 65px;\n  font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n\n@media (max-width: 769px) {\n  .engraving-overlay span {\n    font-family: \"Playfair Display\", serif;\n    font-size: 1.35rem;\n    letter-spacing: 0.02em;\n    color: rgb(217 217 217 \/ 71%);\n    text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n  }\n\n  .engraving-preview-text-wrap {\n    bottom: 106px;\n    left: 30px !important;\n  }\n\n  .popup-preview-text-wrap {\n    position: absolute;\n    top: 29%;\n    left: 50%;\n    white-space: nowrap;\n    display: block;\n  }\n}\n\n\/* =========================\n   HERO SUBLINE\n========================== *\/\n.hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n\n\/* =========================\n   RING FIT \/ ADJUST\n========================== *\/\n.ring-fit-box {\n  background: #fff;\n  border: 1px solid rgba(0, 0, 0, .08);\n  border-radius: 12px;\n  padding: 24px;\n  margin-top: 24px;\n}\n\n.ring-fit-header {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-weight: 600;\n  font-size: 16px;\n  color: #111;\n  margin-bottom: 10px;\n}\n\n.ring-fit-header i {\n  color: #b89b5e;\n  font-size: 22px;\n}\n\n.ring-fit-text {\n  font-size: 14px;\n  line-height: 1.6;\n  color: #444;\n  margin-bottom: 16px;\n}\n\n.ring-fit-trust {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-bottom: 14px;\n}\n\n.ring-fit-item {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: 13px;\n  color: #333;\n}\n\n.ring-fit-item i {\n  color: #b89b5e;\n  font-size: 16px;\n}\n\n.ring-fit-tip {\n  font-size: 12px;\n  color: #777;\n}\n\n@media (max-width: 600px) {\n  .ring-fit-box {\n    padding: 16px;\n  }\n  .ring-fit-trust {\n    grid-template-columns: 1fr;\n    gap: 8px;\n  }\n  .ring-fit-header {\n    font-size: 15px;\n  }\n  .ring-fit-text {\n    font-size: 13px;\n  }\n}\n\n.ring-adjust-wrapper {\n  padding: 50px 20px;\n}\n\n.ring-adjust-container {\n  max-width: 1200px;\n  margin: auto;\n}\n\n.ring-adjust-section {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 40px;\n  align-items: center;\n  margin-top: 30px;\n}\n\n.ring-adjust-image img {\n  width: 100%;\n  border-radius: 12px;\n}\n\n.ring-adjust-header {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  font-weight: 600;\n  font-size: 17px;\n  margin-bottom: 10px;\n}\n\n.ring-adjust-header i {\n  color: #b89b5e;\n  font-size: 22px;\n}\n\n.ring-adjust-content p {\n  font-size: 14px;\n  line-height: 1.6;\n  color: #444;\n  margin-bottom: 16px;\n}\n\n.ring-adjust-trust {\n  display: flex;\n  gap: 18px;\n  flex-wrap: wrap;\n  margin-bottom: 12px;\n}\n\n.adjust-item {\n  display: flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 13px;\n  color: #333;\n}\n\n.adjust-item i {\n  color: #b89b5e;\n}\n\n.ring-adjust-tip {\n  font-size: 12px;\n  color: #777;\n}\n\n@media (max-width: 768px) {\n  .ring-adjust-section {\n    grid-template-columns: 1fr;\n    gap: 24px;\n  }\n  .ring-adjust-content p {\n    font-size: 13px;\n  }\n  .ring-adjust-wrapper {\n    padding: 40px 16px;\n  }\n}\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"engraving-product-2\"\u003e\n\n    \u003c!-- =========================\n         HERO\n    ========================== --\u003e\n    \u003csection class=\"engraving-hero engraving-fade show\"\u003e\n        \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n            \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n                \u003c!-- Textbereich --\u003e\n                \u003cdiv class=\"engraving-hero-text\"\u003e\n\n                    \u003ch1\u003eMehr als ein minimalistischer Ring – Deine Geschichte in Edelstahl graviert\u003c\/h1\u003e\n\n                    \u003cdiv class=\"hero-subline\"\u003e\n                        \u003cspan class=\"engraving-badge\"\u003e\n                            \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n                        \u003c\/span\u003e\n\n                        \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n                            \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n                            Live-Vorschau ansehen\n                        \u003c\/a\u003e\n                    \u003c\/div\u003e\n\n                    \u003cp\u003e\n                        Ein schlanker, verstellbarer Edelstahlring mit feiner Oberfläche – perfekt für den Alltag oder als zeitloses Geschenk. Präzise Gravur in 3D‑Optik macht jeden Ring zum einzigartigen Schmuckstück für besondere Momente.\n                    \u003c\/p\u003e\n\n                    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                        Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                    \u003c\/button\u003e\n\n                    \u003cdiv class=\"micro-trust-valentine\"\u003e\n                        Sicher · Persönlich · Handgefertigt\n                    \u003c\/div\u003e\n\n                    \u003c!-- Trust Icons --\u003e\n                    \u003cdiv class=\"engraving-trust\"\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz Finish\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e verstellbar\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 2mm Ringbreite\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e ca. 2 g\u003c\/span\u003e\n                        \u003cspan\u003e\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e Damen\u003c\/span\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"ring-fit-box\"\u003e\n\n                        \u003cdiv class=\"ring-fit-header\"\u003e\n                            \u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\n                            \u003cspan\u003eFlexible Passform – Einheitsgröße\u003c\/span\u003e\n                        \u003c\/div\u003e\n\n                        \u003cp class=\"ring-fit-text\"\u003e\n                            Dieser Ring wird in einer Einheitsgröße gefertigt und lässt sich individuell anpassen.\n                            Durch vorsichtiges Zusammendrücken oder leichtes Auseinanderziehen kann er an nahezu\n                            jeden Finger angepasst werden – für einen sicheren und angenehmen Sitz.\n                        \u003c\/p\u003e\n\n                        \u003cdiv class=\"ring-fit-trust\"\u003e\n                            \u003cdiv class=\"ring-fit-item\"\u003e\n                                \u003ci class=\"bi bi-hand-index-thumb\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003eEinfach anpassen\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"ring-fit-item\"\u003e\n                                \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003eIdeal als Geschenk\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"ring-fit-item\"\u003e\n                                \u003ci class=\"bi bi-check-circle\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003ePasst an fast jeden Finger\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003cdiv class=\"ring-fit-tip\"\u003e\n                            Tipp: Den Ring behutsam und schrittweise anpassen, um Material und Gravur zu schonen.\n                        \u003c\/div\u003e\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n\n                \u003c!-- Bildbereich --\u003e\n                \u003cdiv class=\"watch-image\"\u003e\n                    \u003cimg class=\"watch-img-primary\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/damenring_3d_minimalistisch_gesamt.png?v=1771259367\" alt=\"Verstellbarer 3D Edelstahl Ring mit Gravur\"\u003e\n                    \u003cimg class=\"watch-img-hover\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/86F0954B-C2E5-4065-AD75-463CA8C64E8F.jpg?v=1773162530\" alt=\"Verstellbarer 3D Edelstahl Ring mit Gravur\"\u003e\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         WHY STORY BLOCK\n    ========================== --\u003e\n    \u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n        \u003cdiv class=\"container\"\u003e\n            \u003ch2\u003eWarum dieser Ring? Ein Schmuckstück, das Geschichten erzählt\u003c\/h2\u003e\n            \u003cp\u003e\n                Dieser verstellbare Edelstahlring vereint minimalistisches Design mit persönlicher Bedeutung.\n                Eine kostenlose 3D‑Gravur macht ihn zu einem einzigartigen Ausdruck deiner Geschichte – getragen nah am Herzen.\n            \u003c\/p\u003e\n\n            \u003cdiv class=\"engraving-why-grid\"\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003ePersönlich \u0026amp; Ausdrucksstark\u003c\/h3\u003e\n                    \u003cp\u003eGravuren machen diesen Ring zum einzigartigen Statement.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Gefertigt aus robustem Edelstahl – rostfrei, langlebig\n                        und hautfreundlich. Entwickelt für den täglichen Gebrauch\n                        und präzise Gravuren.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eUnbegrenzte Ideen\u003c\/h3\u003e\n                    \u003cp\u003eInitialen, Namen, Symbole oder ein kurzer Text – kreativ gestalten.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003ePersönliches Geschenk\u003c\/h3\u003e\n                    \u003cp\u003eEin Ring voller Bedeutung – perfekt für besondere Menschen \u0026amp; Momente.\u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         SHIPPING \u0026 TRUST BLOCK\n    ========================== --\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\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e\n                        nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Jede Gravur entsteht in unserem Familienbetrieb –\n                        \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n                    \u003c\/p\u003e\n                    \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"shipping-item\"\u003e\n                    \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Sichere Zahlung, persönlicher Support\n                        und höchste Qualitätskontrolle vor dem Versand.\n                    \u003c\/p\u003e\n                    \u003cp\u003e\n                        Sollte etwas nicht passen, findest du mit uns\n                        unkompliziert eine Lösung.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         FEATURES\n    ========================== --\u003e\n    \u003csection class=\"engraving-section engraving-fade\"\u003e\n        \u003cdiv class=\"container engraving-hero-text\"\u003e\n            \u003ch1\u003eMehr als ein Ring\u003c\/h1\u003e\n            \u003cp class=\"engraving-section-desc\"\u003e\n                Ein Ring, der Stil, Bedeutung und Emotion verbindet. Ideal für Damen, die Schmuck lieben, der Geschichten erzählt.\n            \u003c\/p\u003e\n\n            \u003cdiv class=\"engraving-features\"\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Namen, Initialen, Daten, Koordinaten oder Symbole – gratis und detailreich umgesetzt.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eVerstellbares Design\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Flexibel anpassbar für optimalen Sitz – stylish und komfortabel, ohne feste Ringgröße.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eGeschenkfertig\u003c\/h3\u003e\n                    \u003cp\u003eExklusives Design + personalisierte Gravur = ideales Geschenk für Geburtstag, Jahrestag oder besondere Anlässe.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eElegant \u0026amp; Zeitlos\u003c\/h3\u003e\n                    \u003cp\u003eMinimalistisches 3D-Design, glänzender Edelstahl – ein Schmuckstück, das jeden Look aufwertet.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         SPECS SECTION\n    ========================== --\u003e\n    \u003csection class=\"engraving-section engraving-fade\"\u003e\n        \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n            \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n            \u003cdiv class=\"engraving-specs\"\u003e\n                \u003cul\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eRingbreite:\u003c\/strong\u003e ca. 2 mm\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerstellbar:\u003c\/strong\u003e Ja\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 2 g\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n                \u003c\/ul\u003e\n                \u003cul\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Damen\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich · Ausdrucksstark\u003c\/li\u003e\n                    \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Alltag · Geschenk · Schmuckstück\u003c\/li\u003e\n                \u003c\/ul\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         RING ADJUST\n    ========================== --\u003e\n    \u003csection class=\"ring-adjust-wrapper engraving-fade\"\u003e\n        \u003cdiv class=\"ring-adjust-container\"\u003e\n            \u003cdiv class=\"ring-adjust-section\"\u003e\n\n                \u003cdiv class=\"ring-adjust-image\"\u003e\n                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG-3220.png?v=1773155695\" alt=\"Verstellbarer Ring – Anpassung\"\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"ring-fit-box\"\u003e\n                    \u003cdiv class=\"ring-adjust-content\"\u003e\n\n                        \u003cdiv class=\"ring-adjust-header\"\u003e\n                            \u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\n                            \u003cspan\u003eFlexible Passform – Einheitsgröße\u003c\/span\u003e\n                        \u003c\/div\u003e\n\n                        \u003cp\u003e\n                            Dieser Ring wird bewusst in einer Einheitsgröße gefertigt und lässt sich\n                            individuell anpassen. Durch vorsichtiges Zusammendrücken oder leichtes\n                            Auseinanderziehen kann er an nahezu jeden Finger angepasst werden.\n                        \u003c\/p\u003e\n\n                        \u003cdiv class=\"ring-adjust-trust\"\u003e\n                            \u003cdiv class=\"adjust-item\"\u003e\n                                \u003ci class=\"bi bi-hand-index-thumb\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003eEinfach anpassen\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"adjust-item\"\u003e\n                                \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003eIdeal als Geschenk\u003c\/span\u003e\n                            \u003c\/div\u003e\n                            \u003cdiv class=\"adjust-item\"\u003e\n                                \u003ci class=\"bi bi-check-circle\"\u003e\u003c\/i\u003e\n                                \u003cspan\u003ePasst an fast jeden Finger\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003cdiv class=\"ring-adjust-tip\"\u003e\n                            Tipp: Den Ring behutsam und schrittweise anpassen, um Material und Gravur zu schonen.\n                        \u003c\/div\u003e\n\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- =========================\n         GRAVUR LIVE PREVIEW\n    ========================== --\u003e\n    \u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n        \u003cspan class=\"engraving-badge visible-xs\"\u003e\n            \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n        \u003c\/span\u003e\n\n        \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n            \u003c!-- IMAGE --\u003e\n            \u003c!--\n              data-variant-images: Schlüssel = exakter Optionswert im Shopify-Produkt.\n              Werte = Bild-URL der jeweiligen Variante. Nur hier pflegen.\n            --\u003e\n            \u003cdiv class=\"engraving-preview-image\" data-variant-images='{\n                   \"Edelstahl\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/damenring_stahl_gravur_frontal.png?v=1771259515\",\n                   \"Rosegold\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/DEIN_ROSEGOLD_BILD.png\",\n                   \"Gelbgold\":\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/DEIN_GELBGOLD_BILD.png\"\n                 }'\u003e\n\n                \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/damenring_stahl_gravur_frontal.png?v=1771259515\" alt=\"Edelstahl Ring ohne Gravur\"\u003e\n\n                \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n                    \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n                        \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n                        \u003cspan class=\"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\n                \u003cp class=\"engraving-preview-note\"\u003e\n                    ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n                \u003c\/p\u003e\n\n            \u003c\/div\u003e\n\n            \u003c!-- CONTENT --\u003e\n            \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n                \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n                    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n                \u003c\/span\u003e\n\n                \u003ch2\u003eMach diesen Ring einzigartig\u003c\/h2\u003e\n                \u003cp\u003e\n                    Gib deine gewünschte Gravur ein und sieh sofort,\n                    wie dein persönlicher Ring Gestalt annimmt.\n                \u003c\/p\u003e\n\n                \u003c!-- INPUT --\u003e\n                \u003cdiv class=\"engraving-input-wrap\"\u003e\n                    \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n                    \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"6\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n                    \u003csmall\u003eMax. 6 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n                \u003c\/div\u003e\n\n                \u003c!-- SYMBOL PICKER --\u003e\n                \u003cdiv class=\"engraving-symbol-picker\"\u003e\n                    \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n                \u003c!-- FONT PICKER --\u003e\n                \u003cdiv class=\"engraving-font-select\"\u003e\n                    \u003cdiv class=\"engraving-font-picker\"\u003e\n                        \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n\n                        \u003c!-- SERIF --\u003e\n                        \u003cdiv class=\"font-group\"\u003e\n                            \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n                            \u003cdiv class=\"font-group-buttons\"\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n                                    Times New Roman\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n                                    Georgia\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- SANS --\u003e\n                        \u003cdiv class=\"font-group\"\u003e\n                            \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n                            \u003cdiv class=\"font-group-buttons\"\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n                                    Arial\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n                                    Helvetica\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- MONOSPACE --\u003e\n                        \u003cdiv class=\"font-group\"\u003e\n                            \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n                            \u003cdiv class=\"font-group-buttons\"\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n                                    Courier New\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n                                    Lucida Console\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- SCRIPT --\u003e\n                        \u003cdiv class=\"font-group\"\u003e\n                            \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n                            \u003cdiv class=\"font-group-buttons\"\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n                                    Allura\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n                                    Alex Brush\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n                                    Kaushan Script\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- HANDWRITING --\u003e\n                        \u003cdiv class=\"font-group\"\u003e\n                            \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n                            \u003cdiv class=\"font-group-buttons\"\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n                                    Pacifico\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n                                    Indie Flower\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n                                    Dancing Script\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n                        \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n\n                \u003c!-- CTA --\u003e\n                \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                \u003c\/button\u003e\n\n                \u003c!-- MICRO TRUST --\u003e\n                \u003cdiv class=\"engraving-micro-trust\"\u003e\n                    \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                    Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003c!-- End Block --\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. Deine Geschichte.\u003c\/h2\u003e\n        \u003cp\u003eEin Schmuckstück, 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    \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n    \u003cdiv class=\"popup-preview\" style=\"position:relative;margin-bottom:10px;\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/damenring_stahl_gravur_frontal.png?v=1771259515\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n\n        \u003c!-- Kein id-Attribut hier: engravingOverlay existiert genau einmal (oben) --\u003e\n        \u003cdiv class=\"engraving-overlay active\"\u003e\n            \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n                \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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\n    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n    \u003c\/button\u003e\n\u003c\/div\u003e\n\n\n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\n(function () {\n    const engravingObserver = new IntersectionObserver(entries =\u003e {\n        entries.forEach(entry =\u003e {\n            if (entry.isIntersecting) entry.target.classList.add('show');\n        });\n    }, { threshold: 0.2 });\n\n    document.querySelectorAll('.engraving-fade').forEach(el =\u003e\n        engravingObserver.observe(el)\n    );\n})();\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n    ctaButtons.forEach(btn =\u003e {\n        btn.addEventListener(\"click\", function (e) {\n            e.preventDefault();\n\n            const gravurInput = document.querySelector(\"#gravurtext_oberfläche\");\n            const previewText = document.getElementById(\"engravingPreviewText\");\n\n            if (gravurInput \u0026\u0026 previewText) {\n                gravurInput.value = previewText.textContent.trim();\n                const fontFamily = window.getComputedStyle(previewText).fontFamily;\n                gravurInput.style.fontFamily = fontFamily;\n\n                const back = document.querySelector(\"#gravurtext_2\");\n                if (back) back.style.fontFamily = fontFamily;\n            }\n\n            const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n            if (gravurFontSelect \u0026\u0026 previewText) {\n                const previewFont = window.getComputedStyle(previewText).fontFamily;\n                let found = false;\n                Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n                    if (previewFont.includes(opt.value)) {\n                        gravurFontSelect.selectedIndex = i;\n                        found = true;\n                    }\n                });\n                if (!found) gravurFontSelect.selectedIndex = 0;\n            }\n\n            const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n            if (!productForm) return;\n\n            productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n            const firstInput = productForm.querySelector(\"input, textarea, select\");\n            if (firstInput) firstInput.focus();\n        });\n    });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const uls = document.querySelectorAll('.engraving-specs ul');\n    const observer = new IntersectionObserver(entries =\u003e {\n        entries.forEach(entry =\u003e {\n            if (entry.isIntersecting) entry.target.classList.add('visible');\n        });\n    }, { threshold: 0.3 });\n    uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons (optional)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const sizeButtons = document.querySelectorAll('.size-btn');\n    if (!sizeButtons.length) return;\n\n    sizeButtons.forEach(btn =\u003e {\n        btn.addEventListener('click', () =\u003e {\n            sizeButtons.forEach(b =\u003e b.classList.remove('active'));\n            btn.classList.add('active');\n\n            const out = document.getElementById('engraving-size-value');\n            if (out) out.textContent = btn.getAttribute('data-size');\n        });\n    });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    const input       = document.getElementById(\"engravingInput\");\n    const previewText = document.getElementById(\"engravingPreviewText\");\n    const overlay     = document.getElementById(\"engravingOverlay\");\n\n    if (!input || !previewText || !overlay) return;\n\n    const mobilePopup     = document.getElementById(\"engraving-mobile-popup\");\n    const mobilePopupText = mobilePopup ? mobilePopup.querySelector(\".popup-preview-text\") : null;\n\n    function showPopup() {\n        if (window.innerWidth \u003e 768) return;\n        if (mobilePopup) mobilePopup.classList.add(\"show\");\n    }\n\n    function hidePopup() {\n        if (mobilePopup) mobilePopup.classList.remove(\"show\");\n    }\n\n    \/* ---- Desktop Effects ---- *\/\n    function triggerDesktopEffects() {\n        previewText.classList.remove(\"engrave-fade\");\n        void previewText.offsetWidth;\n        previewText.classList.add(\"engrave-fade\");\n\n        const check = document.querySelector(\".preview-check\");\n        if (check) {\n            check.classList.add(\"show\");\n            clearTimeout(check._timeout);\n            check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n        }\n    }\n\n    \/* ---- Mobile Popup Sync (einzige Stelle) ---- *\/\n    function syncMobilePopup() {\n        if (!mobilePopupText || !mobilePopup) return;\n\n        const value = input.value.trim();\n        if (!value) return;\n\n        mobilePopupText.textContent = value;\n        mobilePopupText.style.fontFamily =\n            window.getComputedStyle(previewText).fontFamily;\n\n        mobilePopupText.classList.remove(\"engrave-fade\");\n        void mobilePopupText.offsetWidth;\n        mobilePopupText.classList.add(\"engrave-fade\");\n\n        const popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n        if (popupCheck) {\n            popupCheck.classList.add(\"show\");\n            clearTimeout(popupCheck._timeout);\n            popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n        }\n\n        showPopup();\n    }\n\n    const symbolButtons   = document.querySelectorAll(\".symbol-btn\");\n    const fontButtons     = document.querySelectorAll(\".font-btn\");\n    const hiddenFontInput = document.getElementById(\"selectedFont\");\n    const MAX_LENGTH      = 6;\n    let lastValue = \"\";\n\n    function updatePreview(force) {\n        const value = input.value;\n\n        if (!value) {\n            overlay.classList.remove(\"active\");\n            hidePopup();\n            lastValue = \"\";\n            return;\n        }\n\n        previewText.textContent = value;\n        overlay.classList.add(\"active\");\n\n        if (force || value.length !== lastValue.length) {\n            triggerDesktopEffects();\n            syncMobilePopup();\n        }\n\n        lastValue = value;\n    }\n\n    input.addEventListener(\"input\", function () { updatePreview(false); });\n\n    \/* ---- Symbols ---- *\/\n    symbolButtons.forEach(btn =\u003e {\n        btn.addEventListener(\"click\", () =\u003e {\n            const symbol = btn.dataset.symbol;\n            if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n            const start = input.selectionStart;\n            const end   = input.selectionEnd;\n\n            input.value =\n                input.value.substring(0, start) +\n                symbol +\n                input.value.substring(end);\n\n            input.focus();\n            input.selectionStart = input.selectionEnd = start + symbol.length;\n            updatePreview(true);\n        });\n    });\n\n    \/* ---- Fonts ---- *\/\n    fontButtons.forEach(btn =\u003e {\n        btn.addEventListener(\"click\", () =\u003e {\n            const font = btn.dataset.font;\n            previewText.style.fontFamily = font;\n\n            const back = document.getElementById(\"gravurtext_2\");\n            if (back) back.style.fontFamily = font;\n\n            if (hiddenFontInput) hiddenFontInput.value = font;\n\n            fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n            btn.classList.add(\"active\");\n\n            updatePreview(true);\n            requestAnimationFrame(syncMobilePopup);\n        });\n    });\n\n    document.addEventListener(\"click\", e =\u003e {\n        if (mobilePopup \u0026\u0026 !mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n    });\n\n    window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const previewImage = document.querySelector('.engraving-preview-image');\n    const input = document.getElementById(\"engravingInput\");\n    if (!previewImage || !input) return;\n\n    let hasPulsed = false;\n\n    input.addEventListener('input', e =\u003e {\n        if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n            previewImage.classList.remove('pulse');\n            void previewImage.offsetWidth;\n            previewImage.classList.add('pulse');\n            hasPulsed = true;\n        }\n    });\n});\n\n\/* =========================\n   Live Preview Link\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    document.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n        link.addEventListener('click', e =\u003e {\n            e.preventDefault();\n            const target = document.querySelector('#engraving-preview');\n            if (target) target.scrollIntoView({ behavior: 'smooth', block: 'center' });\n        });\n    });\n});\n\n\/* =========================\n   VARIANT -\u003e PREVIEW IMAGE SYNC\n   Hält Vorschaubild (Desktop + Mobile Popup)\n   an der gewählten Farbvariante.\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n    const wrap = document.querySelector(\".engraving-preview-image[data-variant-images]\");\n    if (!wrap) return;\n\n    const mainImg  = wrap.querySelector(\"#engravingProductImage\");\n    const popupImg = document.querySelector(\"#engraving-mobile-popup .popup-preview-image\");\n    const form     = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n\n    if (!mainImg || !form) return;\n\n    let map = {};\n    try {\n        map = JSON.parse(wrap.dataset.variantImages);\n    } catch (e) {\n        return;\n    }\n\n    const norm = s =\u003e (s || \"\").toString().toLowerCase()\n                        .replace(\/ß\/g, \"ss\")\n                        .replace(\/[\\s\\-_.]\/g, \"\");\n\n    const lookup = {};\n    Object.keys(map).forEach(k =\u003e { lookup[norm(k)] = map[k]; });\n\n    function currentColor() {\n        const radio = form.querySelector(\n            \"input[type=radio][name*='Farbe']:checked, input[type=radio][name*='Material']:checked\"\n        );\n        if (radio) return radio.value;\n\n        const sel = form.querySelector(\n            \"select[name*='Farbe'], select[name*='Material'], .single-option-selector\"\n        );\n        if (sel) return sel.value;\n\n        return null;\n    }\n\n    function swap(img, src) {\n        if (!img || !src) return;\n        if (img.getAttribute(\"src\") === src) return;\n\n        img.style.transition = \"opacity .25s ease\";\n        img.style.opacity = \"0\";\n\n        setTimeout(() =\u003e {\n            img.src = src;\n            img.style.opacity = \"1\";\n        }, 220);\n    }\n\n    let expectedSrc = null;\n\n    function applyVariantImage() {\n        const src = lookup[norm(currentColor())];\n        if (!src) return;             \/\/ unbekannter Optionswert -\u003e Bild bleibt\n\n        expectedSrc = src;\n        swap(mainImg, src);\n        swap(popupImg, src);\n    }\n\n    \/* Schutz: falls ein fremdes Script das Bild überschreibt,\n       einmalig zurücksetzen statt dauerhaft zu kämpfen. *\/\n    function reassert() {\n        if (!expectedSrc) return;\n        if (mainImg.getAttribute(\"src\") !== expectedSrc) {\n            mainImg.src = expectedSrc;\n            if (popupImg) popupImg.src = expectedSrc;\n        }\n    }\n\n    form.addEventListener(\"change\", function () {\n        applyVariantImage();\n        setTimeout(reassert, 400);\n    });\n\n    document.addEventListener(\"shopify:section:load\", applyVariantImage);\n\n    applyVariantImage();\n    setTimeout(reassert, 600);\n});\n\u003c\/script\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Edelstahl","offer_id":44598485483785,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Rosé (vergoldet)","offer_id":44598485516553,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Gold (vergoldet)","offer_id":44598485549321,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/damenring_stahl_gravur_frontal_4e42d130-a345-4c20-9b9d-dfb2115a7232.png?v=1775226504"},{"product_id":"mama-edelstahl-herz-anhanger-kette","title":"Mama| Edelstahl Herz Anhänger + Kette","description":"\u003ch2\u003e\u003cspan\u003eEine Umarmung in einer Schachtel: Muttertagsgeschenke, die das Herz berühren\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp\u003e\u003cspan\u003eDieses wunderschöne Schmuckstück in der Farbe Gold ist ein wahrer Blickfang. Das Herzförmige Anhänger ist mit funkelnden, klaren Kristallen besetzt und wird von einer zarten Kette gehalten. Das hochwertige Schmuckstück eignet sich perfekt als Geschenk für einen besonderen Menschen oder als elegante Ergänzung zu jedem Outfit. Die sorgfältige Verarbeitung und das edle Design machen dieses Schmuckstück zu einem zeitlosen Klassiker.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch4\u003e\u003cspan\u003eEntdecken Sie jetzt unser breites Sortiment an Schmuckstücken und finden Sie das perfekte Accessoire für sich selbst oder die liebste Mama.\u003c\/span\u003e\u003c\/h4\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\" style=\"display: block; margin-left: auto; margin-right: auto;\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cblockquote\u003e\n\u003ch4\u003e\u003cspan\u003eJetzt Mama mit einem Geschenk überraschen, das sie für immer in Erinnerung behalten wird.\u003c\/span\u003e\u003c\/h4\u003e\n\u003c\/blockquote\u003e\n\u003ch3\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003e#everydayismamaday\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch4\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003eDetails\u003c\/span\u003e\u003c\/h4\u003e\n\u003cstyle\u003e\u003c!--\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n--\u003e\u003c\/style\u003e\n\u003cdiv class=\"scrollable-wrapper\" style=\"border-radius: 10px;\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ctable style=\"width: 382.844px;\" class=\"elegant-table\" data-mce-style=\"width: 382.844px;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eEigenschaften\u003c\/th\u003e\n\u003cth style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan data-spm-anchor-id=\"a2g0o.detail.0.i14.18c45c72dC5CBP\" class=\"property-title\"\u003eForm \\ Muster: \u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eHerz Anhänger mit\u003cspan data-mce-fragment=\"1\"\u003e Halskette\u003c\/span\u003e\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eEdelstahl\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eGeschlecht\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eFrauen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eFarbe\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eRosé\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eStil\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eAnhängerbreite\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cspan\u003e5\u003c\/span\u003e\u003cspan\u003e cm\u003c\/span\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eKettenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\u003cspan\u003e50 cm \u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eAnhängergröße (Breite x Höhe)\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003e\u003cspan\u003e5 cm * 4 cm\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eSteine\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003eZirkonia  (weiße,lila)\u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano","offers":[{"title":"Rosé","offer_id":44616617230601,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/anhaenger_mama.png?v=1695384844"},{"product_id":"mama-edelstahl-mama-schriftzug-anhanger-kette","title":"Mama| Edelstahl Mama Schriftzug Anhänger + Kette","description":"\u003ch2\u003e\u003cspan\u003eEine Umarmung in einer Schachtel: Mamageschenke, die das Herz berühren\u003c\/span\u003e\u003c\/h2\u003e\n\u003cp\u003e\u003cspan\u003eDieses wunderschöne Schmuckstück in der Farbe Gold ist ein wahrer Blickfang. Das Herzförmige Anhänger ist mit funkelnden, klaren Kristallen besetzt und wird von einer zarten Kette gehalten. Das hochwertige Schmuckstück eignet sich perfekt als Geschenk für einen besonderen Menschen oder als elegante Ergänzung zu jedem Outfit. Die sorgfältige Verarbeitung und das edle Design machen dieses Schmuckstück zu einem zeitlosen Klassiker.\u003c\/span\u003e\u003c\/p\u003e\n\u003ch4\u003e\u003cspan\u003eEntdecken Sie jetzt unser breites Sortiment an Schmuckstücken und finden Sie das perfekte Accessoire für sich selbst oder die liebste Mama.\u003c\/span\u003e\u003c\/h4\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\" alt=\"\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_480x480.png?v=1682464352\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cblockquote\u003e\n\u003ch4\u003e\u003cspan\u003eJetzt Mama mit einem Geschenk überraschen, das sie für immer in Erinnerung behalten wird.\u003c\/span\u003e\u003c\/h4\u003e\n\u003c\/blockquote\u003e\n\u003ch3\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003e#everydayismamaday\u003c\/span\u003e\u003c\/h3\u003e\n\u003ch4\u003e\u003cspan style=\"color: #dc4841;\" data-mce-style=\"color: #dc4841;\"\u003eDetails\u003c\/span\u003e\u003c\/h4\u003e\n\u003cstyle\u003e\u003c!--\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n--\u003e\u003c\/style\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ch3 style=\"text-align: left;\"\u003e\u003cstrong\u003eKupfer vergoldete Mama-Halskette\u003c\/strong\u003e\u003c\/h3\u003e\n\u003ch4 style=\"text-align: left;\"\u003e✔️ Hochwertiges\u003cspan\u003e \u003c\/span\u003eKupfermaterial\u003cspan\u003e \u003c\/span\u003e✔️ Eleganter Überzug (3x feinpolierte Spiegel Überzug)\u003cspan\u003e \u003c\/span\u003e\u003cspan data-mce-fragment=\"1\"\u003everblasst nicht einfach\u003c\/span\u003e✔️ Zeitlos und vielseitig ✔️ Perfektes Geschenk\u003c\/h4\u003e\n\u003ch4 style=\"text-align: left;\"\u003eZeigen Sie Ihre Einzigartigkeit mit unserem exklusiven Schmuck.\u003c\/h4\u003e\n\u003ch4 style=\"text-align: left;\"\u003eJetzt bestellen!\u003c\/h4\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ctable class=\"elegant-table\" style=\"width: 382.844px;\" data-mce-style=\"width: 382.844px;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eEigenschaften\u003c\/th\u003e\n\u003cth style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan class=\"property-title\" data-spm-anchor-id=\"a2g0o.detail.0.i14.18c45c72dC5CBP\"\u003eForm \\ Muster: \u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eMama Schiftzug Anhänger mit\u003cspan data-mce-fragment=\"1\"\u003e Halskette\u003c\/span\u003e\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cspan data-mce-fragment=\"1\"\u003eKupfer\u003c\/span\u003e\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eGeschlecht\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eFrauen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eFarbe\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eRosé\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003eStil\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eKettenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\u003cspan\u003e45cm + 5 cm \u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eGewicht\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\u003cspan\u003e10g\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eAnhängergröße (Breite x Höhe)\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003e\u003cspan\u003e1cm * 4cm\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\" data-mce-style=\"width: 140px;\"\u003e\u003cspan\u003eSteine\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\" data-mce-style=\"width: 205.844px;\"\u003e\n\u003cp\u003eKubik Zirkonia  (bunte)\u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano","offers":[{"title":"Rosé","offer_id":44616671887625,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/anhaenger_mama_schriftzug.jpg?v=1695387843"},{"product_id":"plattenarmband-faltschliesse-gravur-edelstahl","title":"Handgemachte Platten-Armbänder  | Personalisierte 3D Edelstahl-Armband  + kostenlose Gravur","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!-- SEO --\u003e\n\u003cp\u003e  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\u003c\/p\u003e\n\u003c!-- Fonts --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003c!-- Bootstrap Icons --\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n\/* ==============================\n   SCOPED PRODUCT STYLES\n   ============================== *\/\n.engraving-product {\n  font-family: 'Inter', sans-serif;\n  color: #111;\n}\n.engraving-product .container {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n.engraving-product .container2 {\n  max-width: 1200px;\n  width: 110%;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n\/* HERO *\/\n.engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n.engraving-badge i { font-size: 1.2rem; }\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n  line-height: 1.2;\n  margin-bottom: 20px;\n  color: #222;\n  font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n.engraving-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 40px;\n  background: #111;\n  color: #fff;\n  border-radius: 40px;\n  font-weight: 500;\n  transition: all .3s ease;\n}\n.engraving-cta:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 20px 40px rgba(0,0,0,.2);\n}\n.engraving-trust {\n  margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n  color: #777;\n}\n.engraving-trust span {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.engraving-image {\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n}\n.engraving-image img {\n  width: 140%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n}\n\n\/* HERO BILD MIT HOVER-WECHSEL (watch-image) *\/\n.engraving-product .watch-image {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: flex-start;\n}\n.engraving-product .watch-image img {\n  width: 100%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n  transition: opacity 0.4s ease;\n}\n.engraving-product .watch-image .watch-img-hover {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n  opacity: 0;\n}\n.engraving-product .watch-image:hover .watch-img-hover { opacity: 1; }\n.engraving-product .watch-image:hover .watch-img-primary { opacity: 0; }\n\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image { justify-content: center; }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n    margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n\/* SECTIONS *\/\n.engraving-section { padding: 40px 0; }\n.engraving-section h2 {\n  font-family: 'Playfair Display', serif;\n  font-size: 38px;\n  margin-bottom: 20px;\n}\n.engraving-section-desc {\n  max-width: 720px;\n  color: #666;\n  margin-bottom: 60px;\n}\n\n\/* FEATURES *\/\n.engraving-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 40px;\n}\n\n\/* SPECS *\/\n.engraving-specs {\n  background: #fff;\n  border-radius: 30px;\n  padding: 50px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 40px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.05);\n}\n.engraving-specs ul { list-style: none; padding: 0; }\n.engraving-specs li {\n  padding: 12px 0;\n  border-bottom: 1px solid #eee;\n  font-size: 15px;\n  display: flex;\n  gap: 10px;\n  align-items: center;\n}\n.engraving-specs i { color: #b6a573; }\n\n\/* CTA STRIP *\/\n.engraving-cta-strip {\n  background: linear-gradient(135deg, #111, #1c1c1c);\n  color: #fff;\n  padding: 80px 20px;\n  text-align: center;\n}\n.engraving-cta-strip h2 { color: #fff; margin-bottom: 20px; }\n.engraving-cta-strip p { color: #ccc; margin-bottom: 30px; }\n\n\/* ANIMATION *\/\n.engraving-fade {\n  opacity: 0;\n  transform: translateY(30px);\n  transition: 1s ease;\n}\n.engraving-fade.show {\n  opacity: 1;\n  transform: none;\n}\n\n@media (max-width: 900px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n}\n\n.engraving-collection-btn {\n  position: relative;\n  padding: 14px 28px;\n  background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n  color: rgb(255, 255, 255);\n  font-weight: 400;\n  font-size: 13px;\n  border-radius: 999px;\n  letter-spacing: .5px;\n  border: 1px solid rgba(220, 184, 75, 0.6);\n  cursor: pointer;\n  overflow: hidden;\n  box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n  transition: all .35s ease;\n}\n.engraving-collection-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n  color: #ffdd7a;\n}\n.engraving-collection-btn::before {\n  content: '';\n  position: absolute;\n  inset: -1px;\n  border-radius: inherit;\n  background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n  opacity: .45;\n  pointer-events: none;\n  animation: idleGlow 4.5s ease-in-out infinite;\n}\n.engraving-collection-btn::after {\n  content: '';\n  position: absolute;\n  inset: -120%;\n  background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n  opacity: 0;\n  transform: scale(.2);\n  pointer-events: none;\n}\n.engraving-collection-btn:hover::after {\n  animation: pulseGlow 1.1s ease-out forwards;\n}\n.engraving-collection-btn i { margin-left: 8px; }\n\n.micro-trust-valentine {\n  margin-top: 1.5rem;\n  font-size: 1.3rem;\n  color: #746742;\n  font-weight: 600;\n}\n\n\/* SPECS (Flex-Layout) *\/\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px;\n  flex-wrap: wrap;\n  margin-top: 30px;\n}\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: #555;\n  margin-bottom: 12px;\n}\n.engraving-specs ul li i {\n  color: #bfac79;\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n.engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    padding: 31px;\n  }\n  .engraving-specs ul { text-align: center; }\n}\n\n\/* SHIPPING \u0026 TRUST BLOCK *\/\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n  text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79;\n  margin-bottom: 18px;\n}\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n  .shipping-item { padding: 32px 22px; }\n}\n\n\/* WHY HEART STORY BLOCK *\/\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79;\n  margin-bottom: 16px;\n  display: inline-block;\n}\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n  .engraving-why-heart p { margin-bottom: 40px; }\n}\n\n\/* GRAVUR LIVE PREVIEW *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\/* Gravur-Studio: Vorderseite \/ Rückseite *\/\n    .jm-gk-sides {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n        gap: 8px;\n        margin: 0 0 16px;\n        max-width: 420px;\n    }\n.jm-gk-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-gk-side em { font-style: normal; font-weight: 500; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: #a89060; }\n.jm-gk-side small { font-size: 13px; font-weight: 600; color: #9a8a6a; min-height: 18px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .jm-gk-side {\n        min-width: 0;\n    }\n\n    .jm-gk-sum + .jm-gk-sum::before {\n        content: \" \/ \";\n    }\n\n    @media (max-width: 768px) {\n        \/* Mobile: Zeilen untereinander statt nebeneinander → nichts wird seitlich geschoben *\/\n        .jm-gk-side small {\n            white-space: normal;\n            text-overflow: clip;\n        }\n\n        .jm-gk-sum {\n            display: block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            line-height: 1.35;\n        }\n\n            .jm-gk-sum + .jm-gk-sum::before {\n                content: none;\n            }\n    }\n.jm-gk-side:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-gk-side.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-gk-side.filled small { color: #1a1410; }\n.jm-gk-side-label { position: absolute; top: 12px; left: 12px; z-index: 3; 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; pointer-events: none; }\n@media (max-width: 900px) { .jm-gk-sides { margin-left: auto; margin-right: auto; } }\n\/* 3 Zeilen je Seite *\/\n.jm-gk-line { display: grid; grid-template-columns: 78px 1fr; align-items: center; gap: 10px; max-width: 420px; margin-bottom: 8px; }\n.jm-gk-line-nr { font: 700 10px Inter, sans-serif; letter-spacing: 1px; text-transform: uppercase; color: #a89060; text-align: left; }\n.engraving-input-wrap .jm-gk-line input { width: 100%; }\n@media (max-width: 900px) { .jm-gk-line { margin-left: auto; margin-right: auto; } }\n\/* Zeile 2 + 3 unter Zeile 1 – Zeile 1 bleibt an ihrer Position *\/\n#engravingPreviewText { position: relative; display: inline-block; }\n#engravingPreviewText::after, .popup-preview-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% - 8px); transform: translateX(-50%);\n  white-space: pre; text-align: center; line-height: 1.15; font: inherit; color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n\/* ── GRAVUR-STUDIO: Position je Farbe + Seite (mit ?jmtweak=1 → Bereich „Gravur-Studio“ ermitteln) ──\n   Greift nur, wenn für die aktuelle Farbe\/Seite Werte gesetzt sind – sonst bleibt das bisherige Layout.\n   Beispiel:\n   .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] { --st-x: 50%; --st-y: 55%; --st-rot: 0deg; --st-size: 8; }\n   Mobile-Popup:\n   @media (max-width: 768px) { #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] { … } } *\/\n.engraving-preview-image.jm-st-pos, #engraving-mobile-popup .popup-preview.jm-st-pos { container-type: inline-size; }\n.engraving-preview-image.jm-st-pos { width: 100%; }\n    \/* Häkchen aus dem Textfluss nehmen → Zeile 1 springt nicht, wenn es erscheint *\/\n    .engraving-preview-text-wrap .preview-check {\n        position: absolute;\n        left: 100%;\n        top: 50%;\n        margin: 0 0 0 6px;\n        transform: translateY(-50%) scale(0.6);\n        transform-origin: left center;\n    }\n\n        .engraving-preview-text-wrap .preview-check.show {\n            transform: translateY(-50%) scale(1);\n        }\n.jm-st-pos .engraving-overlay { display: block; padding: 0; }\n.engraving-preview-image.jm-st-pos .engraving-preview-text-wrap,\n#engraving-mobile-popup .popup-preview.jm-st-pos .popup-preview-text-wrap {\n  position: absolute; left: var(--st-x, 50%); top: var(--st-y, 50%); right: auto; bottom: auto; margin: 0;\n  transform: translate(-50%, -50%) rotate(var(--st-rot, 0deg)); display: block; white-space: nowrap;\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  position: relative; top: auto; left: auto; transform: none; padding: 0 !important;\n  font-size: calc(var(--st-size, 8) * 1cqw) !important; letter-spacing: var(--st-ls, 0.08em); opacity: var(--st-op, 1);\n}\n.jm-st-pos #engravingPreviewText::after, .jm-st-pos .popup-preview-text::after {\n  top: calc(100% + var(--st-gap, 0em)); line-height: var(--st-lh, 1.15); transform: translateX(calc(-50% + var(--st-rdx, 0em)));\n}\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n}\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 3rem;\n  letter-spacing: 0.08em;\n  color: rgb(186 186 186 \/ 94%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n}\n.engraving-preview-content h2 {\n  font-size: 2.1rem;\n  margin-bottom: 12px;\n  color: #4b2f2f;\n  font-weight: 600;\n  margin-top: 25px;\n}\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select { margin-bottom: 18px; }\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.engraving-input-wrap input {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n.engraving-input-wrap input:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n  .engraving-preview-image { margin: 0 auto; }\n}\n\n\/* SYMBOL PICKER *\/\n.engraving-symbol-picker { margin-bottom: 22px; }\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n.symbol-btn:active {\n  transform: scale(1.05);\n  background: #d7bf78;\n}\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n\/* FONT PICKER *\/\n.engraving-font-select { margin-bottom: 22px; }\n.engraving-font-picker { margin-bottom: 28px; }\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n}\n.font-group { margin-bottom: 16px; }\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem;\n  transition: all 0.25s ease;\n}\n.font-btn.script { font-size: 1.2rem; }\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\n@media (max-width: 640px) {\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n    padding-bottom: 12px;\n  }\n  .font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    line-height: 1;\n  }\n  .font-btn.script { font-size: 1rem; }\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr);\n    gap: 10px;\n  }\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 10px;\n  }\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px;\n  }\n}\n\n\/* LIVE PREVIEW LINK *\/\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n\/* LUXURY SHINE BUTTON *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n  margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  color: #e6d3a3;\n  background: linear-gradient(180deg, #141414, #0d0d0d);\n  border: 1px solid rgba(201,168,92,0.45);\n  overflow: hidden;\n  isolation: isolate;\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 8px 20px rgba(0,0,0,0.35), 0 0 0 1px rgba(201,168,92,0.35);\n}\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n  width: 60%;\n  height: 220%;\n  background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.0) 35%, rgba(255,214,130,0.65) 50%, rgba(255,255,255,0.0) 65%, transparent 100%);\n  transform: skewX(-20deg);\n  opacity: 0.9;\n  animation: goldLaser 3s ease-in-out infinite;\n}\n@keyframes goldLaser {\n  0% { left: -120%; }\n  55% { left: 140%; }\n  100% { left: 140%; }\n}\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(circle at center, rgba(255,215,160,0.35), transparent 70%);\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n.luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n.luxury-rose::before {\n  background: linear-gradient(120deg, transparent 0%, rgba(255,220,210,0.0) 35%, rgba(255,190,170,0.7) 50%, rgba(255,220,210,0.0) 65%, transparent 100%);\n}\n.luxury-rose i {\n  color: #e0a88c;\n  font-size: 1.1em;\n}\n@media (max-width: 768px) {\n  .luxury-shine-btn::before { animation-duration: 2.4s; }\n}\n\n\/* PREVIEW EFFEKTE *\/\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n.engraving-preview-image.pulse { animation: engravingPulse 0.6s ease-out; }\n\n.engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 64px;\n  left: 27px;\n \n}\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n.engrave-fade { animation: engraveFade 0.9s ease-out; }\n@keyframes engraveFade {\n  0% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n  40% { text-shadow: 0 0 6px rgba(191, 172, 121, 0.45), 0 0 14px rgba(191, 172, 121, 0.25); }\n  100% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n  animation: fadeInSoft 0.6s ease-out both;\n}\n@keyframes fadeInSoft {\n  from { opacity: 0; transform: translateY(-2px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\/* MOBILE POPUP *\/\n#engraving-mobile-popup {\n  display: block;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n.popup-preview-check {\n  position: absolute;\n  top: -15px;\n  left: 65px;\n  font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n.popup-preview-check.show { opacity: 1; }\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n@media (max-width: 769px) {\n  .engraving-overlay {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n  }\n  .engraving-overlay span {\n    font-family: \"Playfair Display\", serif;\n    font-size: 1.8rem;\n    letter-spacing: 0.08em;\n    color: rgb(217 217 217 \/ 71%);\n    text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n  }\n  .engraving-preview-text-wrap {\n    position: relative;\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    bottom: 80px;\n    right: 24px;\n  }\n  .popup-preview-text-wrap {\n    position: absolute;\n    top: 42%;\n    left: 50%;\n    white-space: nowrap;\n    display: block;\n    \n  }\n}\n\n\/* HERO SUBLINE *\/\n.hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline { justify-content: center; }\n  .luxury-shine-btn { margin-top: 6px; }\n}\n\n\/* MASSE JE VARIANTE *\/\n.ring-size-visual {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 24px 0;\n}\n.ring-size {\n  width: 150px;\n  height: 72px;\n  border: 2px solid #2c2c2c;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-family: Helvetica, Arial, sans-serif;\n  background: #fff;\n  text-align: center;\n  box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n}\n.ring-size .size {\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n.ring-size .diameter {\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.1;\n}\n.ring-size .circumference {\n  font-size: 11px;\n  color: #666;\n  margin-top: 3px;\n}\n@media (max-width: 768px) {\n  .ring-size-visual {\n    gap: 10px;\n    margin: 5px 0;\n  }\n  .ring-size {\n    width: 130px;\n    height: 68px;\n    border-width: 1.5px;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.07);\n  }\n  .ring-size .size { font-size: 13px; margin-bottom: 1px; }\n  .ring-size .diameter { font-size: 11.5px; line-height: 1.1; }\n  .ring-size .circumference { font-size: 10px; margin-top: 2px; margin-bottom: 7px; }\n}\n\n\/* VORHER \/ NACHHER SLIDER *\/\n.before-after-image--container {\n  display: block;\n  position: relative;\n  width: 80%;\n  max-width: 450px;\n  margin: 20px auto;\n  border-radius: 10px;\n  overflow: hidden;\n  box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n  transition: transform 0.3s ease;\n}\n.before-after-image--container:hover { transform: scale(1.02); }\n@media screen and (max-width: 767px) {\n  .before-after-image--image { height: auto !important; }\n}\n.slider-hint {\n  position: absolute;\n  top: 75px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255,255,255,0.95);\n  padding: 6px 14px;\n  border-radius: 20px;\n  font-size: 1.2rem;\n  font-weight: 500;\n  color: #111;\n  letter-spacing: 0.02em;\n  pointer-events: none;\n  z-index: 10;\n  animation: pulse 1.5s infinite;\n  transition: opacity 0.3s ease;\n}\n@keyframes pulse {\n  0% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n  50% { transform: translate(-50%, -150%) scale(1.1); opacity: 0.6; }\n  100% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n}\n.before-after-image--media {\n  display: block;\n  position: relative;\n  overflow: hidden;\n}\n.before-after-image--image img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n.before-after-image--2 {\n  clip-path: inset(0px 0px 0px var(--percent));\n  position: absolute;\n  z-index: 3;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n.before-after-image--slider {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  left: 0;\n  z-index: 40;\n  transform: translateY(-50%);\n  opacity: 0;\n  height: 54px;\n  cursor: pointer;\n  margin-top: 10px;\n}\n.before-after-image--divider {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 10;\n  width: 2px;\n  left: calc(var(--percent) - 1px);\n  background: var(--color-line, --bg-body);\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n}\n.before-after-image--divider svg {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate3d(-50%, -50%, 0);\n  z-index: 20;\n  border-radius: 20px;\n  box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.1);\n  cursor: pointer;\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\/* ─── 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\/* Schritt 1: Farbwahl Silber \/ Vergoldet *\/\n.jm-mh-color-title { display: block; margin: 0 0 10px; font-family: 'Playfair Display', serif; font-size: 1.1rem; color: #1a1410; }\n.jm-mh-colors { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; margin-bottom: 18px; }\n.jm-mh-color { display: flex; align-items: center; gap: 10px; padding: 12px 12px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font-family: inherit; text-align: left; transition: all .25s ease; min-width: 0; }\n.jm-mh-color:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-mh-color.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-mh-color.unavailable { opacity: .45; cursor: not-allowed; }\n.jm-mh-color-dot { width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0; border: 1px solid rgba(0,0,0,.15); }\n.jm-mh-color-dot.silber    { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.vergoldet { background: radial-gradient(circle at 35% 30%, #f6e3a1, #b8902f); }\n.jm-mh-color-info { flex: 1; min-width: 0; }\n.jm-mh-color-name { display: block; font-weight: 700; font-size: 14px; color: #1a1410; }\n.jm-mh-color-desc { display: block; font-size: 11.5px; color: #9a8a6a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\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\n\/* ── LESBARKEIT + WÖLBUNG (Tweak-Panel „Wölbung \u0026amp; Lesbarkeit“) ──\n   --lv-l \/ --st-l  = Helligkeit der Schrift (0 % schwarz … 100 % weiß) – auf heller Edelstahl-Platte dunkel = gut lesbar\n   --lv-sh \/ --st-sh = Stärke des Gravur-Schattens\n   --lv-arc \/ --st-arc = Wölbung der Zeile in em (+ Enden tiefer ∩, − Enden höher ∪) – passend zur gebogenen Platte *\/\n.jm-lv-stage .jm-lv-text {\n  color: hsl(40 6% var(--lv-l, 80%));\n  text-shadow: 0 1px 1px rgba(0,0,0,var(--lv-sh, 0.6)), 0 -1px 0 rgba(255,255,255,0.25);\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  color: hsl(40 6% var(--st-l, 73%)) !important;\n  text-shadow: 0 1px 1px rgba(0,0,0,var(--st-sh, 0.6)), 0 -1px 0 rgba(255,255,255,0.25) !important;\n  backdrop-filter: none !important; background: none !important;\n}\n\/* Buchstaben der gewölbten Zeile (werden per Script erzeugt) – erben alles vom Text *\/\n.jm-arc-ch {\n  display: inline-block !important; white-space: pre; padding: 0 !important; margin: 0 !important;\n  font: inherit !important; letter-spacing: inherit !important; color: inherit !important; text-shadow: inherit !important;\n  border-radius: 0 !important; backdrop-filter: none !important; background: none !important; transition: none !important;\n  transform-origin: 50% 50%;\n}\n\/* Armband: Farbpunkte (Hero + Schritt 1) *\/\n.jm-arm-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; border: 1px solid rgba(0,0,0,.15); }\n.jm-arm-dot.rot, .jm-mh-color-dot.rot { background: radial-gradient(circle at 35% 30%, #e0626a, #9e1f2a); }\n.jm-arm-dot.schwarz, .jm-mh-color-dot.schwarz { background: radial-gradient(circle at 35% 30%, #555, #111); }\n.jm-arm-dot.gruen, .jm-mh-color-dot.gruen { background: radial-gradient(circle at 35% 30%, #6fae7c, #23592f); }\n.jm-arm-font-hint { margin: 6px 0 0; font-size: 12.5px; color: #8a7448; }\n.jm-arm-font-hint i { color: #c9a84c; margin-right: 4px; }\n\/* Mobile: Hero-Bild nicht breiter als der Bildschirm (Basis-CSS: width 140 %) *\/\n@media (max-width: 768px) { .engraving-image img { width: 100%; max-width: 100%; } }\n\/* Hero: Größen kompakt *\/\n.jm-hz-hero-sizes { display: flex; flex-wrap: wrap; gap: 10px; margin: -8px 0 22px; }\n.jm-hz-hero-size { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border: 1.5px solid #e2d8c4; border-radius: 999px; background: #fff; font: 500 13px Inter, sans-serif; color: #7a6a4a; }\n.jm-hz-hero-size strong { color: #1a1410; font-weight: 700; }\n.jm-hz-hero-size--new { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-hero-size em { font-style: normal; font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #fff; background: #c9a84c; padding: 2px 7px; border-radius: 999px; }\n@media (max-width: 900px) { .jm-hz-hero-sizes { justify-content: center; } }\n\/* Hero: Link „Zu den Produktdetails“ *\/\n.jm-hz-details-link { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; margin-top: 14px; font: 600 14px Inter, sans-serif; color: #8a7448; text-decoration: none; border-bottom: 1px solid rgba(201,168,76,0.5); padding-bottom: 2px; transition: color .2s ease, border-color .2s ease; }\n.jm-hz-details-link:hover { color: #1a1410; border-color: #c9a84c; }\n.jm-hz-details-link .bi-arrow-down { transition: transform .2s ease; }\n.jm-hz-details-link:hover .bi-arrow-down { transform: translateY(2px); }\n#jm-produktdetails { scroll-margin-top: 90px; }\n@media (max-width: 900px) { .jm-hz-details-link { align-self: center; } }\n\/* ── HERZANHÄNGER-KONFIGURATOR: Ergänzungen ── *\/\n\/* Mobile: Produktdetails (container2 = 110 %) machten die Seite breiter als den Bildschirm → alles wirkte verrutscht *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { width: 100%; max-width: 100%; box-sizing: border-box; }\n  .jm-cfg-wrap, .jm-cfg-card { max-width: 100%; }\n  #jm-cfg-card-2 .jm-cfg-card-body { padding-left: 14px; padding-right: 14px; }\n  \/* Schritt 2 mobil: eine Spalte, nichts breiter als die Karte *\/\n  #jm-cfg-card-2, #jm-cfg-card-2 .jm-cfg-card-body { overflow: hidden; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1fr); }\n  .jm-cfg-s2-wrap .engraving-preview-image, .jm-cfg-s2-wrap .engraving-preview-content { min-width: 0; max-width: 100%; }\n  .jm-cfg-s2-wrap .engraving-badge { white-space: normal; }\n  .jm-cfg-s2-wrap .font-group { min-width: 0; }\n  .jm-cfg-s2-wrap .font-group-buttons { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }\n  .jm-cfg-s2-wrap .font-btn { white-space: nowrap; }\n}\n\/* Desktop: Produktdetails als 2 gleich breite Spalten (Flex mit Umbruch hat die 2. Liste unter die 1. geschoben) *\/\n@media (min-width: 769px) {\n  .engraving-product .container2 { width: 100%; box-sizing: border-box; }\n  .engraving-product .engraving-specs { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 48px; align-items: start; }\n  .engraving-product .engraving-specs ul { min-width: 0; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; justify-content: flex-start; margin: 10px 0 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { flex-basis: 100%; text-align: left; font-size: 12px; margin: 0; }\n}\n\/* Mobile: Produktdetails – Theme gibt .engraving-product bereits 30 px Rand → hier keinen zweiten Innenabstand,\n   Liste linksbündig, Größen-Kacheln nebeneinander über die volle Breite *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { padding-left: 0; padding-right: 0; }\n  .engraving-product .engraving-specs { width: 100%; box-sizing: border-box; padding: 20px 16px; gap: 0; align-items: stretch; margin-left: 0; margin-right: 0; }\n  .engraving-product .engraving-specs ul { width: 100%; text-align: left; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; justify-content: flex-start; text-align: left; min-width: 0; padding: 10px 0; margin-bottom: 0; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; margin: 8px 0 0; }\n  .engraving-product .engraving-specs ul li .ring-size { width: auto; min-width: 0; height: auto; padding: 8px 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { grid-column: 1 \/ -1; text-align: left; margin: 2px 0 0; font-size: 11px !important; line-height: 1.4; }\n}\n\/* Schritt 1: Spalten dürfen nicht über die Karte hinauswachsen, Bild bleibt beim Scrollen sichtbar *\/\n#jm-cfg-card-1 { max-width: 920px; }\n#jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 36px; align-items: start; }\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr); gap: 18px; } }\n#jm-cfg-card-1 .jm-cfg-s1-left, #jm-cfg-card-1 .jm-cfg-s1-right { min-width: 0; }\n#jm-cfg-card-1 .jm-cfg-s1-left p { margin-bottom: 16px; }\n@media (min-width: 641px) { #jm-cfg-card-1 .jm-cfg-s1-right { position: sticky; top: 20px; } }\n\/* Mobile: Bild zuerst, dann Auswahl *\/\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-right { order: -1; } #jm-cfg-card-1 .jm-cfg-ring-img-wrap { max-width: 320px; margin: 0 auto; } }\n\/* Farbkarten: Punkt oben, Name + Zusatz darunter – lange Namen brechen sauber um *\/\n.jm-hz-colors .jm-mh-color { flex-direction: column; justify-content: flex-start; text-align: center; gap: 6px; padding: 12px 6px 10px; }\n.jm-hz-colors .jm-mh-color-info { width: 100%; }\n.jm-hz-colors .jm-mh-color-name { font-size: 13.5px; line-height: 1.25; overflow-wrap: anywhere; }\n.jm-hz-colors .jm-mh-color-desc { white-space: normal; overflow: visible; font-size: 11px; line-height: 1.3; margin-top: 2px; }\n\/* Kurzübersicht *\/\n.jm-hz-facts { list-style: none; margin: 4px 0 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }\n.jm-hz-facts li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid #ece4d6; border-radius: 10px; background: #faf9f7; min-width: 0; }\n.jm-hz-facts i { width: 28px; height: 28px; flex-shrink: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(201,168,76,0.12); color: #b39548; font-size: 13px; }\n.jm-hz-facts strong { display: block; font-size: 13px; color: #1a1410; line-height: 1.25; }\n.jm-hz-facts small { display: block; font-size: 11px; color: #9a8a6a; line-height: 1.3; }\n@media (max-width: 380px) { .jm-hz-facts { grid-template-columns: 1fr; } }\n.jm-hz-colors { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.jm-mh-color-dot.edelstahl { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.rosegold  { background: radial-gradient(circle at 35% 30%, #f7d6c8, #b9786a); }\n@media (max-width: 480px) {\n  .jm-hz-colors .jm-mh-color { flex-direction: column; text-align: center; gap: 6px; padding: 10px 6px; }\n  .jm-hz-colors .jm-mh-color-desc { display: none; }\n}\n#jm-cfg-card-1 .jm-hz-size-wrap { max-width: none; margin: 0 0 18px; }\n#jm-cfg-card-1 .jm-hz-size-title, .jm-hz-color-title { display: block; margin: 0 0 10px; font: 600 1.1rem 'Playfair Display', serif; letter-spacing: 0; text-transform: none; color: #1a1410; }\n.jm-cfg-s3-gravur-side-block + .jm-cfg-s3-gravur-side-block { margin-top: 12px; padding-top: 12px; border-top: 1px dashed rgba(201,168,76,0.25); }\n.jm-cfg-s3-gravur-lines { display: block; line-height: 1.35; }\n.jm-cfg-s3-gravur-lines span { display: block; }\n.jm-cfg-s3-price-fallback { font-family: 'Playfair Display', serif; font-size: 2rem; color: #1a1410; font-weight: 700; }\n.jm-cfg-btn-next:disabled { opacity: .4; cursor: not-allowed; }\n.jm-cfg-s2-wrap .engraving-preview-content .engraving-micro-trust { margin-top: 18px; }\n\/* Schritt 2 (Desktop): großes Bild links, beim Scrollen durch die Optionen rechts mittig im Blick\n   – Karte darf nicht „overflow: hidden“ haben, sonst funktioniert sticky nicht *\/\n#jm-cfg-card-2 { overflow: visible; }\n#jm-cfg-card-2 .jm-cfg-card-body { overflow: visible; }\n@media (min-width: 901px) {\n  #jm-cfg-card-2 { max-width: 1180px; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 48px; align-items: start; }\n  .jm-cfg-s2-wrap .engraving-preview-image { max-width: none; width: 100%; position: sticky; top: calc(50vh - min(26vw, 300px)); }\n  .jm-cfg-s2-wrap .engraving-preview-image \u003e img, .jm-cfg-s2-wrap .engraving-preview-image \u003e .jm-st-zoom \u003e img { width: 100%; }\n  \/* Fallback, wenn ein Theme-Container sticky verhindert: Bild wird per JS mitgeführt *\/\n  .jm-cfg-s2-wrap.jm-no-sticky .engraving-preview-image { position: relative; top: auto; will-change: transform; }\n}\n\n\/* =========================\n   KONFIGURATOR: Auswahl-Karten (Größe\/Farbe) im Gravur-Studio\n========================= *\/\n.jm-hz-size-wrap { margin: 0 0 14px; max-width: 420px; }\n.jm-hz-size-title { display: block; margin: 0 0 8px; font: 700 10px Inter, sans-serif; letter-spacing: 1.5px; text-transform: uppercase; color: #a89060; }\n.jm-hz-sizes { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 8px; }\n.jm-hz-size { display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; padding: 10px 8px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font: 700 14px Inter, sans-serif; color: #1a1410; transition: all .25s ease; }\n.jm-hz-size small { font-size: 10.5px; font-weight: 500; color: #9a8a6a; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.jm-hz-size em { font-style: normal; font-size: 9px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #c9a84c; }\n.jm-hz-size:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-size.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-hz-size.unavailable { opacity: .45; }\n@media (max-width: 900px) { .jm-hz-size-wrap { margin-left: auto; margin-right: auto; } }\n\/* Nur 1 Zeile je Seite (Formular ohne Zeile 2\/3): Zeilennummer ausblenden *\/\n.jm-gk-lines-1 .jm-gk-line { grid-template-columns: 1fr; }\n.jm-gk-lines-1 .jm-gk-line-nr { display: none; }\n\n\/* ── BILD-ZOOM (Tweak-Panel „Bild-Zoom“): Bild im Rahmen vergrößern\/verkleinern + Ausschnitt verschieben ──\n   --st-zoom (1 = Originalgröße), --st-px \/ --st-py (Verschiebung in % der Bildgröße) *\/\n.jm-st-zoom { position: relative; overflow: hidden; line-height: 0; background: #000; }\n.jm-st-zoom \u003e img { display: block; transform: translate(var(--st-px, 0%), var(--st-py, 0%)) scale(var(--st-zoom, 1)); transform-origin: center center; }\n\/* ── GRAVUR-STUDIO: Startposition für alle Bandfarben (Platte mittig) ──\n   Mit ?jmtweak=1 → Bereich „Gravur-Studio“ je Farbe\/Seite einstellen und die ausgegebene Regel hier ergänzen. *\/\n.engraving-preview-image[data-side] {\n  --st-x: 50%;\n  --st-y: 50%;\n  --st-rot: 0deg;\n  --st-size: 5;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n@media (max-width: 768px) {\n  #engraving-mobile-popup .popup-preview[data-side] {\n    --st-x: 50%;\n    --st-y: 50%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv class=\"engraving-product\"\u003e\n\u003c!-- =========================\n     HERO: Plattenarmband mit Faltschließe\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n\u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n\u003cdiv class=\"engraving-hero-grid\"\u003e\n\u003c!-- Textbereich --\u003e\n\u003cdiv class=\"engraving-hero-text\"\u003e\n\u003ch1\u003eHandgemachtes Plattenarmband mit Gravur\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 \u003ca href=\"#jm-cfg-wrap\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e Live-Vorschau ansehen \u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003eModern. Elegant. Persönlich. Edelstahl-Platte an einem Cotton-Seil mit sicherer Faltschließe – für Frauen und Männer, mit deiner persönlichen Botschaft graviert.\u003c\/p\u003e\n\u003c!-- Bandfarben kompakt (Auswahl erfolgt im Produktformular \/ Gravur-Studio) --\u003e\n\u003cdiv class=\"jm-hz-hero-sizes\"\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cspan class=\"jm-arm-dot rot\"\u003e\u003c\/span\u003e\u003cstrong\u003eRot\u003c\/strong\u003e\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cspan class=\"jm-arm-dot schwarz\"\u003e\u003c\/span\u003e\u003cstrong\u003eSchwarz\u003c\/strong\u003e\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003eca. \u003cstrong\u003e21 cm\u003c\/strong\u003e · Faltschließe\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003cdiv class=\"micro-trust-valentine\"\u003eSicher · Persönlich · Handgefertigt\u003c\/div\u003e\n\u003c!-- Trust Icons (max. 4) --\u003e\n\u003cdiv class=\"engraving-trust\"\u003e\n\u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl-Platte\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-lock\"\u003e\u003c\/i\u003e Sichere Faltschließe\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-droplet\"\u003e\u003c\/i\u003e Rostfrei \u0026amp; formstabil\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-people\"\u003e\u003c\/i\u003e Für Sie \u0026amp; Ihn\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"#jm-produktdetails\" class=\"jm-hz-details-link\"\u003e\u003ci class=\"bi bi-list-check\"\u003e\u003c\/i\u003e Zu den Produktdetails \u003ci class=\"bi bi-arrow-down\"\u003e\u003c\/i\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Bildbereich: Bild kommt automatisch aus dem Hauptbild des Produkts --\u003e\n\u003cdiv class=\"engraving-image\"\u003e\n\u003cimg id=\"jmArmHeroImg\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Plattenarmband mit Faltschließe und Gravur aus Edelstahl\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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 bi-award\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eFamilienunternehmen 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\u003c!-- =========================\n     WHY STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n\u003cdiv class=\"container\"\u003e\n\u003ch2\u003eThe Message. Für den Schatz. Von Herzen.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, das Geschichten erzählt: Verewige Namen, Initialen oder ein bedeutungsvolles Datum auf der eleganten Platte – und trage deine persönliche Geschichte immer bei dir.\u003c\/p\u003e\n\u003cdiv class=\"engraving-why-grid\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiger Edelstahl\u003c\/h3\u003e\n\u003cp\u003eLanglebig, hautfreundlich \u0026amp; pflegeleicht – die Platte rostet nicht, verfärbt sich nicht und bleibt formstabil.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eName, Initialen, Koordinaten, Datum oder Symbol – kostenlos auf der Platte graviert.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n\u003ch3\u003eSicher getragen\u003c\/h3\u003e\n\u003cp\u003eDie Faltschließe aus Edelstahl hält zuverlässig und lässt sich mit einem Handgriff einhaken und öffnen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n\u003ch3\u003eEin Statement der Moderne\u003c\/h3\u003e\n\u003cp\u003eAllein oder kombiniert mit anderen Armbändern – modern, vielseitig und für Frauen wie Männer. Ein Geschenk, das bleibt.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n\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\n\u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n\u003cp\u003eJede Gravur entsteht in unserem Familienbetrieb – \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\u003c\/p\u003e\n\u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"shipping-item\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n\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\u003cp\u003eSollte etwas nicht passen, findest du mit uns unkompliziert eine Lösung.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- FEATURES --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n\u003cdiv class=\"container engraving-hero-text\"\u003e\n\u003ch1\u003eMit Liebe zum Detail gefertigt\u003c\/h1\u003e\n\u003cp class=\"engraving-section-desc\"\u003eUnser geometrisches Plattenarmband mit Cotton-Seil vereint modernes Design und Tragekomfort. Hochwertiger Edelstahl, eine sichere Faltschließe und deine persönliche Gravur machen es zu einem einzigartigen Ausdruck deiner Persönlichkeit.\u003c\/p\u003e\n\u003cdiv class=\"engraving-features\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n\u003ch3\u003ePersönliche Gravur\u003c\/h3\u003e\n\u003cp\u003eKoordinaten, Namen, Initialen oder Symbole – die Platte bietet Platz für deine Idee.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e\n\u003ch3\u003eZwei Bandfarben\u003c\/h3\u003e\n\u003cp\u003eRot oder Schwarz – Cotton-Seil, passend zu deinem Stil.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n\u003ch3\u003eFaltschließe\u003c\/h3\u003e\n\u003cp\u003eCa. 21 cm Armbandlänge – einfach einhaken, sicher tragen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n\u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n\u003cp\u003ePerfekt als persönliches Geschenk – 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\u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\" id=\"jm-produktdetails\"\u003e\n\u003cdiv class=\"container2 engraving-hero-text\"\u003e\n\u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\u003cdiv class=\"engraving-specs\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-bookmark\"\u003e\u003c\/i\u003e \u003cstrong\u003eTyp:\u003c\/strong\u003e Geometrisches Plattenarmband mit Cotton-Seil und Faltschließe\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl-Platte \u0026amp; Faltschließe · Seil aus Cotton\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e \u003cstrong\u003eBandfarben:\u003c\/strong\u003e Rot · Schwarz\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003ePlatte:\u003c\/strong\u003e\n\u003cdiv class=\"ring-size-visual\"\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eLänge\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e3,5 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eEdelstahl-Platte\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eBreite\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e0,5 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003egravierbar\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"engraving-preview-note\"\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Hinweis: Maße können leicht abweichen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eArmbandlänge:\u003c\/strong\u003e ca. 21 cm (nicht verstellbar)\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 7,2 g\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Damen \u0026amp; Herren\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e \u003cstrong\u003eStil:\u003c\/strong\u003e Mode \u0026amp; Casual\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos · Vorderseite · 1 Zeile, max. 11 Zeichen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e \u003cstrong\u003ePlatte:\u003c\/strong\u003e rostet nicht · verfärbt sich nicht · formstabil · säure- \u0026amp; laugenbeständig\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-droplet\"\u003e\u003c\/i\u003e \u003cstrong\u003ePflege:\u003c\/strong\u003e Das Cotton-Seil möglichst nicht nass werden lassen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; von Herzen\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n========================== --\u003e\n\u003c!-- =========================\n     3-SCHRITT KONFIGURATOR: Schmuckstück → Gravur → Bestätigung\n========================== --\u003e\n\u003cdiv class=\"jm-cfg-wrap\" id=\"jm-cfg-wrap\"\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\"\u003eDein Armband. Deine Botschaft.\u003c\/h2\u003e\n\u003cp class=\"jm-cfg-subline\"\u003eGestalte in 3 Schritten dein persönliches Armband – Bandfarbe wählen, Platte gravieren, alles prüfen. 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: Bandfarbe --\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 Plattenarmband\u003c\/h3\u003e\n\u003cp\u003eEdelstahl-Platte an einem Cotton-Seil mit Faltschließe – wähle deine Bandfarbe. Die Auswahl wird direkt ins Produktformular übernommen.\u003c\/p\u003e\n\u003c!-- FARBE (wird aus den Varianten erzeugt, synchron zum Produktformular) --\u003e\n\u003cdiv id=\"jm-hz-color-wrap\" hidden\u003e\n\u003cspan class=\"jm-hz-color-title\"\u003eWähle deine Bandfarbe\u003c\/span\u003e\n\u003cdiv class=\"jm-mh-colors jm-hz-colors\" id=\"jm-hz-colors\" role=\"radiogroup\" aria-label=\"Bandfarbe wählen\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- KURZÜBERSICHT (kompakt, 2 Spalten) --\u003e\n\u003cul class=\"jm-hz-facts\"\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003ePlatte 3,5 × 0,5 cm\u003c\/strong\u003e\u003csmall\u003eEdelstahl · ca. 7,2 g\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-lock\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eFaltschließe\u003c\/strong\u003e\u003csmall\u003eca. 21 cm Länge\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eGravur gratis\u003c\/strong\u003e\u003csmall\u003e1 Zeile · max. 11 Zeichen\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eRostfrei\u003c\/strong\u003e\u003csmall\u003everfärbt sich nicht\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\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=\"hzCfgImg\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Plattenarmband Vorderseite\"\u003e\n\u003cspan class=\"jm-cfg-ring-img-label\" id=\"hzCfgLabel\"\u003eRot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"jm-cfg-ring-img-caption\"\u003eBand \u003cspan class=\"js-hz-color\"\u003eRot\u003c\/span\u003e · Platte 3,5 × 0,5 cm\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 type=\"button\" class=\"jm-cfg-btn-back\" hidden\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Zurück\u003c\/button\u003e\n\u003cbutton type=\"button\" 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: Gravur-Studio (Vorder-\/Rückseite, je 1 Zeile) --\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\u003cspan class=\"engraving-badge visible-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003cdiv class=\"engraving-preview-grid\"\u003e\n\u003c!-- IMAGE --\u003e\n\u003cdiv class=\"engraving-preview-image\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg id=\"engravingProductImage\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Plattenarmband ohne Gravur\"\u003e\n\u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n\u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e \u003cspan class=\"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\u003cp class=\"engraving-preview-note\"\u003e✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- CONTENT --\u003e\n\u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\u003cspan class=\"engraving-badge hidden-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003ch2\u003eMach dein Armband einzigartig\u003c\/h2\u003e\n\u003cp\u003eGib deine gewünschte Gravur ein und sieh sofort, wie sie auf der Platte wirkt – Name, Initialen, Datum oder Koordinaten.\u003c\/p\u003e\n\u003c!-- VORDERSEITE \/ RÜCKSEITE --\u003e\n\u003cdiv class=\"jm-gk-sides\" role=\"tablist\" aria-label=\"Gravurseite wählen\"\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side active\" data-side=\"front\" role=\"tab\" aria-selected=\"true\"\u003eVorderseite\u003csmall id=\"jm-gk-side-front\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side\" data-side=\"back\" role=\"tab\" aria-selected=\"false\"\u003eRückseite \u003cem\u003eoptional\u003c\/em\u003e\u003csmall id=\"jm-gk-side-back\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c!-- INPUT --\u003e\n\u003cdiv class=\"engraving-input-wrap\" id=\"jmGkInputWrap\"\u003e\n\u003clabel for=\"engravingInput\" id=\"jmGkInputLabel\"\u003eGravur Vorderseite\u003c\/label\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e1 · oben\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. Für immer ♥\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e2 · Mitte\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput2\" maxlength=\"11\" placeholder=\"z. B. Für immer\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e3 · unten\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput3\" maxlength=\"11\" placeholder=\"z. B. 12.06.24\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003csmall id=\"jmGkHint\"\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich · Zeilen 2 + 3 optional\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\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 \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"∞\"\u003e∞\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"★\"\u003e★\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"✝\"\u003e✝\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"❥\"\u003e❥\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n\u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n\u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e \u003c!-- SERIF --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family: 'Times New Roman';\"\u003e Times New Roman \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family: Georgia;\"\u003e Georgia \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SANS --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family: Arial;\"\u003e Arial \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family: Helvetica;\"\u003e Helvetica \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MONOSPACE --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family: 'Courier New';\"\u003e Courier New \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family: 'Lucida Console';\"\u003e Lucida Console \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SCRIPT --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family: 'Allura';\"\u003e Allura \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family: 'Alex Brush';\"\u003e Alex Brush \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family: 'Kaushan Script';\"\u003e Kaushan Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HANDWRITING --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family: 'Pacifico';\"\u003e Pacifico \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family: 'Indie Flower';\"\u003e Indie Flower \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family: 'Dancing Script';\"\u003e Dancing Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003cp class=\"jm-arm-font-hint\"\u003e\u003ci class=\"bi bi-chat-heart\"\u003e\u003c\/i\u003e Deine Wunsch-Schriftart oder ein Symbol fehlt? Schreib uns – wir machen es möglich.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MICRO TRUST --\u003e\n\u003cdiv class=\"engraving-micro-trust\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\u003c\/div\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 type=\"button\" 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 type=\"button\" class=\"jm-cfg-btn-next\" id=\"jm-cfg-next-2\" disabled\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: Bestätigung --\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=\"Plattenarmband mit Gravur\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"jm-cfg-s3-product-name\"\u003ePlattenarmband mit Faltschließe \u0026amp; 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\"\u003eBandfarbe\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-color\"\u003eRot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003ePlatte\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-size\"\u003eEdelstahl · 3,5 × 0,5 cm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003eLänge · Gewicht\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-weight\"\u003eca. 21 cm · Faltschließe · ca. 7,2 g\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\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 js-scroll-to-form jm-cfg-s3-cta\" id=\"jm-cfg-s3-cta-btn\" data-target=\"#product-form\" style=\"width:100%;justify-content:center;font-size:15px;padding:18px 32px;\"\u003e\u003ci class=\"bi bi-bag-check\"\u003e\u003c\/i\u003e Gravur übernehmen \u0026amp; zum Warenkorb \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\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 type=\"button\" 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\u003c\/div\u003e\n\u003c!-- \/jm-cfg-wrap --\u003e\n\u003c!-- End Block --\u003e\n\u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"font-size: 6rem; color: #c0a860;\"\u003e\u003c\/i\u003e\n\u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, 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\u003c\/section\u003e\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n\u003cdiv class=\"popup-preview\" style=\"position: relative; margin-bottom: 10px;\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkPopupSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width: 100%;\"\u003e\n\u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"popup-preview-text-wrap\"\u003e\n\u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\u003e \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 Zur Bestätigung \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\/* =========================\n   GRAVURFELDER IM PRODUKTFORMULAR finden\n   Zeile n einer Seite: #gravur_\u003cSeite\u003e_\u003cn\u003e · [data-gravur-seite][data-gravur-zeile]\n   Zeile 1 zusätzlich: #gravurtext_vorderseite \/ #gravurtext_rueckseite (Standard-IDs)\n========================= *\/\nwindow.jmGravurFeld = function (seite, n) {\n  var back = seite === \"Rückseite\";\n  var sels = [\"#gravur_\" + seite + \"_\" + n,\n              '[data-gravur-seite=\"' + seite + '\"][data-gravur-zeile=\"' + n + '\"]'];\n  if (n === 1) sels = sels.concat(back\n    ? [\"#gravurtext_rueckseite\", \"#gravurtext_rückseite\", 'input[data-gravur-seite=\"Rückseite\"]', \"#gravurtext_2\"]\n    : [\"#gravurtext_vorderseite\", \"#gravurtext_oberfläche\", 'input[data-gravur-seite=\"Vorderseite\"]', \"#gravurtext\"]);\n  for (var i = 0; i \u003c sels.length; i++) {\n    try { var el = document.querySelector(sels[i]); if (el \u0026\u0026 !el.closest(\"#engraving-preview\")) return el; } catch (e) {}\n  }\n  return null;\n};\n\/* Herzanhänger: 3 Zeilen je Seite (wie Geldklammer: #gravur_Vorderseite_1..3 \/ #gravur_Rückseite_1..3) *\/\nwindow.jmGravurZeilen = function () { return 1; };   \/* Platte 0,5 cm hoch → 1 Zeile je Seite *\/\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = window.jmGravurFeld(\"Vorderseite\", 1);\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      \/* Gravur-Studio: Vorder- und Rückseite je 3 Zeilen übernehmen (nur Seiten mit Inhalt) *\/\n      const gkSides = window.jmGkSides;\n      if (gkSides) {\n        gkSides.save \u0026\u0026 gkSides.save();\n        const studioFont = previewText ? window.getComputedStyle(previewText).fontFamily : \"\";\n        [[\"front\", \"Vorderseite\"], [\"back\", \"Rückseite\"]].forEach(([k, seite]) =\u003e {\n          if (!gkSides.has(k)) return;\n          \/* Zeile ohne eigenes Formularfeld → an Zeile 1 anhängen („A + M | Ewig | 2024“), damit nichts verloren geht *\/\n          const extra = [];\n          gkSides[k].forEach((val, n) =\u003e {\n            const f = window.jmGravurFeld(seite, n + 1);\n            if (!f) { if (n \u003e 0 \u0026\u0026 val.trim()) extra.push(val.trim()); return; }\n            f.value = val.trim();\n            if (studioFont) f.style.fontFamily = studioFont;\n            f.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          });\n          const f1 = window.jmGravurFeld(seite, 1);\n          if (f1 \u0026\u0026 extra.length) {\n            f1.value = [f1.value.trim()].concat(extra).filter(Boolean).join(\" | \");\n            f1.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          }\n        });\n      }\n      if (gravurInput \u0026\u0026 previewText \u0026\u0026 !gkSides) {\n        gravurInput.value = previewText.textContent.trim();\n        gravurInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n      }\n      if (gravurInput \u0026\u0026 previewText) {\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n        const back3 = document.querySelector(\"#gravurtext_3\");\n        if (back3) back3.style.fontFamily = fontFamily;\n        const back4 = document.querySelector(\"#gravurtext_4\");\n        if (back4) back4.style.fontFamily = fontFamily;\n        const back5 = document.querySelector(\"#gravurtext_5\");\n        if (back5) back5.style.fontFamily = fontFamily;\n        const back6 = document.querySelector(\"#gravurtext_6\");\n        if (back6) back6.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      const maxLen = input.maxLength \u003e 0 ? input.maxLength : MAX_LENGTH;\n      if (input.value.length + symbol.length \u003e maxLen) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n      const back3 = document.getElementById(\"gravurtext_3\");\n      if (back3) back3.style.fontFamily = font;\n      const back4 = document.getElementById(\"gravurtext_4\");\n      if (back4) back4.style.fontFamily = font;\n      const back5 = document.getElementById(\"gravurtext_5\");\n      if (back5) back5.style.fontFamily = font;\n      const back6 = document.getElementById(\"gravurtext_6\");\n      if (back6) back6.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Hero-Link „Zu den Produktdetails“\n========================= *\/\ndocument.querySelectorAll('.jm-hz-details-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    const t = document.getElementById('jm-produktdetails');\n    if (!t) return;\n    e.preventDefault();\n    t.classList.add('show');   \/* Einblend-Animation sofort auslösen *\/\n    t.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\n\/* Gilt für ALLE „Live-Vorschau ansehen“-Links der Seite – auch den im Produkt-Template\n   (href=\"#engraving-preview\"). Nur wenn diese Beschreibung den Konfigurator (#jm-cfg-wrap) hat,\n   wird zum Konfigurator gescrollt; auf anderen Produkten passiert hier nichts. *\/\ndocument.addEventListener('click', e =\u003e {\n  const link = e.target.closest \u0026\u0026 e.target.closest('a[href=\"#engraving-preview\"], a[href=\"#jm-cfg-wrap\"], .live-preview-link');\n  if (!link) return;\n  const wrap = document.getElementById('jm-cfg-wrap');\n  if (!wrap) return;\n  e.preventDefault();\n  e.stopPropagation();\n  wrap.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}, true);\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\u003cscript\u003e\n\/* =========================\n   GRAVUR-STUDIO: VORDERSEITE \/ RÜCKSEITE · je 3 Zeilen (oben \/ Mitte \/ unten)\n   (Ergänzung – nutzt das vorhandene Eingabefeld #engravingInput als Zeile 1)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const lineInputs = [\"engravingInput\", \"engravingInput2\", \"engravingInput3\"].map(id =\u003e document.getElementById(id));\n  const input = lineInputs[0];\n  const tabs  = document.querySelectorAll(\".jm-gk-side\");\n  if (!input || !tabs.length) return;\n\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay     = document.getElementById(\"engravingOverlay\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText   = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-text\");\n  const studioImg   = document.getElementById(\"engravingProductImage\");\n  const popupImg    = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-image\");\n  \/* Zoom-Rahmen um Studio- und Popup-Bild (Bild-Zoom per --st-zoom \/ --st-px \/ --st-py, Tweak-Panel) *\/\n  [studioImg, popupImg].forEach(img =\u003e {\n    if (!img || img.parentElement.classList.contains(\"jm-st-zoom\")) return;\n    const z = document.createElement(\"div\");\n    z.className = \"jm-st-zoom\";\n    z.style.borderRadius = getComputedStyle(img).borderRadius;\n    img.parentNode.insertBefore(z, img);\n    z.appendChild(img);\n  });\n\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n\n  \/* ── Herzanhänger: Zeilen + Zeichen aus dem Produktformular übernehmen ── *\/\n  const LINES = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n  const hasBack = false;   \/* Plattenarmband: nur Vorderseite → Tabs Vorder-\/Rückseite ausgeblendet *\/\n  (function setupLines() {\n    const wrap = document.getElementById(\"jmGkInputWrap\");\n    if (wrap) wrap.classList.toggle(\"jm-gk-lines-1\", LINES === 1);\n    lineInputs.forEach((i, n) =\u003e {\n      if (!i) return;\n      const row = i.closest(\".jm-gk-line\");\n      if (row) row.style.display = n \u003c LINES ? \"\" : \"none\";\n      \/* Studio: fest max. 11 Zeichen (Formularfeld bitte ebenfalls maxlength=\"11\") *\/\n    });\n    if (LINES === 1) input.placeholder = \"z. B. Für immer ♥\";\n    const max = lineInputs[0] \u0026\u0026 lineInputs[0].maxLength \u003e 0 ? lineInputs[0].maxLength : 11;\n    const hint = document.getElementById(\"jmGkHint\");\n    if (hint) hint.innerHTML = (LINES === 1 ? \"Max. \" + max + \" Zeichen\" : \"Je Zeile max. \" + max + \" Zeichen\")\n      + \" · Zahlen \u0026amp; Symbole möglich\" + (LINES \u003e 1 ? \" · Zeile\" + (LINES === 3 ? \"n 2 + 3\" : \" 2\") + \" optional\" : \"\")\n      + (hasBack ? \" · Rückseite optional\" : \"\");\n    const sideTabs = document.querySelector(\".jm-gk-sides\");\n    if (sideTabs \u0026\u0026 !hasBack) sideTabs.style.display = \"none\";\n  })();\n  const S = window.jmGkSides = { front: [\"\", \"\", \"\"], back: [\"\", \"\", \"\"], side: \"front\" };\n  let focused = input;\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"focus\", () =\u003e { focused = i; }));\n\n  S.has  = k =\u003e S[k].some(v =\u003e v.trim());\n  S.save = function () { S[S.side] = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\"); renderTabs(); };\n\n  function renderTabs() {\n    [\"front\", \"back\"].forEach(k =\u003e {\n      const sm = document.getElementById(\"jm-gk-side-\" + k);\n        if (sm) {\n            \/* jede Zeile als eigenes Element → Desktop: „a \/ b \/ c“, Mobile: untereinander *\/\n            const filled = S[k].filter(v =\u003e v.trim());\n            sm.textContent = \"\";\n            if (!filled.length) sm.textContent = \"–\";\n            filled.forEach(v =\u003e {\n                const el = document.createElement(\"span\");\n                el.className = \"jm-gk-sum\";\n                el.textContent = v.trim();\n                sm.appendChild(el);\n            });\n        }\n      const b = document.querySelector('.jm-gk-side[data-side=\"' + k + '\"]');\n      if (b) b.classList.toggle(\"filled\", S.has(k));\n    });\n  }\n\n  \/* Vorschau: Zeile 1 im Text, Zeile 2 + 3 darunter (data-rest) *\/\n  function restOf(l) { return l[2].trim() ? (l[1] + \"\\n\" + l[2]) : l[1]; }\n  function render(openPopup) {\n    const l = S[S.side];\n    const any = l.some(v =\u003e v.trim());\n    [previewText, popupText].forEach(el =\u003e {\n      if (!el) return;\n      if (any) el.textContent = l[0] || \"\\u00A0\";\n      el.setAttribute(\"data-rest\", any ? restOf(l) : \"\");\n    });\n    if (overlay) overlay.classList.toggle(\"active\", any);\n    if (openPopup \u0026\u0026 any \u0026\u0026 mobilePopup \u0026\u0026 window.innerWidth \u003c= 768) mobilePopup.classList.add(\"show\");\n  }\n\n  \/* ── Bilder je Seite + Farbe (Alt-Text „Vorderseite Vergoldet“, „Rückseite Stahl matt“ …) ── *\/\n  const IMG = {};                \/* variantId → { front, back } *\/\n  const TITLES = {};             \/* variantId → slug (vergoldet, schwarz-matt …) *\/\n  const studioBox = document.querySelector(\".engraving-preview-image\");\n  const popupBox  = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview\");\n  function slug(t) {\n    return String(t || \"\").toLowerCase().replace(\/ä\/g, \"ae\").replace(\/ö\/g, \"oe\").replace(\/ü\/g, \"ue\").replace(\/ß\/g, \"ss\")\n      .replace(\/[^a-z0-9]+\/g, \"-\").replace(\/^-|-$\/g, \"\");\n  }\n  \/* Farbe + Seite an Studio-Bild und Popup schreiben → CSS-Regeln je Farbe\/Seite greifen *\/\n  function markStudio() {\n    [studioBox, popupBox].forEach(box =\u003e {\n      if (!box) return;\n      box.dataset.side = S.side;\n      box.dataset.variant = TITLES[currentVariant()] || \"\";\n      const v = getComputedStyle(box).getPropertyValue(\"--st-x\").trim();\n      box.classList.toggle(\"jm-st-pos\", !!v || !!box.style.getPropertyValue(\"--st-x\"));\n    });\n  }\n  const FALLBACK = studioImg ? studioImg.getAttribute(\"src\") : \"\";\n  const FALLBACK_POP = popupImg ? popupImg.getAttribute(\"src\") : \"\";\n  let want = \"\", wantPop = \"\";\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort („vergoldet“) *\/\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, Farbe „Rosé Gold“ → „rosegold“ (+ erstes Wort) *\/\n  function plain(t) { return String(t || \"\").toLowerCase().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\").replace(\/ß\/g, \"ss\"); }\n  function optKeys(o) {\n    o = plain(o);\n    const m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + \"x\" + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, \"\"), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  \/* Alt-Text kompakt: „Herz Zirkonia Vorderseite Rose Gold“ → „herzzirkoniavorderseiterosegold“ *\/\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, \"$1x$2\").replace(\/[^a-z0-9]+\/g, \"\"); }\n  function imgUrl(src) {\n    if (!src) return \"\";\n    if (src.indexOf(\"\/\/\") === 0) src = \"https:\" + src;\n    return src + (src.indexOf(\"?\") \u003e -1 ? \"\u0026\" : \"?\") + \"width=900\";\n  }\n  function currentVariant() {\n    const f = document.querySelector('form[action*=\"\/cart\/add\"] [name=\"id\"]');\n    return f ? String(f.value) : \"\";\n  }\n  function applyImage() {\n    markStudio();\n    syncSizes();\n    const m = IMG[currentVariant()] || {};\n    const url = m[S.side] || \"\";\n    \/* Kein Foto mit passendem Alt-Text → bisherige Studio-\/Popup-Bilder *\/\n    want = url || FALLBACK;\n    wantPop = url || FALLBACK_POP;\n    if (studioImg \u0026\u0026 studioImg.getAttribute(\"src\") !== want) studioImg.src = want;\n    if (popupImg \u0026\u0026 popupImg.getAttribute(\"src\") !== wantPop) popupImg.src = wantPop;\n  }\n  function guard(img, pop) {\n    if (!img) return;\n    new MutationObserver(() =\u003e {\n      const w = pop ? wantPop : want;\n      if (w \u0026\u0026 img.getAttribute(\"src\") !== w) img.src = w;\n    }).observe(img, { attributes: true, attributeFilter: [\"src\"] });\n  }\n\n  \/* ── Größe + Farbe (Schritt 1) ──\n     Quelle 1: Auswahlfelder im Produktformular (Debut: .single-option-selector) – funktioniert sofort\n     Quelle 2: Produktdaten (ProductJson \/ .js) – für Verfügbarkeit und als Ersatz *\/\n  let PRODUCT = null, SIZE_IDX = -1, COLOR_IDX = -1;\n  const sizeWrap  = document.getElementById(\"jm-hz-size-wrap\");\n  const sizeBox   = document.getElementById(\"jm-hz-sizes\");\n  const colorWrap = document.getElementById(\"jm-hz-color-wrap\");\n  const colorBox  = document.getElementById(\"jm-hz-colors\");\n  const isSize = o =\u003e \/\\d\\s*[x×]\\s*\\d\/i.test(String(o || \"\"));\n  const optsOf = v =\u003e (v.options || [v.option1, v.option2, v.option3]).filter(o =\u003e o != null).map(String);\n  const COLOR_INFO = { rot: \"Cotton-Seil\", schwarz: \"Cotton-Seil\", gruen: \"Cotton-Seil\", edelstahl: \"silberfarbig\", vergoldet: \"goldfarbig\", rosegold: \"roséfarbig\" };\n  function dotOf(c) { c = plain(c); return \/\\brot\\b|red\/.test(c) ? \"rot\" : \/schwarz|black\/.test(c) ? \"schwarz\" : \/grun|gruen|green\/.test(c) ? \"gruen\" : \/ros\/.test(c) ? \"rosegold\" : (\/gold\/.test(c) ? \"vergoldet\" : \"edelstahl\"); }\n  function area(o) {\n    const m = String(o).match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    return m ? parseFloat(m[1].replace(\",\", \".\")) * parseFloat(m[2].replace(\",\", \".\")) : 0;\n  }\n  function variantById(id) { return PRODUCT \u0026\u0026 (PRODUCT.variants || []).find(v =\u003e String(v.id) === String(id)); }\n  function cartForm() { return document.querySelector('form[action*=\"\/cart\/add\"]'); }\n\n  \/* Auswahlfelder im Formular: Größe = Werte wie „16 × 20 mm“ oder Label „Größe\/Size“, Farbe = das andere *\/\n  function labelOf(sel) {\n    const l = sel.id \u0026\u0026 document.querySelector('label[for=\"' + sel.id + '\"]');\n    return plain((l \u0026\u0026 l.textContent) || sel.getAttribute(\"data-name\") || sel.getAttribute(\"aria-label\") || sel.name || \"\");\n  }\n  function formSelects() {\n    const f = cartForm();\n    if (!f) return { size: null, color: null };\n    const list = Array.from(f.querySelectorAll(\"select\")).filter(sel =\u003e\n      sel.name !== \"id\" \u0026\u0026 !\/productselect\/i.test(sel.id || \"\") \u0026\u0026 sel.options.length \u003e 1);\n    let size = list.find(sel =\u003e Array.from(sel.options).some(o =\u003e isSize(o.value)) || \/gro|size\/.test(labelOf(sel))) || null;\n    let color = list.find(sel =\u003e sel !== size \u0026\u0026 \/farb|color|colour|material|metall\/.test(labelOf(sel))) ||\n                list.find(sel =\u003e sel !== size) || null;\n    return { size: size, color: color };\n  }\n  function setSelect(sel, val) {\n    if (!sel || sel.value === val) return;\n    sel.value = val;\n    sel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    setTimeout(() =\u003e { lastVariant = currentVariant(); applyImage(); }, 120);\n  }\n\n  \/* aktuelle Werte (Formular hat Vorrang, sonst Variante) *\/\n  function curSize() {\n    const fs = formSelects();\n    if (fs.size) return fs.size.value;\n    const v = variantById(currentVariant());\n    return v ? (SIZE_IDX \u003e -1 ? optsOf(v)[SIZE_IDX] : v.title) : \"\";\n  }\n  function curColor() {\n    const fs = formSelects();\n    if (fs.color) return fs.color.value;\n    const v = variantById(currentVariant());\n    return v \u0026\u0026 COLOR_IDX \u003e -1 ? optsOf(v)[COLOR_IDX] : \"\";\n  }\n  \/* Werteliste + Verfügbarkeit einer Option *\/\n  function valuesFor(kind) {\n    const fs = formSelects();\n    const sel = kind === \"size\" ? fs.size : fs.color;\n    const vs = PRODUCT ? (PRODUCT.variants || []) : [];\n    const idx = kind === \"size\" ? SIZE_IDX : COLOR_IDX;\n    let vals = [];\n    if (sel) vals = Array.from(sel.options).map(o =\u003e o.value).filter(Boolean);\n    else if (vs.length) vs.forEach(v =\u003e {\n      const x = idx \u003e -1 ? optsOf(v)[idx] : (kind === \"size\" ? v.title : null);\n      if (x \u0026\u0026 vals.indexOf(x) === -1) vals.push(x);\n    });\n    return vals.map(x =\u003e ({\n      value: x,\n      avail: !vs.length || idx \u003c 0 ? true : vs.some(v =\u003e optsOf(v)[idx] === x \u0026\u0026 v.available !== false)\n    }));\n  }\n  function chooseSize(val)  { const fs = formSelects(); if (fs.size)  setSelect(fs.size, val);  else selectOpt(SIZE_IDX, val); }\n  function chooseColor(val) { const fs = formSelects(); if (fs.color) setSelect(fs.color, val); else selectOpt(COLOR_IDX, val); }\n\n  function buildSizes() {\n    if (!sizeBox || !sizeWrap) return;\n    const sizes = valuesFor(\"size\");\n    if (sizes.length \u003c 2) { sizeWrap.hidden = true; return; }\n    const maxA = Math.max.apply(null, sizes.map(x =\u003e area(x.value)));\n    sizeBox.innerHTML = \"\";\n    sizes.forEach(x =\u003e {\n      const big = maxA \u003e 0 \u0026\u0026 area(x.value) === maxA;\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-hz-size\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.size = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = (big ? \"\u003cem\u003eNeu · größer\u003c\/em\u003e\" : \"\") + \"\u003cspan\u003e\u003c\/span\u003e\u003csmall\u003e\u003c\/small\u003e\";\n      b.querySelector(\"span\").textContent = x.value;\n      b.querySelector(\"small\").textContent = !x.avail ? \"ausverkauft\" : (big ? \"mehr Sichtbarkeit\" : (maxA \u003e 0 ? \"klassisch\" : \"\"));\n      b.addEventListener(\"click\", () =\u003e chooseSize(x.value));\n      sizeBox.appendChild(b);\n    });\n    sizeWrap.hidden = false;\n  }\n  function buildColors() {\n    if (!colorBox || !colorWrap) return;\n    const colors = valuesFor(\"color\");\n    if (colors.length \u003c 2) { colorWrap.hidden = true; return; }\n    colorBox.innerHTML = \"\";\n    colors.forEach(x =\u003e {\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-mh-color\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.color = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = '\u003cspan class=\"jm-mh-color-dot ' + dotOf(x.value) + '\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-info\"\u003e\u003cspan class=\"jm-mh-color-name\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-desc\"\u003e\u003c\/span\u003e\u003c\/span\u003e';\n      const m = String(x.value).match(\/^(.*?)\\s*\\((.*)\\)\\s*$\/);   \/* „Roségold (vergoldet)“ *\/\n      b.querySelector(\".jm-mh-color-name\").textContent = m ? m[1] : x.value;\n      b.querySelector(\".jm-mh-color-desc\").textContent = !x.avail ? \"ausverkauft\"\n        : [m ? m[2] : \"\", COLOR_INFO[dotOf(x.value)] || \"\"].filter(Boolean).join(\" · \");\n      b.title = x.value;\n      b.addEventListener(\"click\", () =\u003e chooseColor(x.value));\n      colorBox.appendChild(b);\n    });\n    colorWrap.hidden = false;\n  }\n  function buildChoices() {\n    if (PRODUCT) {\n      const first = (PRODUCT.variants || [])[0] ? optsOf(PRODUCT.variants[0]) : [];\n      SIZE_IDX = first.findIndex(isSize);\n      COLOR_IDX = first.findIndex((o, i) =\u003e i !== SIZE_IDX);\n    }\n    buildSizes();\n    buildColors();\n    syncSizes();\n    if (sizeWrap \u0026\u0026 colorWrap \u0026\u0026 sizeWrap.hidden \u0026\u0026 colorWrap.hidden) {\n      const fs = formSelects();\n      console.warn(\"[JM Armband] Schritt 1: keine Größen\/Farben gefunden\",\n        { formular: !!cartForm(), auswahlfelder: [fs.size, fs.color], produktdaten: !!PRODUCT,\n          varianten: PRODUCT ? PRODUCT.variants.map(v =\u003e v.title) : null });\n    }\n  }\n\n  \/* Gewicht je Größe *\/\n  const WEIGHT = { \"16x20\": \"ca. 1,6 g\", \"20x25\": \"ca. 2,6 g\" };\n  function info() {\n    const v = variantById(currentVariant());\n    const size  = curSize() || \"Platte 3,5 × 0,5 cm\";\n    const color = curColor() || \"\";\n    return { variant: v, size: size, color: color, weight: \"ca. 7,2 g\",\n             front: (IMG[currentVariant()] || {}).front || FALLBACK };\n  }\n  \/* Schritt-1-Karte + Texte (Größe, Farbe, Gewicht, Bild) *\/\n  function syncCard() {\n    const i = info();\n    document.querySelectorAll(\".js-hz-size\").forEach(el =\u003e { el.textContent = i.size; });\n    document.querySelectorAll(\".js-hz-color\").forEach(el =\u003e { el.textContent = i.color; });\n\n    const lb = document.getElementById(\"hzCfgLabel\");\n    if (lb) { lb.textContent = i.color; lb.style.display = i.color ? \"\" : \"none\"; }\n    const im = document.getElementById(\"hzCfgImg\");\n    if (im \u0026\u0026 i.front \u0026\u0026 im.getAttribute(\"src\") !== i.front) { im.src = i.front; im.alt = \"Plattenarmband \" + i.color; }\n  }\n  function syncSizes() {\n    const s = curSize(), c = curColor();\n    if (sizeBox) sizeBox.querySelectorAll(\".jm-hz-size\").forEach(b =\u003e {\n      const on = b.dataset.size === s;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    if (colorBox) colorBox.querySelectorAll(\".jm-mh-color\").forEach(b =\u003e {\n      const on = b.dataset.color === c;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    syncCard();\n  }\n  \/* Formularauswahl geändert (auch direkt oben im Produktformular) → Karten nachziehen *\/\n  document.addEventListener(\"change\", e =\u003e {\n    if (e.target \u0026\u0026 e.target.tagName === \"SELECT\" \u0026\u0026 e.target.closest('form[action*=\"\/cart\/add\"]')) setTimeout(() =\u003e { syncSizes(); applyImage(); }, 150);\n  });\n  \/* sofort aus dem Formular aufbauen – nicht erst auf die Produktdaten warten *\/\n  setTimeout(buildChoices, 0);\n\n  function selectSize(s) { chooseSize(s); }\n  \/* Ersatz ohne Auswahlfelder: Variante über Produktdaten wählen (übrige Optionen beibehalten) *\/\n  function selectOpt(idx, s) {\n    if (!PRODUCT) return;\n    const form = cartForm();\n    if (!form) return;\n    const cur = variantById(currentVariant());\n    const curOpts = cur ? optsOf(cur) : [];\n    const list = (PRODUCT.variants || []).filter(v =\u003e (idx \u003e -1 ? optsOf(v)[idx] : v.title) === s);\n    const score = v =\u003e optsOf(v).filter((o, i) =\u003e i !== idx \u0026\u0026 o === curOpts[i]).length * 2 + (v.available !== false ? 1 : 0);\n    const v = list.sort((a, b) =\u003e score(b) - score(a))[0];\n    if (!v) return;\n    const vals = optsOf(v);\n    form.querySelectorAll('input[type=\"radio\"]').forEach(r =\u003e {\n      if (vals.indexOf(r.value) \u003e -1 \u0026\u0026 !r.checked) {\n        r.checked = true;\n        r.dispatchEvent(new Event(\"change\", { bubbles: true }));\n        const lab = r.id \u0026\u0026 form.querySelector('label[for=\"' + r.id + '\"]');\n        if (lab) lab.click();\n      }\n    });\n    const idSel = form.querySelector('select[name=\"id\"], input[name=\"id\"]');\n    if (idSel \u0026\u0026 String(idSel.value) !== String(v.id)) {\n      idSel.value = v.id;\n      idSel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    }\n    lastVariant = currentVariant();\n    applyImage();\n  }\n  (function loadProduct() {\n    const el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    const get = el ? Promise.resolve(JSON.parse(el.textContent))\n                   : fetch(location.pathname.replace(\/\\\/$\/, \"\") + \".js\").then(r =\u003e r.json());\n    get.then(p =\u003e {\n      const media = (p.media || []).map(m =\u003e ({ alt: String(m.alt || \"\").toLowerCase(), src: m.src || (m.preview_image \u0026\u0026 m.preview_image.src) }));\n      const pick = (side, opts, strict) =\u003e {\n        const sideKeys = side === \"front\" ? [\"vorderseite\"] : [\"rückseite\", \"rueckseite\"];\n        const list = media.filter(m =\u003e sideKeys.some(k =\u003e m.alt.indexOf(k) \u003e -1));\n        let hit = list.find(m =\u003e opts.some(o =\u003e optKeys(o).some(k =\u003e altNorm(m.alt).indexOf(k) \u003e -1)));\n        if (!hit \u0026\u0026 !strict \u0026\u0026 list.length === 1) hit = list[0];\n        return hit ? imgUrl(hit.src) : \"\";\n      };\n      \/* Hauptbild des Produkts → Hero-Bild + Ersatz, wenn kein Foto mit Alt-Text „Vorderseite \u003cFarbe\u003e“ existiert *\/\n      const heroSrc = (typeof p.featured_image === \"object\" \u0026\u0026 p.featured_image) ? p.featured_image.src : (p.featured_image || (p.images \u0026\u0026 p.images[0]) || \"\");\n      const hero = document.getElementById(\"jmArmHeroImg\");\n      if (hero \u0026\u0026 heroSrc) hero.src = imgUrl(heroSrc);\n      p.variants.forEach(v =\u003e {\n        const opts = v.options || [v.option1, v.option2, v.option3];\n        \/* Reihenfolge: Foto „Vorderseite \u003cFarbe\u003e“ → Variantenbild → einziges Vorderseiten-Foto → Hauptbild *\/\n        const fr = pick(\"front\", opts, true) || imgUrl(v.featured_image \u0026\u0026 (v.featured_image.src || v.featured_image)) || pick(\"front\", opts) || imgUrl(heroSrc);\n        IMG[String(v.id)] = { front: fr, back: pick(\"back\", opts) || fr };\n        \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n        TITLES[String(v.id)] = slug(String(v.title).replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, \" \"));\n      });\n      PRODUCT = p;\n      buildChoices();\n      applyImage();\n    }).catch(err =\u003e { console.warn(\"[JM Armband] Produktdaten nicht geladen\", err); buildChoices(); });\n  })();\n  guard(studioImg, false); guard(popupImg, true);\n  let lastVariant = currentVariant();\n  setInterval(() =\u003e { const v = currentVariant(); if (v !== lastVariant) { lastVariant = v; applyImage(); } }, 400);\n\n  \/* ── Seite wechseln ── *\/\n  function setSide(k) {\n    if (!LABEL[k] || (k === \"back\" \u0026\u0026 !hasBack)) return;\n    S.save();\n    S.side = k;\n    tabs.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(\"jmGkInputLabel\");\n    if (lb) lb.textContent = \"Gravur \" + LABEL[k] + (k === \"back\" ? \" (optional)\" : \"\");\n    [\"jmGkSideLabel\", \"jmGkPopupSideLabel\"].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (el) el.textContent = LABEL[k];\n    });\n    lineInputs.forEach((i, n) =\u003e { if (i) i.value = S[k][n]; });\n    applyImage();\n    \/* vorhandene Vorschau-Logik (Effekte, Mobile-Popup) auslösen *\/\n    input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    render(true);\n    (lineInputs.find(i =\u003e i \u0026\u0026 !i.value) || input).focus();\n  }\n  tabs.forEach(b =\u003e b.addEventListener(\"click\", () =\u003e setSide(b.dataset.side)));\n\n  \/* ── Eingaben ── *\/\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"input\", () =\u003e { S.save(); render(true); }));\n\n  \/* Symbole: in die zuletzt gewählte Zeile einfügen (Zeile 1 übernimmt die vorhandene Logik) *\/\n  document.addEventListener(\"click\", function (e) {\n    const btn = e.target.closest \u0026\u0026 e.target.closest(\"#engraving-preview .symbol-btn\");\n    if (!btn) return;\n    if (focused === input) { setTimeout(() =\u003e { S.save(); render(true); }, 30); return; }\n    e.stopImmediatePropagation();\n    const sym = btn.dataset.symbol || btn.textContent.trim();\n    const max = focused.maxLength \u003e 0 ? focused.maxLength : 11;\n    if (Array.from(focused.value + sym).length \u003e max) return;\n    const st = focused.selectionStart != null ? focused.selectionStart : focused.value.length;\n    const en = focused.selectionEnd != null ? focused.selectionEnd : focused.value.length;\n    focused.value = focused.value.substring(0, st) + sym + focused.value.substring(en);\n    focused.focus();\n    focused.selectionStart = focused.selectionEnd = st + sym.length;\n    S.save(); render(true);\n  }, true);\n\n  \/* Schriftart: vorhandene Logik setzt nur Zeile 1 → danach komplett neu zeichnen *\/\n  document.querySelectorAll(\"#engraving-preview .font-btn\").forEach(b =\u003e\n    b.addEventListener(\"click\", () =\u003e setTimeout(() =\u003e render(true), 30)));\n\n  \/* Werte, die per Skript gesetzt werden → regelmäßig übernehmen *\/\n  setInterval(() =\u003e {\n    const now = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\");\n    if (now.join(\"|\") !== S[S.side].join(\"|\")) { S.save(); render(false); }\n  }, 200);\n\n  \/* Schnittstelle für das Tweak-Panel *\/\n  window.jmGkStudio = { setSide: setSide, mark: markStudio, box: () =\u003e (window.innerWidth \u003c= 768 ? popupBox : studioBox),\n                        studioBox: studioBox, popupBox: popupBox, side: () =\u003e S.side, render: render,\n                        info: info, lines: () =\u003e LINES };\n  markStudio();\n  renderTabs();\n});\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   3-SCHRITT KONFIGURATOR: 1 Schmuckstück → 2 Gravur → 3 Bestätigung\n   (nutzt window.jmGkSides \/ window.jmGkStudio aus dem Gravur-Studio)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const wrap = document.getElementById(\"jm-cfg-wrap\");\n  if (!wrap) return;\n  const TOTAL = 3;\n  let step = 1;\n  const next2 = document.getElementById(\"jm-cfg-next-2\");\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n  const sides = () =\u003e window.jmGkSides || { front: [], back: [], has: () =\u003e false };\n  const hasAny = () =\u003e sides().has(\"front\") || sides().has(\"back\");\n  const esc = t =\u003e String(t).replace(\/[\u0026\u003c\u003e\"]\/g, c =\u003e ({ \"\u0026\": \"\u0026amp;\", \"\u003c\": \"\u0026lt;\", \"\u003e\": \"\u0026gt;\", '\"': \"\u0026quot;\" }[c]));\n\n  function updNext2() {\n    if (!next2) return;\n    next2.disabled = !hasAny();\n    next2.title = next2.disabled ? \"Bitte zuerst eine Gravur eingeben\" : \"\";\n  }\n  function hidePopup() {\n    const p = document.getElementById(\"engraving-mobile-popup\");\n    if (p) p.classList.remove(\"show\");\n  }\n\n  function go(n, scroll) {\n    step = n;\n    for (let i = 1; i \u003c= TOTAL; i++) {\n      const card = document.getElementById(\"jm-cfg-card-\" + i);\n      if (card) card.classList.toggle(\"active\", i === n);\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 === 2) { updNext2(); if (window.jmGkStudio) { window.jmGkStudio.mark(); window.jmGkStudio.render(false); } }\n    if (n === 3) fillSummary();\n    if (scroll) wrap.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n  }\n\n  function fillSummary() {\n    const st = window.jmGkStudio;\n    const i = st \u0026\u0026 st.info ? st.info() : {};\n    const S = sides();\n    if (S.save) S.save();\n    const set = (id, v) =\u003e { const el = document.getElementById(id); if (el \u0026\u0026 v != null) el.textContent = v; };\n    \/* Platte: fester Text im HTML *\/\n    set(\"jm-cfg-s3-color\", i.color);\n    \/* Länge · Gewicht: fester Text im HTML *\/\n    const thumb = document.getElementById(\"jm-cfg-s3-thumb\");\n    if (thumb \u0026\u0026 i.front) thumb.src = i.front;\n\n    const pv = document.getElementById(\"engravingPreviewText\");\n    const font = pv ? getComputedStyle(pv).fontFamily : \"Playfair Display\";\n    const fontName = font.replace(\/['\"]\/g, \"\").split(\",\")[0].trim();\n    const used = [\"front\", \"back\"].filter(k =\u003e S.has(k));\n    const box = document.getElementById(\"jm-cfg-s3-gravur-text\");\n    if (box) {\n      box.innerHTML = used.length ? used.map(k =\u003e\n        '\u003cdiv class=\"jm-cfg-s3-gravur-side-block\"\u003e\u003cspan class=\"jm-cfg-s3-gravur-side\"\u003e' + LABEL[k] + '\u003c\/span\u003e' +\n        '\u003cspan class=\"jm-cfg-s3-gravur-lines\" style=\"font-family:' + esc(font) + '\"\u003e' +\n        S[k].filter(v =\u003e v.trim()).map(v =\u003e \"\u003cspan\u003e\" + esc(v.trim()) + \"\u003c\/span\u003e\").join(\"\") + \"\u003c\/span\u003e\u003c\/div\u003e\").join(\"\") : \"–\";\n    }\n    set(\"jm-cfg-s3-sides\", (used.length ? used.map(k =\u003e LABEL[k]).join(\" \u0026 \") : \"Keine\") + \" · kostenlos\");\n    set(\"jm-cfg-s3-gravur-meta\", \"Schriftart: \" + fontName + \" · 1 Zeile · max. 11 Zeichen\");\n\n    \/* Preis: aus dem Theme übernehmen, sonst aus der Variante *\/\n    const target = document.getElementById(\"jm-cfg-s3-price\");\n    if (target) {\n      const src = document.querySelector(\".price__pricing-group\");\n      if (src) target.innerHTML = src.innerHTML;\n      else if (i.variant \u0026\u0026 i.variant.price != null) {\n        const p = Number(i.variant.price);\n        const eur = (p \u003e 999 || String(i.variant.price).indexOf(\".\") === -1 ? p \/ 100 : p);\n        target.innerHTML = '\u003cspan class=\"jm-cfg-s3-price-fallback\"\u003e' + eur.toFixed(2).replace(\".\", \",\") + \" €\u003c\/span\u003e\";\n      }\n    }\n  }\n\n  const on = (id, fn) =\u003e { const el = document.getElementById(id); if (el) el.addEventListener(\"click\", fn); };\n  on(\"jm-cfg-next-1\", () =\u003e go(2, true));\n  on(\"jm-cfg-back-2\", () =\u003e go(1, true));\n  on(\"jm-cfg-next-2\", () =\u003e { if (hasAny()) go(3, true); });\n  on(\"jm-cfg-back-3\", () =\u003e go(2, true));\n  on(\"jm-cfg-popup-next\", e =\u003e {\n    e.preventDefault(); e.stopPropagation();\n    hidePopup();\n    if (step === 2 \u0026\u0026 hasAny()) go(3, true);\n  });\n\n  \/* Weiter-Button erst aktiv, wenn eine Seite befüllt ist *\/\n  setInterval(() =\u003e { if (step === 2) updNext2(); }, 300);\n\n  \/* sticky geht nicht, wenn ein Elterncontainer overflow hidden\/auto hat → Bild stattdessen mittig *\/\n  (function checkSticky() {\n    const s2 = wrap.querySelector(\".jm-cfg-s2-wrap\");\n    if (!s2) return;\n    let el = s2.parentElement, blocked = false;\n    while (el \u0026\u0026 el !== document.body) {\n      const o = getComputedStyle(el);\n      if (\/(hidden|auto|scroll|clip)\/.test(o.overflow + o.overflowY + o.overflowX)) { blocked = true; break; }\n      el = el.parentElement;\n    }\n    s2.classList.toggle(\"jm-no-sticky\", blocked);\n    if (!blocked) return;\n    \/* Bild mitführen: bleibt mittig im Fenster, aber innerhalb der Gravur-Spalte *\/\n    const grid = s2.querySelector(\".engraving-preview-grid\");\n    const img  = s2.querySelector(\".engraving-preview-image\");\n    if (!grid || !img) return;\n    let raf = 0;\n    function follow() {\n      raf = 0;\n      if (window.innerWidth \u003c= 900 || step !== 2) { img.style.transform = \"\"; return; }\n      const g = grid.getBoundingClientRect();\n      const h = img.offsetHeight;\n      const want = (window.innerHeight - h) \/ 2 - g.top;\n      const y = Math.max(0, Math.min(want, g.height - h));\n      img.style.transform = y ? \"translateY(\" + Math.round(y) + \"px)\" : \"\";\n    }\n    const req = () =\u003e { if (!raf) raf = requestAnimationFrame(follow); };\n    window.addEventListener(\"scroll\", req, { passive: true });\n    window.addEventListener(\"resize\", req);\n    wrap.addEventListener(\"click\", () =\u003e setTimeout(req, 50));\n    setInterval(req, 500);\n  })();\n\n  window.jmCfg = { go: go, step: () =\u003e step };\n  go(1, false);\n});\n\u003c\/script\u003e\n\n  \u003cstyle\u003e\n.jm-lv-stage {\n  \/* ── Gravur-Position (mit ?jmtweak=1 einstellen) ── *\/\n  --lv-x: 50%;\n  --lv-y: 50%;\n  --lv-rot: 0deg;\n  --lv-size: 6;\n  --lv-tx: -50%;     \/* Anker: Zeile 1 mittig auf x\/y *\/\n  --lv-ty: -50%;\n  --lv-color: rgba(205,205,205,0.92);\n  \/* Feinjustierung (mit ?jmtweak=1 einstellbar) *\/\n  --lv-lh: 1.15;     \/* Zeilenabstand Zeile 2 + 3 *\/\n  --lv-gap: 0em;     \/* Abstand Zeile 1 → Zeile 2 *\/\n  --lv-ls: 0.06em;   \/* Zeichenabstand *\/\n  --lv-op: 1;        \/* Deckkraft der Gravur *\/\n  --lv-rdx: 0em;     \/* Versatz Zeile 2 + 3 seitlich *\/\n  position: relative;\n  container-type: inline-size;\n  border-radius: 14px;\n  overflow: hidden;\n}\n.jm-lv-img {\n  width: 100%;\n  display: block;\n  border-radius: 14px;\n  transition: opacity 0.3s ease;\n}\n\/* Bild-Zoom (Tweak-Panel): --lv-zoom (1 = Original), --lv-px \/ --lv-py (Verschiebung in %) – Bühne schneidet ab *\/\n.jm-lv-stage { background: #000; }\n.jm-lv-stage .jm-lv-img, .jm-lv-stage .jm-lv-img-back {\n  transform: translate(var(--lv-px, 0%), var(--lv-py, 0%)) scale(var(--lv-zoom, 1));\n  transform-origin: center center;\n}\n.jm-lv-text {\n  position: absolute;\n  left: var(--lv-x);\n  top: var(--lv-y);\n  transform: translate(var(--lv-tx, -50%), var(--lv-ty, -190%)) rotate(var(--lv-rot));\n  font-size: calc(var(--lv-size) * 1cqw);\n  font-family: 'Playfair Display', serif;\n  color: var(--lv-color);\n  letter-spacing: var(--lv-ls, 0.06em);\n  opacity: var(--lv-op, 1);\n  white-space: nowrap;\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  pointer-events: none;\n}\n.jm-lv-text.is-empty { opacity: 0.65; }\n\/* Zeile 2 + 3 unter Zeile 1 (Zeile 1 bleibt an der eingestellten Position) *\/\n.jm-lv-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% + var(--lv-gap, 0em)); transform: translateX(calc(-50% + var(--lv-rdx, 0em)));\n  white-space: pre; text-align: center; font: inherit; line-height: var(--lv-lh, 1.15); color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n    @keyframes jmLvShake {\n  0%, 100% { transform: translateX(0); }\n  20%, 60% { transform: translateX(-5px); }\n  40%, 80% { transform: translateX(5px); }\n}\n.jm-lv-shake { animation: jmLvShake 0.35s ease; }\n.jm-lv-label {\n  display: block;\n  text-align: center;\n  margin-top: 10px;\n  font-size: 9px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: #c9a84c;\n  font-weight: 700;\n}\n.jm-lv-close {\n  position: absolute;\n  top: 8px;\n  right: 10px;\n  background: none;\n  border: none;\n  color: #c9a84c;\n  font-size: 20px;\n  line-height: 1;\n  cursor: pointer;\n  padding: 4px;\n  z-index: 10;\n  opacity: 0.7;\n  transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.jm-lv-close:hover { opacity: 1; transform: scale(1.15); }\n\n\/* Desktop-Panel *\/\n#jm-lv-desktop {\n  display: none;\n  position: fixed;\n  left: 25vh;\n  top: 50vh;\n  transform: translateY(-50%);\n  z-index: 8888;\n  width: 460px;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 20px;\n  padding: 16px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n}\n\/* ── Desktop: Werte je Größe + Seite (mit ?jmtweak=1 ermitteln, Regel hier einfügen) ──\n   Beispiel: #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage { --lv-x: 50%; --lv-y: 48%; --lv-rot: 0deg; --lv-size: 7; }\n             #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage.jm-lv-stage--back { … }\n   Gravur-Studio: .engraving-preview-image[data-variant=\"20-25-mm\"][data-side=\"front\"] { --st-x: …; } *\/\n\n#jm-lv-desktop.show { display: block; animation: jmLvIn 0.3s ease; }\n@keyframes jmLvIn {\n  from { opacity: 0; transform: translateY(-50%) translateX(-12px); }\n  to   { opacity: 1; transform: translateY(-50%) translateX(0); }\n}\n\n\/* Mobile-Popup *\/\n#jm-lv-mobile {\n  position: fixed;\n  left: 50%;\n  bottom: 110px;\n  width: calc(100% - 24px);\n  max-width: 380px;\n  z-index: 9998;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 18px;\n  padding: 12px;\n  box-shadow: 0 -10px 40px rgba(0,0,0,0.35);\n  opacity: 0;\n  pointer-events: none;\n  transform: translate(-50%, 20px);\n  transition: opacity 0.3s ease, transform 0.3s ease;\n}\n#jm-lv-mobile.show { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }\n\n@media (max-width: 768px) {\n  #jm-lv-desktop { display: none !important; }\n\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 50%;\n    --lv-rot: 0deg;\n    --lv-size: 6;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-color: rgba(205, 205, 205, 0.92);\n    position: relative;\n    container-type: inline-size;\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n  \/* ── Mobile: Werte je Größe + Seite (mit ?jmtweak=1 am Handy ermitteln) ──\n     Beispiel: #jm-lv-mobile[data-variant=\"20-25-mm\"] .jm-lv-stage { … } *\/\n}\n@media (min-width: 769px) { #jm-lv-mobile { display: none !important; } }\n\n\/* Vorder- + Rückseite nebeneinander *\/\n.jm-lv-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr 1fr; }\n.jm-lv-side { display: none; }\n.jm-lv-side.on { display: block; }\n.jm-lv-side-label { display: block; text-align: center; margin-top: 6px; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #8a7055; font-weight: 700; }\n\/* Vorder- + Rückseite befüllt: immer EIN großes Bild – Umschalter Vorderseite \/ Rückseite\n   (Panel bleibt so schmal wie bisher und verdeckt das Produktformular nicht) *\/\n.jm-lv-tabs { display: none; gap: 6px; margin-bottom: 8px; padding-right: 26px; }\n.jm-lv-both .jm-lv-tabs { display: flex; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr; }\n.jm-lv-tabs button { flex: 1; padding: 6px 8px; border-radius: 999px; border: 1px solid rgba(201,168,76,0.45); background: transparent; color: #e6d3a3; font: 700 10px Inter, sans-serif; letter-spacing: 1.2px; text-transform: uppercase; cursor: pointer; }\n.jm-lv-tabs button.active { background: #c9a84c; color: #1a1410; }\n\/* ── RÜCKSEITE: eigene Werte je Größe (mit ?jmtweak=1 → Seite „Rückseite“ ermitteln) ──\n   Höhere Spezifität (.jm-lv-stage.jm-lv-stage--back) → greift immer vor den Vorderseiten-Werten. *\/\n\n\/* ── LIVE-VORSCHAU OBEN: Startposition für alle Bandfarben ──\n   Mit ?jmtweak=1 → „Live-Vorschau oben“ je Farbe einstellen und die ausgegebene Regel hier ergänzen. *\/\n#jm-lv-desktop .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 50%;\n  --lv-rot: 0deg;\n  --lv-size: 5;\n  --lv-ty: -50%;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n@media (max-width: 768px) {\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 50%;\n    --lv-rot: 0deg;\n    --lv-size: 5;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-l: 28%;\n    --lv-sh: 0.15;\n  }\n}\n\n\/* ── WERTE JE BANDFARBE (mit ?jmtweak=1 ermittelt) ──\n   Reihenfolge wichtig: Desktop-Regeln zuerst, Mobile-Regeln (@media) danach – sonst überschreibt Desktop das Handy. *\/\n#jm-lv-desktop[data-variant=\"rot\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 72.5%;\n  --lv-rot: 0deg;\n  --lv-size: 5;\n  --lv-ty: -50%;\n  --lv-arc: -0.14em;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n\n#jm-lv-desktop[data-variant=\"schwarz\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 72.5%;\n  --lv-rot: 0deg;\n  --lv-size: 5;\n  --lv-ty: -50%;\n  --lv-arc: -0.14em;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n\n.engraving-preview-image[data-variant=\"rot\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 65%;\n  --st-rot: 0deg;\n  --st-size: 5;\n  --st-arc: -0.17em;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n\n.engraving-preview-image[data-variant=\"schwarz\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 65%;\n  --st-rot: 0deg;\n  --st-size: 5;\n  --st-arc: -0.17em;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n\n@media (max-width: 768px) {\n  #jm-lv-mobile[data-variant=\"rot\"] .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 72%;\n    --lv-rot: 0deg;\n    --lv-size: 5;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-arc: -0.12em;\n    --lv-l: 28%;\n    --lv-sh: 0.15;\n  }\n  #jm-lv-mobile[data-variant=\"schwarz\"] .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 72%;\n    --lv-rot: 0deg;\n    --lv-size: 5;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-arc: -0.12em;\n    --lv-l: 28%;\n    --lv-sh: 0.15;\n  }\n  .engraving-preview-image[data-variant=\"rot\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-arc: -0.34em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n  .engraving-preview-image[data-variant=\"schwarz\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-arc: -0.34em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n  #engraving-mobile-popup .popup-preview[data-variant=\"rot\"][data-side=\"front\"] {\n    --st-x: 50.5%;\n    --st-y: 72%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-arc: -0.17em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n  #engraving-mobile-popup .popup-preview[data-variant=\"schwarz\"][data-side=\"front\"] {\n    --st-x: 50.5%;\n    --st-y: 72%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-arc: -0.17em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n}\n\n\/* Tweak-Panel *\/\n#jm-lv-tweak {\n  position: fixed;\n  right: 20px;\n  top: 120px;\n  z-index: 99999;\n  width: 240px;\n  background: #111;\n  color: #eee;\n  border: 1px solid #c9a84c;\n  border-radius: 12px;\n  padding: 12px;\n  font: 12px\/1.4 Inter, sans-serif;\n  cursor: move;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.4);\n}\n#jm-lv-tweak label { display: flex; justify-content: space-between; margin-top: 8px; }\n#jm-lv-tweak input[type=range] { width: 100%; cursor: pointer; }\n#jm-lv-tweak code { display: block; margin-top: 10px; padding: 6px; background: #222; border-radius: 6px; font-size: 11px; white-space: pre-wrap; cursor: text; }\n#jm-lv-tweak button { margin-top: 8px; width: 100%; padding: 6px; background: #c9a84c; color: #111; border: 0; border-radius: 6px; cursor: pointer; font-weight: 600; }\n#jm-lv-tweak select { width: 100%; margin-top: 8px; padding: 5px; border-radius: 6px; border: 0; font: inherit; }\n#jm-lv-tweak { max-height: 85vh; overflow: auto; }\n#jm-lv-tweak strong { display: block; touch-action: none; user-select: none; }\n@media (max-width: 768px) { #jm-lv-tweak { top: 10px; right: 8px; width: 220px; max-height: 45vh; overflow: auto; background: rgba(17,17,17,.88); } }\n\u003c\/style\u003e\n\n\n\u003cscript\u003e\n\/* =========================\n   WÖLBUNG DER GRAVURZEILE (Zeile 1)\n   Liest --lv-arc (Live-Vorschau oben) bzw. --st-arc (Gravur-Studio + Mobile-Popup) aus dem CSS \/ Tweak-Panel.\n   Jeder Buchstabe wird entlang eines Bogens versetzt und gedreht – Text bleibt sonst unverändert.\n========================= *\/\n(function () {\n  const TARGETS = [[\".jm-lv-text\", \"--lv-arc\"], [\"#engravingPreviewText\", \"--st-arc\"], [\".popup-preview-text\", \"--st-arc\"]];\n  function textOf(el) {\n    return el._jmBent \u0026\u0026 el.querySelector(\".jm-arc-ch\") ? el._jmText : el.textContent;\n  }\n  function bend(el, arc, txt) {\n    el._jmText = txt;\n    if (!arc || !txt) {\n      if (el.querySelector(\".jm-arc-ch\")) el.textContent = txt;\n      el._jmBent = false; el._jmKey = \"0|\" + txt;\n      return;\n    }\n    el.textContent = \"\";\n    const chars = Array.from(txt).map(ch =\u003e {\n      const sp = document.createElement(\"span\");\n      sp.className = \"jm-arc-ch\";\n      sp.textContent = ch === \" \" ? \"\\u00A0\" : ch;\n      el.appendChild(sp);\n      return sp;\n    });\n    const fs = parseFloat(getComputedStyle(el).fontSize) || 16;\n    const xs = chars.map(c =\u003e c.offsetLeft + c.offsetWidth \/ 2);\n    const mid = (xs[0] + xs[xs.length - 1]) \/ 2;\n    const half = Math.max(1, (xs[xs.length - 1] - xs[0]) \/ 2);\n    chars.forEach((c, i) =\u003e {\n      const u = (xs[i] - mid) \/ half;                 \/* −1 … +1 *\/\n      const dy = arc * u * u;                          \/* Enden um „arc“ em versetzt *\/\n      const ang = Math.atan(2 * arc * u \/ (half \/ fs)) * 180 \/ Math.PI;\n      c.style.transform = \"translateY(\" + dy.toFixed(3) + \"em) rotate(\" + ang.toFixed(2) + \"deg)\";\n    });\n    el._jmBent = true; el._jmKey = arc + \"|\" + txt;\n  }\n  function tick() {\n    TARGETS.forEach(([sel, v]) =\u003e {\n      document.querySelectorAll(sel).forEach(el =\u003e {\n        if (!el.getClientRects().length) return;          \/* unsichtbar → später *\/\n        const arc = parseFloat(getComputedStyle(el).getPropertyValue(v)) || 0;\n        const txt = textOf(el);\n        if (el._jmKey !== arc + \"|\" + txt \u0026\u0026 !(arc === 0 \u0026\u0026 !el._jmBent \u0026\u0026 el._jmKey === undefined)) bend(el, arc, txt);\n      });\n    });\n  }\n  window.jmArcRefresh = tick;\n  setInterval(tick, 250);\n})();\n\u003c\/script\u003e\n\u003c!-- JM LIVE-VORSCHAU: Desktop-Panel + Mobile-Popup --\u003e\n\u003cdiv id=\"jm-lv-desktop\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cdiv id=\"jm-lv-mobile\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* Optional: eigene Vorschaubilder pro Farbe (Name wie in der Variante, klein geschrieben).\n   Leer lassen = Variantenbild aus Shopify wird genutzt. *\/\nvar JM_LV_BILDER = {\n  \/\/ 'gold':    'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'schwarz': 'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'silber':  'https:\/\/cdn.shopify.com\/...'\n};\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  var form    = document.querySelector('form[action*=\"\/cart\/add\"]');\n  var desktop = document.getElementById('jm-lv-desktop');\n  var mobile  = document.getElementById('jm-lv-mobile');\n  if (!form || !desktop || !mobile) return;\n\n  \/* Panels an den body hängen → nie im Formular, X löst kein Add-to-Cart aus *\/\n  document.body.appendChild(desktop);\n  document.body.appendChild(mobile);\n\n  var stages = document.querySelectorAll('.jm-lv-stage');\n  var texts  = document.querySelectorAll('.jm-lv-text:not(.jm-lv-text--back)');\n  var imgs   = document.querySelectorAll('.jm-lv-img');\n  \/* Rückseite *\/\n  var backTexts = document.querySelectorAll('.jm-lv-text--back');\n  var backImgs  = document.querySelectorAll('.jm-lv-img-back');\n  var colors = document.querySelectorAll('.jm-lv-color');\n  var variants = {};\n  var currentId = null;\n\n  \/* ── Produktdaten: erst Theme-JSON, sonst \/products\/handle.js ── *\/\n  function loadProduct() {\n    var el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    if (el) {\n      try { return Promise.resolve(JSON.parse(el.textContent)); } catch (e) {}\n    }\n    var path = location.pathname.replace(\/\\\/$\/, '');\n    return fetch(path + '.js').then(function (r) { return r.json(); });\n  }\n\n  function imgUrl(src) {\n    if (!src) return '';\n    if (src.indexOf('\/\/') === 0) src = 'https:' + src;\n    return src + (src.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=900';\n  }\n\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort *\/\n  function plain(t) { return String(t || '').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').replace(\/ß\/g, 'ss'); }\n  function optKeys(o) {\n    o = plain(o);\n    var m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + 'x' + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, ''), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, '$1x$2').replace(\/[^a-z0-9]+\/g, ''); }\n\n  loadProduct().then(function (p) {\n    var fallback = p.featured_image || (p.images \u0026\u0026 p.images[0]) || '';\n    if (typeof fallback === 'object') fallback = fallback.src;\n    \/* Rückseiten-Fotos: Alt-Text mit „Rückseite“ + Farbe (z. B. „Rückseite Vergoldet“) *\/\n    var backMedia = (p.media || []).filter(function (m) {\n      var a = String(m.alt || '').toLowerCase();\n      return a.indexOf('rückseite') \u003e -1 || a.indexOf('rueckseite') \u003e -1;\n    });\n    p.variants.forEach(function (v) {\n      var src = v.featured_image ? v.featured_image.src : fallback;\n      var own = null;\n      var opts = (v.options || [v.option1, v.option2, v.option3]);\n      opts.forEach(function (o) {\n        if (o \u0026\u0026 JM_LV_BILDER[String(o).toLowerCase()]) own = JM_LV_BILDER[String(o).toLowerCase()];\n      });\n      var back = null;\n      backMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!back \u0026\u0026 hitK) back = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!back \u0026\u0026 backMedia.length === 1) back = backMedia[0].src || (backMedia[0].preview_image \u0026\u0026 backMedia[0].preview_image.src);\n      \/* Vorderseiten-Foto: Alt-Text mit „Vorderseite“ + Farbe *\/\n      var frontMedia = (p.media || []).filter(function (m) { return String(m.alt || '').toLowerCase().indexOf('vorderseite') \u003e -1; });\n      var frontOwn = null;\n      frontMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!frontOwn \u0026\u0026 hitK) frontOwn = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!frontOwn \u0026\u0026 frontMedia.length === 1) frontOwn = frontMedia[0].src || (frontMedia[0].preview_image \u0026\u0026 frontMedia[0].preview_image.src);\n      var front = own || (frontOwn ? imgUrl(frontOwn) : imgUrl(src));\n      variants[String(v.id)] = { img: front, back: back ? imgUrl(back) : front, title: v.title };\n    });\n    checkVariant();\n  });\n\n  function getInput() {\n    return (window.jmGravurFeld \u0026\u0026 window.jmGravurFeld('Vorderseite', 1)) ||\n           form.querySelector('.gravurText, input[type=\"text\"][name*=\"ravur\"]');\n  }\n  \/* Rückseite (Zeile 1) im Produktformular *\/\n  function getBackInput() {\n    return window.jmGravurFeld ? window.jmGravurFeld('Rückseite', 1)\n      : form.querySelector('#gravur_Rückseite_1, #gravurtext_rueckseite, #gravurtext_rückseite, input[data-gravur-seite=\"Rückseite\"]');\n  }\n  var ZEILEN = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n\n  function getFont(input) {\n    var f = form.querySelector('#gravur_schriftart_input, input[name*=\"Schriftart\"], select[name*=\"Schriftart\"]');\n    if (f \u0026\u0026 f.value) return f.value;\n    return input ? getComputedStyle(input).fontFamily : 'Playfair Display';\n  }\n\n  \/* Zeilen 1–3 einer Seite (Zeile 1 = Feld der Seite, 2 + 3 per ID) *\/\n  function sideLines(seite, first) {\n    var l = [first ? first.value : ''];\n    for (var n = 2; n \u003c= 3; n++) {\n      var f = n \u003c= ZEILEN \u0026\u0026 window.jmGravurFeld ? window.jmGravurFeld(seite, n) : null;\n      l.push(f ? f.value : '');\n    }\n    return l.map(function (v) { return v.trim(); });\n  }\n  function restOf(l) { return l[2] ? (l[1] + '\\n' + l[2]) : l[1]; }\n\n  function updateText() {\n    var input = getInput();\n    var fl    = sideLines('Vorderseite', input);\n    if (lvSample \u0026\u0026 !fl.join('')) fl = ['A + M', 'Für immer', '12.06.24'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var val   = fl.join('');\n    var font  = getFont(input);\n    var bl    = sideLines('Rückseite', getBackInput());\n    if (lvSample \u0026\u0026 !bl.join('')) bl = ['♥', 'In Liebe', '2024'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var bVal  = bl.join('');\n    texts.forEach(function (t) {\n      t.textContent = fl[0] || (val ? '\\u00A0' : 'Deine Gravur');\n      t.setAttribute('data-rest', val ? restOf(fl) : '');\n      t.classList.toggle('is-empty', !val);\n      t.style.fontFamily = font + ', serif';\n    });\n    backTexts.forEach(function (t) {\n      t.textContent = bl[0] || (bVal ? '\\u00A0' : '');\n      t.setAttribute('data-rest', bVal ? restOf(bl) : '');\n      t.style.fontFamily = font + ', serif';\n    });\n    \/* Vorderseite zeigen, wenn befüllt oder keine Rückseite – Rückseite nur wenn befüllt *\/\n    \/* Beide Seiten befüllt: zuletzt bearbeitete Seite groß zeigen (Tweak: gewählte Seite) *\/\n    var fKey = fl.join('|'), bKey = bl.join('|');\n    if (bKey !== lastBKey \u0026\u0026 bVal) mSide = 'back';\n    if (fKey !== lastFKey \u0026\u0026 val)  mSide = 'front';\n    lastFKey = fKey; lastBKey = bKey;\n    if (tweakActive) mSide = tweakSide;\n    [desktop, mobile].forEach(function (panel) {\n      var f = panel.querySelector('.jm-lv-side[data-side=\"front\"]');\n      var b = panel.querySelector('.jm-lv-side[data-side=\"back\"]');\n      var both = (!!val || tweakSide === 'back') \u0026\u0026 (!!bVal || tweakSide === 'back');\n      var fOn = !!val || !bVal, bOn = !!bVal || tweakSide === 'back';\n      if (both) { fOn = mSide === 'front'; bOn = mSide === 'back'; }\n      if (f) f.classList.toggle('on', fOn);\n      if (b) b.classList.toggle('on', bOn);\n      panel.classList.toggle('jm-lv-both', both);\n    });\n    document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n      t.classList.toggle('active', t.dataset.side === mSide);\n    });\n  }\n  var tweakSide = 'front';\n  var lvSample = false;   \/* Tweak: Beispieltext mit 3 Zeilen *\/\n  var mSide = 'front', lastFKey = '', lastBKey = '', tweakActive = false;\n  \/* Umschalter Vorderseite \/ Rückseite (Desktop + Mobile) *\/\n  document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n    t.addEventListener('click', function (e) {\n      e.preventDefault(); e.stopPropagation();\n      mSide = t.dataset.side;\n      if (tweakActive) { tweakSide = mSide; var sel = document.getElementById('jm-lv-side'); if (sel) { sel.value = mSide; sel.dispatchEvent(new Event('change')); } }\n      updateText();\n    });\n  });\n\n  function show() {\n    updateText();\n    if (window.innerWidth \u003e 768) desktop.classList.add('show');\n    else mobile.classList.add('show');\n  }\n\n  \/* X schließt nur das Panel *\/\n  document.querySelectorAll('.jm-lv-close').forEach(function (btn) {\n    btn.addEventListener('click', function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      btn.parentElement.classList.remove('show');\n    });\n  });\n\n  \/* Tippen → öffnen *\/\n  function isGravurField(el) {\n    if (!el) return false;\n    if (el === getInput() || el === getBackInput()) return true;\n    for (var n = 2; n \u003c= ZEILEN; n++) {\n      if (window.jmGravurFeld \u0026\u0026 (el === window.jmGravurFeld('Vorderseite', n) || el === window.jmGravurFeld('Rückseite', n))) return true;\n    }\n    return !!(el.id \u0026\u0026 \/^gravur_(Vorderseite|Rückseite)_[123]$\/.test(el.id));\n  }\n  form.addEventListener('input', function (e) {\n    if (isGravurField(e.target)) show();\n  });\n\n  \/* Schriftart → öffnen *\/\n  form.addEventListener('click', function (e) {\n    if (e.target.closest('.font-btn')) setTimeout(show, 60);\n  });\n  form.addEventListener('change', function (e) {\n    if (e.target.name \u0026\u0026 e.target.name.indexOf('Schriftart') \u003e -1) show();\n  });\n\n  \/* Symbole → wie Buchstaben einfügen + öffnen *\/\n  var SYM_SEL = '.symbol-btn, .symbol-btn-2, .symbol-button';\n  var valBefore = null;\n\n  \/* Zu welchem Feld gehört der Symbol-Button? (nächstes Gravurfeld im selben Block) *\/\n  function inputForSymbol(btn) {\n    var el = btn.parentElement;\n    while (el \u0026\u0026 el !== form) {\n      var i = el.querySelector('input[type=\"text\"][name*=\"ravur\"], .gravurText');\n      if (i) return i;\n      el = el.parentElement;\n    }\n    return getInput();\n  }\n\n  function isFormSymbol(el) {\n    var btn = el.closest(SYM_SEL);\n    if (!btn || btn.closest('#engraving-preview')) return null; \/* Vorschau-Block in der Beschreibung ignorieren *\/\n    return btn;\n  }\n\n  function shake(input) {\n    input.classList.remove('jm-lv-shake', 'jm-shake');\n    void input.offsetWidth;\n    input.classList.add('jm-lv-shake', 'jm-shake');\n  }\n\n  document.addEventListener('pointerdown', function (e) {\n    var b = isFormSymbol(e.target);\n    var input = b ? inputForSymbol(b) : null;\n    if (input) valBefore = input.value;\n  }, true);\n\n  document.addEventListener('click', function (e) {\n    var btn = isFormSymbol(e.target);\n    var input = btn ? inputForSymbol(btn) : null;\n    if (!btn || !input) return;\n    e.preventDefault();\n    var before = valBefore;\n    valBefore = null;\n    setTimeout(function () {\n      \/* Hat das Gravur-Snippet das Symbol schon eingefügt? Dann nur anzeigen. *\/\n      if (before === null || input.value !== before) { show(); return; }\n      var sym = (btn.dataset.symbol || btn.textContent).trim();\n      var max = input.maxLength \u003e 0 ? input.maxLength : Infinity;\n      if (input.value.length + sym.length \u003e max) { shake(input); show(); return; }\n      input.value += sym;\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      show();\n    }, 40);\n  });\n\n  \/* Jede Wertänderung (auch per Script eingefügt) → Vorschau öffnen *\/\n  function bothVals() {\n    return sideLines('Vorderseite', getInput()).join('|') + '||' + sideLines('Rückseite', getBackInput()).join('|');\n  }\n  var lastVal = bothVals();\n  setInterval(function () {\n    var now = bothVals();\n    if (now !== lastVal) { lastVal = now; show(); }\n  }, 200);\n\n  \/* ── Farbe \/ Variante → Bild wechseln ── *\/\n  function setBackImage(url) {\n    backImgs.forEach(function (img) { if (url) img.src = url; });\n  }\n\n  function setImage(url) {\n    var pre = new Image();\n    pre.onload = function () {\n      imgs.forEach(function (img) {\n        if (!img.getAttribute('src')) { img.src = url; return; }\n        img.style.opacity = 0;\n        setTimeout(function () { img.src = url; img.style.opacity = 1; }, 150);\n      });\n    };\n    pre.src = url;\n  }\n\n  var onVariant = null;\n\n  function checkVariant() {\n    var idField = form.querySelector('[name=\"id\"]');\n    var id = idField ? String(idField.value) : null;\n    if (!id || id === currentId || !variants[id]) return;\n    currentId = id;\n    \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n    var slug = variants[id].title.replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, ' ').toLowerCase()\n      .replace(\/ä\/g, 'ae').replace(\/ö\/g, 'oe').replace(\/ü\/g, 'ue').replace(\/ß\/g, 'ss')\n      .replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '');\n    desktop.dataset.variant = slug;\n    mobile.dataset.variant  = slug;\n    setImage(variants[id].img);\n    setBackImage(variants[id].back);\n    colors.forEach(function (c) { c.textContent = variants[id].title; });\n    if (onVariant) onVariant();\n  }\n\n  form.addEventListener('change', function () { setTimeout(checkVariant, 50); });\n  form.addEventListener('click',  function () { setTimeout(checkVariant, 80); });\n  setInterval(checkVariant, 400);\n  updateText();\n\n  \/* ── Tweak-Panel: URL mit ?jmtweak=1 aufrufen ── *\/\n  if (location.search.indexOf('jmtweak') === -1) return;\n\n  var ranges = { x: [0, 100, 0.5], y: [0, 100, 0.5], rot: [-90, 90, 1], size: [2, 20, 0.25],\n                 tx: [-150, 50, 1], ty: [-400, 100, 1],\n                 lh: [0.6, 2.5, 0.05], gap: [-1.5, 2, 0.05], ls: [-0.1, 0.5, 0.01], rdx: [-3, 3, 0.05], op: [0.2, 1, 0.05],\n                 arc: [-1.5, 1.5, 0.01], l: [0, 100, 1], sh: [0, 1, 0.05],\n                 zoom: [0.5, 3, 0.01], px: [-50, 50, 0.5], py: [-50, 50, 0.5] };\n  var names  = { x: 'Horizontal %', y: 'Vertikal %', rot: 'Drehung °', size: 'Größe',\n                 tx: 'Anker horizontal %', ty: 'Anker vertikal %',\n                 lh: 'Zeilenabstand (Z. 2+3)', gap: 'Abstand Zeile 1 → 2', ls: 'Zeichenabstand', rdx: 'Versatz Z. 2+3 seitlich', op: 'Deckkraft',\n                 arc: 'Wölbung (− ∪ \/ + ∩)', l: 'Schrift hell ↔ dunkel %', sh: 'Gravur-Schatten',\n                 zoom: 'Bild-Zoom ×', px: 'Bild horizontal %', py: 'Bild vertikal %' };\n  \/* Variable, Einheit, Standardwert *\/\n  var PROPS  = { x: ['--lv-x', '%', 50], y: ['--lv-y', '%', 50], rot: ['--lv-rot', 'deg', 0], size: ['--lv-size', '', 5],\n                 tx: ['--lv-tx', '%', -50], ty: ['--lv-ty', '%', -190],\n                 lh: ['--lv-lh', '', 1.15], gap: ['--lv-gap', 'em', 0], ls: ['--lv-ls', 'em', 0.06], rdx: ['--lv-rdx', 'em', 0], op: ['--lv-op', '', 1],\n                 arc: ['--lv-arc', 'em', 0], l: ['--lv-l', '%', 80], sh: ['--lv-sh', '', 0.6],\n                 zoom: ['--lv-zoom', '', 1], px: ['--lv-px', '%', 0], py: ['--lv-py', '%', 0] };\n  var vals   = {};\n  \/* Gravur-Studio unten: eigene Variablen (ohne Anker) *\/\n  var PROPS_ST = { x: ['--st-x', '%', 50], y: ['--st-y', '%', 50], rot: ['--st-rot', 'deg', 0], size: ['--st-size', '', 8],\n                   lh: ['--st-lh', '', 1.15], gap: ['--st-gap', 'em', 0], ls: ['--st-ls', 'em', 0.08], rdx: ['--st-rdx', 'em', 0], op: ['--st-op', '', 1],\n                   arc: ['--st-arc', 'em', 0], l: ['--st-l', '%', 73], sh: ['--st-sh', '', 0.6],\n                   zoom: ['--st-zoom', '', 1], px: ['--st-px', '%', 0], py: ['--st-py', '%', 0] };\n  var area = 'top';   \/* top | studio | studiopop *\/\n  function curProps() { return area === 'top' ? PROPS : PROPS_ST; }\n  function studioTarget() {\n    var st = window.jmGkStudio;\n    if (!st) return null;\n    return area === 'studiopop' ? st.popupBox : st.studioBox;\n  }\n  function tTargets() {\n    if (area === 'top') return Array.prototype.slice.call(sideStages());\n    var t = studioTarget();\n    return t ? [t] : [];\n  }\n\n  function activePanel() { return window.innerWidth \u003e 768 ? desktop : mobile; }\n\n  \/* Stages der gewählten Seite (Vorderseite \/ Rückseite) *\/\n  var SIDE_SEL = { front: '.jm-lv-stage:not(.jm-lv-stage--back)', back: '.jm-lv-stage--back' };\n  function sideStages() { return document.querySelectorAll(SIDE_SEL[tweakSide]); }\n\n  function readVals() {\n    if (area !== 'top') {\n      var st = window.jmGkStudio, tg = studioTarget();\n      if (st \u0026\u0026 st.side() !== tweakSide) st.setSide(tweakSide);\n      if (st) st.mark();\n      if (tg) {\n        Object.keys(PROPS_ST).forEach(function (k) { tg.style.removeProperty(PROPS_ST[k][0]); });\n        if (st) st.mark();\n        var cst = getComputedStyle(tg);\n        Object.keys(PROPS_ST).forEach(function (k) {\n          var v = parseFloat(cst.getPropertyValue(PROPS_ST[k][0]));\n          vals[k] = isNaN(v) ? PROPS_ST[k][2] : v;\n        });\n      }\n      return;\n    }\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.removeProperty(PROPS[k][0]); });\n    });\n    var cs = getComputedStyle(activePanel().querySelector(SIDE_SEL[tweakSide]));\n    \/* Anker-Standard je Ansicht (Desktop: -50 \/ -190 · Mobile: -9 \/ -239 bzw. 0 \/ -239) *\/\n    var mob = activePanel() === mobile;\n    var hasVar = \/translate\\(-9%\/.test(getComputedStyle(activePanel().querySelector('.jm-lv-text')).transform) || !!activePanel().dataset.variant;\n    PROPS.tx[2] = mob ? (hasVar ? -9 : 0) : -50;\n    PROPS.ty[2] = mob ? -239 : -190;\n    Object.keys(PROPS).forEach(function (k) {\n      var v = parseFloat(cs.getPropertyValue(PROPS[k][0]));\n      vals[k] = isNaN(v) ? PROPS[k][2] : v;\n    });\n  }\n  readVals();\n\n  var tw = document.createElement('div');\n  tw.id = 'jm-lv-tweak';\n  tweakActive = true;\n  var html = '\u003cstrong style=\"color:#c9a84c;display:flex;justify-content:space-between;align-items:center\"\u003e⠿ Gravur-Position · \u003cspan id=\"jm-lv-view\"\u003e\u003c\/span\u003e'\n           + '\u003cbutton type=\"button\" id=\"jm-lv-min\" title=\"einklappen\" style=\"width:auto;margin:0;padding:2px 10px;background:#333;color:#eee\"\u003e–\u003c\/button\u003e\u003c\/strong\u003e'\n           + '\u003cselect id=\"jm-lv-area\"\u003e\u003coption value=\"top\"\u003eBereich: Live-Vorschau oben\u003c\/option\u003e'\n           + '\u003coption value=\"studio\"\u003eBereich: Gravur-Studio (Bild)\u003c\/option\u003e'\n           + '\u003coption value=\"studiopop\"\u003eBereich: Gravur-Studio Mobile-Popup\u003c\/option\u003e\u003c\/select\u003e'\n           + '\u003cselect id=\"jm-lv-side\"\u003e\u003coption value=\"front\"\u003eVorderseite\u003c\/option\u003e\u003coption value=\"back\"\u003eRückseite\u003c\/option\u003e\u003c\/select\u003e';\n  Object.keys(vals).forEach(function (k) {\n    if (k === 'tx') html += '\u003cdiv data-row=\"tx\" style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eAnker (Feinposition des Textblocks)\u003c\/div\u003e';\n    if (k === 'lh') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eZeilen \u0026amp; Schrift\u003c\/div\u003e';\n    if (k === 'arc') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eWölbung \u0026amp; Lesbarkeit\u003c\/div\u003e';\n    if (k === 'zoom') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eBild-Zoom \u0026amp; Ausschnitt\u003c\/div\u003e';\n    html += '\u003cdiv data-row=\"' + k + '\"\u003e\u003clabel\u003e' + names[k] + ' \u003cspan id=\"jm-lv-v-' + k + '\"\u003e' + vals[k] + '\u003c\/span\u003e\u003c\/label\u003e' +\n            '\u003cinput type=\"range\" data-k=\"' + k + '\" min=\"' + ranges[k][0] + '\" max=\"' + ranges[k][1] +\n            '\" step=\"' + ranges[k][2] + '\" value=\"' + vals[k] + '\"\u003e\u003c\/div\u003e';\n  });\n  html += '\u003cbutton type=\"button\" id=\"jm-lv-sample\" style=\"background:#333;color:#eee\"\u003eBeispieltext: aus\u003c\/button\u003e'\n        + '\u003cbutton type=\"button\" id=\"jm-lv-reset\" style=\"background:#333;color:#eee\"\u003eSeite zurücksetzen\u003c\/button\u003e'\n        + '\u003ccode id=\"jm-lv-out\"\u003e\u003c\/code\u003e\u003cbutton type=\"button\" id=\"jm-lv-copy\"\u003eWerte kopieren\u003c\/button\u003e';\n  tw.innerHTML = html;\n  document.body.appendChild(tw);\n\n  function apply() {\n    if (area !== 'top') return applyStudio();\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.setProperty(PROPS[k][0], vals[k] + PROPS[k][1]); });\n    });\n    var panel = activePanel();\n    \/* Ausgabe: Position immer, Feinjustierung nur wenn vom Standard abweichend *\/\n    var lines = Object.keys(PROPS).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS[k][2];\n    }).map(function (k) { return '  ' + PROPS[k][0] + ': ' + vals[k] + PROPS[k][1] + ';'; });\n    var rule = '#' + panel.id + '[data-variant=\"' + (panel.dataset.variant || '') + '\"] .jm-lv-stage' + (tweakSide === 'back' ? '.jm-lv-stage--back' : '') + ' {\\n' +\n      lines.join('\\n') + '\\n}';\n    document.getElementById('jm-lv-out').textContent = panel === mobile\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Gravur-Studio: Werte anwenden + CSS-Regel ausgeben *\/\n  function applyStudio() {\n    var tg = studioTarget(), st = window.jmGkStudio;\n    if (!tg) { document.getElementById('jm-lv-out').textContent = '⚠ Bereich nicht gefunden'; return; }\n    Object.keys(PROPS_ST).forEach(function (k) { tg.style.setProperty(PROPS_ST[k][0], vals[k] + PROPS_ST[k][1]); });\n    tg.classList.add('jm-st-pos');\n    \/* Beispieltext im Studio, solange die Seite leer ist *\/\n    if (lvSample \u0026\u0026 st \u0026\u0026 !window.jmGkSides.has(tweakSide)) {\n      tg.querySelectorAll('#engravingPreviewText, .popup-preview-text').forEach(function (el) {\n        el.textContent = 'A + M';\n        el.setAttribute('data-rest', ZEILEN \u003e= 3 ? 'Für immer\\n12.06.24' : (ZEILEN === 2 ? 'Für immer' : ''));\n      });\n      var ov = tg.querySelector('.engraving-overlay');\n      if (ov) ov.classList.add('active');\n    }\n    if (area === 'studiopop') {\n      var pop = document.getElementById('engraving-mobile-popup');\n      if (pop) setTimeout(function () { pop.classList.add('show'); }, 30);\n    }\n    var lines = Object.keys(PROPS_ST).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS_ST[k][2];\n    }).map(function (k) { return '  ' + PROPS_ST[k][0] + ': ' + vals[k] + PROPS_ST[k][1] + ';'; });\n    var sel = (area === 'studiopop' ? '#engraving-mobile-popup .popup-preview' : '.engraving-preview-image')\n            + '[data-variant=\"' + (tg.dataset.variant || '') + '\"][data-side=\"' + tweakSide + '\"]';\n    var rule = sel + ' {\\n' + lines.join('\\n') + '\\n}';\n    \/* Mobile-Werte nur für Mobile, Desktop-Werte gelten als Basis für alle Größen *\/\n    document.getElementById('jm-lv-out').textContent = (area === 'studiopop' || activePanel() === mobile)\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Bereich wechseln: Regler-Zeilen anpassen, Bereich sichtbar machen *\/\n  function syncRows() {\n    ['tx', 'ty'].forEach(function (k) {\n      tw.querySelectorAll('[data-row=\"' + k + '\"]').forEach(function (r) { r.style.display = area === 'top' ? '' : 'none'; });\n    });\n    var opt = tw.querySelector('#jm-lv-area option[value=\"studiopop\"]');\n    if (opt) opt.disabled = activePanel() !== mobile;\n  }\n  function focusArea() {\n    if (area === 'top') { show(); return; }\n    desktop.classList.remove('show'); mobile.classList.remove('show');\n    \/* Gravur-Studio liegt in Schritt 2 des Konfigurators → Schritt öffnen *\/\n    if (window.jmCfg \u0026\u0026 window.jmCfg.step() !== 2) window.jmCfg.go(2, false);\n    var tg = studioTarget();\n    if (area === 'studio' \u0026\u0026 tg) tg.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    if (area === 'studiopop') {\n      var sec = document.getElementById('engraving-preview');\n      if (sec) sec.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  function viewLabel() {\n    var v = document.getElementById('jm-lv-view');\n    if (v) v.textContent = activePanel() === mobile ? 'Mobile' : 'Desktop';\n  }\n  \/* Ansicht gewechselt (Fenster schmaler\/breiter, Handy gedreht) → Werte der neuen Ansicht laden *\/\n  var lastView = activePanel();\n  window.addEventListener('resize', function () {\n    if (activePanel() !== lastView) { lastView = activePanel(); onVariant(); show(); }\n  });\n\n  \/* Variante gewechselt → Regler auf die Werte dieser Variante setzen *\/\n  onVariant = function () {\n    viewLabel();\n    syncRows();\n    readVals();\n    Object.keys(vals).forEach(function (k) {\n      tw.querySelector('[data-k=\"' + k + '\"]').value = vals[k];\n      document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    });\n    apply();\n  };\n\n  \/* Seite wechseln → Regler auf die Werte dieser Seite setzen, Rückseite sichtbar machen *\/\n  document.getElementById('jm-lv-side').addEventListener('change', function () {\n    tweakSide = this.value;\n    onVariant();\n    if (area === 'top') show(); else focusArea();\n  });\n  document.getElementById('jm-lv-area').addEventListener('change', function () {\n    area = this.value;\n    onVariant();\n    focusArea();\n  });\n\n  tw.addEventListener('input', function (e) {\n    var k = e.target.dataset.k;\n    if (!k) return;\n    vals[k] = parseFloat(e.target.value);\n    document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    apply();\n    if (window.jmArcRefresh) setTimeout(window.jmArcRefresh, 0);\n    if (area === 'top') show();\n  });\n\n  \/* Beispieltext: zeigt 3 Zeilen auf beiden Seiten (nur Vorschau, Formular bleibt leer) *\/\n  document.getElementById('jm-lv-sample').addEventListener('click', function () {\n    lvSample = !lvSample;\n    this.textContent = 'Beispieltext: ' + (lvSample ? 'an' : 'aus');\n    if (area === 'top') show();\n    else { if (!lvSample \u0026\u0026 window.jmGkStudio) window.jmGkStudio.render(false); apply(); }\n  });\n  \/* Zurücksetzen: Live-Werte der gewählten Seite verwerfen → Werte aus dem CSS *\/\n  document.getElementById('jm-lv-reset').addEventListener('click', function () {\n    onVariant();\n    if (area === 'top') show();\n  });\n\n  document.getElementById('jm-lv-copy').addEventListener('click', function () {\n    if (navigator.clipboard) navigator.clipboard.writeText(document.getElementById('jm-lv-out').textContent);\n    var b = this; b.textContent = 'Kopiert ✓';\n    setTimeout(function () { b.textContent = 'Werte kopieren'; }, 1500);\n  });\n\n  \/* Draggable ohne Sprung *\/\n  var drag = false, ox = 0, oy = 0;\n  \/* Touch (Mobile): über die Überschrift verschieben *\/\n  var head = tw.querySelector('strong');\n  \/* Einklappen: nur die Kopfzeile bleibt sichtbar → Vorschau frei *\/\n  document.getElementById('jm-lv-min').addEventListener('click', function (e) {\n    e.stopPropagation();\n    var min = tw.classList.toggle('jm-lv-min');\n    Array.prototype.forEach.call(tw.children, function (c) { if (c !== head) c.style.display = min ? 'none' : ''; });\n    if (!min) syncRows();\n    this.textContent = min ? '+' : '–';\n  });\n  head.addEventListener('touchstart', function (e) {\n    if (e.target.closest \u0026\u0026 e.target.closest('button')) return;\n    var t = e.touches[0], r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = t.clientX - r.left; oy = t.clientY - r.top;\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchmove', function (e) {\n    if (!drag) return;\n    var t = e.touches[0];\n    tw.style.left = Math.min(Math.max(t.clientX - ox, 0), window.innerWidth - 60) + 'px';\n    tw.style.top  = Math.min(Math.max(t.clientY - oy, 0), window.innerHeight - 40) + 'px';\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchend', function () { drag = false; });\n\n  tw.addEventListener('mousedown', function (e) {\n    if (['INPUT', 'BUTTON', 'CODE', 'SELECT', 'OPTION'].indexOf(e.target.tagName) \u003e -1) return;\n    var r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = e.clientX - r.left; oy = e.clientY - r.top;\n    e.preventDefault();\n  });\n  document.addEventListener('mousemove', function (e) {\n    if (!drag) return;\n    tw.style.left = (e.clientX - ox) + 'px';\n    tw.style.top  = (e.clientY - oy) + 'px';\n  });\n  document.addEventListener('mouseup', function () { drag = false; });\n\n  apply();\n  show();\n});\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"rot","offer_id":44634157613321,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true},{"title":"schwarz","offer_id":44634157646089,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Gravur_armband_81993b0c-004c-4146-8db1-a46cb99d6073.png?v=1696436243"},{"product_id":"kugel-lederband-mit-gravur-platte-edelstahl-in-verschiedenen-farben","title":"Kugel-Lederband mit Gravur-Platte (Edelstahl) in verschiedenen Farben inkl. kostenlose Gravur","description":"\u003c!-- Fügen Sie diese Zeilen im Head-Bereich Ihrer Seite \/collections\/3d-gravur hinzu, um Font Awesome Icons und jQuery zu laden --\u003e \u003c!-- jQuery --\u003e\u003cscript type=\"text\/javascript\" src=\"{{'jquery-3.7.1.min.js'|asset_url}}\"\u003e\u003c\/script\u003e\n\u003cstyle\u003e\u003c!--\n.accordion-toggle:hover {\n      text-decoration: none;\n    } \n    \n    .container{\n        \n        margin-top:50px;\n    }\n    \n  \n  .panel-default\u003e.panel-heading {\n    color: #fff;\n    font-weight:bold;\n    background-color: #1d3838;\n    border-color: #b6a573;\n}  \n  accordion-toggle {\n     \n    font-size: 22px; \/* Passen Sie die Schriftgröße nach Bedarf an *\/\n  }\n\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n\n  .container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\npadding-bottom:10px;\n}\n    .container-fluid-mobile {\n  @media (max-width: 567px) {\n    margin: -50px;\n  }\n  \n}\n--\u003e\u003c\/style\u003e\n\u003ch3 style=\"text-align: left;\" class=\"\" data-mce-style=\"text-align: left;\" data-mce-fragment=\"1\"\u003e\u003cstrong\u003ePersönliche Momente verewigen mit einer Diamant-Gravur \/ Lasergravur\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cdiv style=\"text-align: left;\" class=\"\" data-mce-style=\"text-align: left;\" data-mce-fragment=\"1\"\u003eErfassen Sie zeitlose Eleganz und persönlichen Stil mit unserem exklusiven handgefertigten Lederarmband – eine kunstvolle Kreation, veredelt durch eine einzigartige Diamant-Gravur oder Lasergravur. Perfekt für diejenigen, die ihre persönlichen Momente auf besondere Weise verewigen möchten.\u003cbr\u003e\u003cbr\u003eUnser Naturstein Kugel Armband mit Leder und Gravurplatte ist nicht nur Schmuck, sondern ein Ausdruck Ihrer Persönlichkeit und eine zeitlose Erinnerung an bedeutungsvolle Lebensmomente. Tragen Sie Ihre Geschichte stolz und machen Sie dieses Accessoire zu Ihrem täglichen Begleiter.\u003c\/div\u003e\n\u003cdiv class=\"hidden-xs\" style=\"text-align: left;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Aktuelle_Trends_breites_Sortiment_94c8ae86-3144-4e38-b6d8-0608c158efa1_1024x1024.png?v=1699195870\" alt=\"\" style=\"margin-top: 20px; margin-bottom: 16px; float: none;\" data-mce-fragment=\"1\" data-mce-style=\"margin-top: 20px; margin-bottom: 16px; float: none;\" data-mce-src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Aktuelle_Trends_breites_Sortiment_94c8ae86-3144-4e38-b6d8-0608c158efa1_1024x1024.png?v=1699195870\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"visible-xs\" style=\"text-align: center;\" data-mce-style=\"text-align: center;\" data-mce-fragment=\"1\"\u003e\u003cimg style=\"margin-top: 20px;margin-bottom: 70px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_1024x1024.png?v=1700605460\" data-mce-style=\"margin-bottom: 70px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"container-fluid container-fluid-mobile\"\u003e\n\u003cdiv class=\"panel-group\" id=\"accordion\"\u003e\n\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseOne\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px; text-align: left;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseOne\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Produkt Details\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseOne\" class=\"panel-collapse collapse in\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv class=\"scrollable-wrapper\" style=\"border-radius: 10px;\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ctable class=\"elegant-table\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eEigenschaften\u003c\/th\u003e\n\u003cth\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTyp\u003c\/td\u003e\n\u003ctd\u003eNaturstein Kugel Armbänder mit Leder und Gravurplatte\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMaterial\u003c\/td\u003e\n\u003ctd\u003eEdelstahl Natürliche Stein, Legierung, Schwarz\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGeschlecht\u003c\/td\u003e\n\u003ctd\u003eMänner\/Frauen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFarbe\u003c\/td\u003e\n\u003ctd\u003eschwarzes Lederarmband mit Platte ( blau, silber, schwarz, Gold)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eStil\u003c\/td\u003e\n\u003ctd\u003eModisch\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGewicht \u003c\/td\u003e\n\u003ctd\u003e30 g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eArmbandbreite\u003c\/td\u003e\n\u003ctd\u003e10 mm \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eArmbandlänge\u003c\/td\u003e\n\u003ctd\u003e21cm \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eAnzahl Kugeln\u003c\/td\u003e\n\u003ctd\u003e33 Kugeln \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePlattenbreite \u003c\/td\u003e\n\u003ctd\u003e4,1 cm\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\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseTwo\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseTwo\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Hinweise zur Nutzung \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseTwo\" class=\"panel-collapse collapse in\"\u003e\n\u003cdiv class=\"panel-body\"\u003eBitte beachten Sie, dass Sie das Armband vor direktem Kontakt mit chemischen Substanzen schützen sollten. Vermeiden Sie auch den Kontakt mit heißem Wasser und tragen Sie das Armband nicht während des Schlafens. Alle Armbänder sind von Hand gemessen, es kann zu einer Abweichung von +\/- 1 cm kommen.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel panel-default\" style=\"text-align: left;\" data-mce-style=\"text-align: left;\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseThree\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px; text-align: left;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseThree\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Deine Vision. Unser Handwerk \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseThree\" class=\"panel-collapse collapse\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv class=\"hidden-xs\" style=\"text-align: center;\" data-mce-style=\"text-align: center;\" data-mce-fragment=\"1\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre_1024x1024.png?v=1700729985\" data-mce-style=\"margin-bottom: 10px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"visible-xs\" style=\"text-align: center;\" data-mce-style=\"text-align: center;\" data-mce-fragment=\"1\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre.png?v=1700729985\" data-mce-style=\"margin-bottom: 10px; float: none;\"\u003e\u003c\/div\u003e\n\u003cstrong\u003eKein Dropshipping, bei uns wird Handarbeit großgeschrieben\u003c\/strong\u003e – mit Leidenschaft und Hingabe. \u003cstrong\u003e...Excellence in Praxis. Since the beginning! \u003c\/strong\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-body\"\u003eMit stolzen\u003cstrong\u003e 33 Jahren Branchenerfahrung\u003c\/strong\u003e sind wir ein \u003cstrong\u003eFamilienunternehmen\u003c\/strong\u003e, das fest auf den Werten \u003cstrong\u003eVertrauen, Fairness, Ehrlichkeit, Loyalität\u003c\/strong\u003e und \u003cstrong\u003ePremium\u003c\/strong\u003e in Dienstleistung und Produkten basiert. Wir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich mit Hingabe und Sorgfalt veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\/\/ \u003c![CDATA[\n$(document).ready(function(){\n    \n   $('.collapse').on('shown.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-plus\").removeClass(\"glyphicon-plus\").addClass(\"glyphicon-minus\");\n}).on('hidden.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-minus\").removeClass(\"glyphicon-minus\").addClass(\"glyphicon-plus\");\n}); \n    \n});\n\/\/ ]]\u003e\u003c\/script\u003e","brand":"Juwelier Milano","offers":[{"title":"Schwarzmatt-silber","offer_id":44763318747401,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarzmatt-vergoldet","offer_id":44763318845705,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarzmatt-schwarz","offer_id":44766682120457,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarzmatt-blau","offer_id":44766683562249,"sku":"","price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/C816098A-9366-4F4C-BD98-3DF55391751A.jpg?v=1700592959"},{"product_id":"kugel-lederband-mit-kreuz-edelstahl","title":"Kugel-Lederband in schwarz mit silbernem Kreuz (Edelstahl) inkl. Gratis Gravur","description":"\u003cdiv style=\"text-align: center;\"\u003e\u003c\/div\u003e\n\u003cp\u003e\u003c!-- Fügen Sie diese Zeilen im Head-Bereich Ihrer Seite \/collections\/3d-gravur hinzu, um Font Awesome Icons und jQuery zu laden --\u003e \u003c!-- jQuery --\u003e\u003cscript src=\"{{'jquery-3.7.1.min.js'|asset_url}}\" type=\"text\/javascript\"\u003e\u003c\/script\u003e\u003c\/p\u003e\n\u003cstyle\u003e\u003c!--\n.accordion-toggle:hover {\n      text-decoration: none;\n    } \n    \n    .container{\n        \n        margin-top:50px;\n    }\n    \n  \n  .panel-default\u003e.panel-heading {\n    color: #fff;\n    font-weight:bold;\n    background-color: #1d3838;\n    border-color: #b6a573;\n}  \n  accordion-toggle {\n     \n    font-size: 22px; \/* Passen Sie die Schriftgröße nach Bedarf an *\/\n  }\n\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n\n  .container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\npadding-bottom:10px;\n}\n    .container-fluid-mobile {\n  @media (max-width: 567px) {\n    margin: -50px;\n  }\n--\u003e\u003c\/style\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\u003cimg style=\"margin-bottom: 16px; float: none;\" alt=\"Neues Lederarmband mit Natursteine und Kreuz + Gratis Gravur\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Produkt_Kugelband_kreuz_dfb2e109-d71f-4c5e-b361-1c62bd8949fe_600x600.png?v=1701000057\"\u003e\u003c\/div\u003e\n\u003ch3\u003e\n\u003cstrong\u003ePersönliche Momente verewigen mit einer Diamant-Gravur \/ Lasergravur\u003c\/strong\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\n\u003c\/h3\u003e\n\u003cp\u003eEntdecken Sie die kraftvolle Verbindung von Stil und Spiritualität mit unserem Vulkankugel-Lederband in Schwarz, verziert mit einem silbernen Kreuz aus Edelstahl. Dieses handgefertigte Accessoire bietet nicht nur eine ansprechende Ästhetik, sondern auch eine kostenlose Gravur, um es persönlich und einzigartig zu gestalten.\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003eDieses Vulkankugel-Lederband ist nicht nur ein Schmuckstück, sondern auch eine Ausdruck von Stil und Spiritualität. Tragen Sie es mit Stolz und genießen Sie die symbolische Bedeutung, die es in Ihre persönliche Geschichte einbringt.\u003c\/p\u003e\n\u003cdiv style=\"text-align: center;\"\u003e\u003cimg style=\"float: none;\" alt=\"Produkteigenschaften\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_0b93d92d-047c-4a13-9d84-ec62479f7454_480x480.png?v=1700998153\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"text-align: center;\" class=\"hidden-xs\" data-mce-fragment=\"1\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Aktuelle_Trends_breites_Sortiment_94c8ae86-3144-4e38-b6d8-0608c158efa1_1024x1024.png?v=1699195870\" style=\"margin-top: 20px; margin-bottom: 16px; float: none;\" data-mce-fragment=\"1\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"text-align: center;\" class=\"visible-xs\" data-mce-fragment=\"1\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_1024x1024.png?v=1700605460\" style=\"margin-top: 20px; margin-bottom: 70px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"container-fluid container-fluid-mobile\"\u003e\n\u003cdiv id=\"accordion\" class=\"panel-group\"\u003e\n\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv style=\"cursor: pointer;\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseOne\" class=\"panel-heading\"\u003e\n\u003ch2 class=\"panel-title\" style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan class=\"glyphicon glyphicon-minus\" style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan href=\"#collapseOne\" data-parent=\"#accordion\" data-toggle=\"collapse\" class=\"accordion-toggle\" style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Produkt Details\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-collapse collapse in\" id=\"collapseOne\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\n\u003ctable class=\"elegant-table\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eEigenschaften\u003c\/th\u003e\n\u003cth\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTyp\u003c\/td\u003e\n\u003ctd\u003eNaturstein Kugel Armbänder mit Leder und Kreuz \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMaterial\u003c\/td\u003e\n\u003ctd\u003eEdelstahl Natur Stein, Legierung, Schwarz \/ Braun\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGeschlecht\u003c\/td\u003e\n\u003ctd\u003eMänner\/Frauen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFarbe\u003c\/td\u003e\n\u003ctd\u003eschwarz \/ braun geflochtenes\/ glattes Lederarmband mit Kreuz (silber)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eStil\u003c\/td\u003e\n\u003ctd\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGewicht \u003c\/td\u003e\n\u003ctd\u003eca. 26-30 g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eArmbandbreite\u003c\/td\u003e\n\u003ctd\u003e10 mm \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eArmbandlänge\u003c\/td\u003e\n\u003ctd\u003e21cm \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eAnzahl der Perlen\u003c\/td\u003e\n\u003ctd\u003e26 perlen + 1 Kreuz + 4 Ringe \u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c\/td\u003e\n\u003ctd\u003e\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\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv style=\"cursor: pointer;\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseTwo\" class=\"panel-heading\"\u003e\n\u003ch2 class=\"panel-title\" style=\"margin-bottom: 0px;\"\u003e\n\u003cspan class=\"glyphicon glyphicon-minus\" style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan href=\"#collapseTwo\" data-parent=\"#accordion\" data-toggle=\"collapse\" class=\"accordion-toggle\" style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Hinweise zur Nutzung \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-collapse collapse in\" id=\"collapseTwo\"\u003e\n\u003cdiv class=\"panel-body\"\u003eBitte beachten Sie, dass Sie das Armband vor direktem Kontakt mit chemischen Substanzen schützen sollten. Vermeiden Sie auch den Kontakt mit heißem Wasser und tragen Sie das Armband nicht während des Schlafens. Alle Armbänder sind von Hand gemessen, es kann zu einer Abweichung von +\/- 1 cm kommen.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\" class=\"panel panel-default\"\u003e\n\u003cdiv style=\"cursor: pointer;\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseThree\" class=\"panel-heading\"\u003e\n\u003ch2 class=\"panel-title\" style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan class=\"glyphicon glyphicon-minus\" style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan href=\"#collapseThree\" data-parent=\"#accordion\" data-toggle=\"collapse\" class=\"accordion-toggle\" style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Deine Vision. Unser Handwerk \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-collapse collapse\" id=\"collapseThree\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv class=\"hidden-xs\" style=\"text-align: center;\" data-mce-fragment=\"1\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre_1024x1024.png?v=1700729985\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"visible-xs\" style=\"text-align: center;\" data-mce-fragment=\"1\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre.png?v=1700729985\"\u003e\u003c\/div\u003e\n\u003cstrong\u003eKein Dropshipping, bei uns wird Handarbeit großgeschrieben\u003c\/strong\u003e – mit Leidenschaft und Hingabe. \u003cstrong\u003e...Excellence in Praxis. Since the beginning! \u003c\/strong\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-body\"\u003eMit stolzen\u003cstrong\u003e 33 Jahren Branchenerfahrung\u003c\/strong\u003e sind wir ein \u003cstrong\u003eFamilienunternehmen\u003c\/strong\u003e, das fest auf den Werten \u003cstrong\u003eVertrauen, Fairness, Ehrlichkeit, Loyalität\u003c\/strong\u003e und \u003cstrong\u003ePremium\u003c\/strong\u003e in Dienstleistung und Produkten basiert. Wir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich mit Hingabe und Sorgfalt veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\/\/ \u003c![CDATA[\n$(document).ready(function(){\n    \n   $('.collapse').on('shown.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-plus\").removeClass(\"glyphicon-plus\").addClass(\"glyphicon-minus\");\n}).on('hidden.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-minus\").removeClass(\"glyphicon-minus\").addClass(\"glyphicon-plus\");\n}); \n    \n});\n\/\/ ]]\u003e\u003c\/script\u003e","brand":"Juwelier Milano","offers":[{"title":"Braun Tigerauge","offer_id":44779431330057,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarz Lava","offer_id":44779431297289,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarz Obsidian","offer_id":44766743593225,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Produkt_Kugelband_kreuz.png?v=1701000016"},{"product_id":"kopie-von-kugel-lederband-mit-gravur-platte-edelstahl-in-verschiedenen-farben-inkl-kostenlose-gravur","title":"Unisex Creolen in Edelstahl","description":"\u003c!-- Fügen Sie diese Zeilen im Head-Bereich Ihrer Seite \/collections\/3d-gravur hinzu, um Font Awesome Icons und jQuery zu laden --\u003e \u003c!-- jQuery --\u003e\u003cscript type=\"text\/javascript\" src=\"{{'jquery-3.7.1.min.js'|asset_url}}\"\u003e\u003c\/script\u003e\n\u003cstyle\u003e\u003c!--\n.accordion-toggle:hover {\n      text-decoration: none;\n    } \n    \n    .container{\n        \n        margin-top:50px;\n    }\n    \n  \n  .panel-default\u003e.panel-heading {\n    color: #fff;\n    font-weight:bold;\n    background-color: #1d3838;\n    border-color: #b6a573;\n}  \n  accordion-toggle {\n     \n    font-size: 22px; \/* Passen Sie die Schriftgröße nach Bedarf an *\/\n  }\n\n.elegant-table {\n  font-family: Arial, sans-serif;\n  border-collapse: collapse;\n  width: 100%;\n  \n}\n\n.elegant-table td, .elegant-table th {\n  border: 1px solid #ddd;\n  padding: 8px;\n}\n\n.elegant-table th {\n  padding-top: 12px;\n  padding-bottom: 12px;\n  text-align: left;\n  background-color: #449e98;\n  color: white;\n  font-weight: bold;\n}\n\n.elegant-table tr:nth-child(even){background-color: #f2f2f2;}\n.elegant-table tr:hover {background-color: #ddd;}\n\n  .container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\npadding-bottom:10px;\n}\n    .container-fluid-mobile {\n  @media (max-width: 567px) {\n    margin: -50px;\n  }\n  \n}\n--\u003e\u003c\/style\u003e\n\u003ch3 style=\"text-align: left;\" class=\"\" data-mce-fragment=\"1\" data-mce-style=\"text-align: left;\"\u003e\n\u003cspan data-mce-fragment=\"1\"\u003eUnisex \u003c\/span\u003eCreolen mit Klappverschluss - Stilvoller Ohrschmuck in Vielfalt\u003c\/h3\u003e\n\n\u003cdiv class=\"visible-lg\" style=\"margin:65px;\"\u003e \n\u003cp\u003eSuchen Sie nach dem perfekten Accessoire, das Eleganz und Ausdruck verbindet? Unsere exklusiven Creolen mit Klappverschluss sind die ideale Wahl für den modernen Mann oder Frau, der\/die Wert auf Stil und Raffinesse legt.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAusdruck von Individualität:\u003c\/strong\u003e Unsere Creolen sind mehr als nur Schmuck – sie sind eine Aussage Ihrer Persönlichkeit. Zeigen Sie Ihre Einzigartigkeit und unterstreichen Sie Ihren Stil mit diesem markanten Accessoire.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eKlappverschluss für müheloses Tragen:\u003c\/strong\u003e Unser innovativer Klappverschluss macht das An- und Ausziehen dieser Creolen zum Kinderspiel. Kein lästiges Hantieren mehr – nur reine Eleganz in Sekundenschnelle.\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cstrong\u003eHochwertige Materialien:\u003c\/strong\u003e Jede Creole ist aus hochwertigem Edelstahl gefertigt, das nicht nur langlebig ist, sondern auch einen markanten Glanz behält. Perfekt für den täglichen Gebrauch oder besondere Anlässe.\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eKomfort für den ganzen Tag:\u003c\/strong\u003e Der Klappverschluss sorgt nicht nur für ein einfaches An- und Ausziehen, sondern auch für einen sicheren und bequemen Sitz, den Sie den ganzen Tag lang genießen können.\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003ePerfektes Geschenk:\u003c\/strong\u003e Suchen Sie nach dem idealen Geschenk für einen besonderen Mann in Ihrem Leben? Unsere Herren Creolen mit Klappverschluss kommen in einer eleganten Verpackung und sind das perfekte Geschenk für Geburtstage, Jubiläen oder andere besondere Anlässe.\u003cbr\u003e\u003cbr\u003eEntdecken Sie die Fusion von Funktionalität und Stil mit unseren Unisex Creolen mit Klappverschluss. Bestellen Sie jetzt und heben Sie Ihren Schmuckstil auf ein neues Level!\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\u003cdiv class=\"visible-xs\" style=\"margin:0px;\"\u003e \n\u003cp\u003eSuchen Sie nach dem perfekten Accessoire, das Eleganz und Ausdruck verbindet? Unsere exklusiven Creolen mit Klappverschluss sind die ideale Wahl für den modernen Mann oder Frau, der\/die Wert auf Stil und Raffinesse legt.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eAusdruck von Individualität:\u003c\/strong\u003e Unsere Creolen sind mehr als nur Schmuck – sie sind eine Aussage Ihrer Persönlichkeit. Zeigen Sie Ihre Einzigartigkeit und unterstreichen Sie Ihren Stil mit diesem markanten Accessoire.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eKlappverschluss für müheloses Tragen:\u003c\/strong\u003e Unser innovativer Klappverschluss macht das An- und Ausziehen dieser Creolen zum Kinderspiel. Kein lästiges Hantieren mehr – nur reine Eleganz in Sekundenschnelle.\u003cbr data-mce-fragment=\"1\"\u003e\u003cbr data-mce-fragment=\"1\"\u003e\u003cstrong\u003eHochwertige Materialien:\u003c\/strong\u003e Jede Creole ist aus hochwertigem Edelstahl gefertigt, das nicht nur langlebig ist, sondern auch einen markanten Glanz behält. Perfekt für den täglichen Gebrauch oder besondere Anlässe.\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003eKomfort für den ganzen Tag:\u003c\/strong\u003e Der Klappverschluss sorgt nicht nur für ein einfaches An- und Ausziehen, sondern auch für einen sicheren und bequemen Sitz, den Sie den ganzen Tag lang genießen können.\u003cbr\u003e\u003cbr\u003e\u003cstrong\u003ePerfektes Geschenk:\u003c\/strong\u003e Suchen Sie nach dem idealen Geschenk für einen besonderen Mann in Ihrem Leben? Unsere Herren Creolen mit Klappverschluss kommen in einer eleganten Verpackung und sind das perfekte Geschenk für Geburtstage, Jubiläen oder andere besondere Anlässe.\u003cbr\u003e\u003cbr\u003eEntdecken Sie die Fusion von Funktionalität und Stil mit unseren Unisex Creolen mit Klappverschluss. Bestellen Sie jetzt und heben Sie Ihren Schmuckstil auf ein neues Level!\u003c\/p\u003e\n  \u003c\/div\u003e\n\n\n  \n\u003cdiv class=\"visible-xs\" style=\"text-align: center;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: center;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"container-fluid container-fluid-mobile\"\u003e\n\u003cdiv class=\"panel-group\" id=\"accordion\"\u003e\n\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseOne\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px; text-align: left;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseOne\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Produkt Details\u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseOne\" class=\"panel-collapse collapse in\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv class=\"scrollable-wrapper\" style=\"border-radius: 10px;\" data-mce-style=\"border-radius: 10px;\"\u003e\n\u003ctable class=\"elegant-table\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth\u003eEigenschaften\u003c\/th\u003e\n\u003cth\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTyp\u003c\/td\u003e\n\u003ctd\u003eCreolen mit Klappverschluß\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eMaterial\u003c\/td\u003e\n\u003ctd\u003eEdelstahl, Schwarz Legierung\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGeschlecht\u003c\/td\u003e\n\u003ctd\u003eHerren\/Damen\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eFarbe\u003c\/td\u003e\n\u003ctd\u003eEdelstahl\/ geschwärzt\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eStil \/ Muster\u003c\/td\u003e\n\u003ctd\u003eModisch \/ rund\u003cbr\u003e\n\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\u003cdiv class=\"panel panel-default\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseTwo\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseTwo\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Hinweise zur Nutzung \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseTwo\" class=\"panel-collapse collapse in\"\u003e\n\u003cdiv class=\"panel-body\"\u003eVermeiden von Kontakt mit Wasser, Parfüm oder anderen Chemikalien einschließen, um die Lebensdauer des Schmucks zu verlängern\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel panel-default\" style=\"text-align: left;\" data-mce-style=\"text-align: left;\"\u003e\n\u003cdiv class=\"panel-heading\" href=\"#collapseThree\" data-parent=\"#accordion\" data-toggle=\"collapse\" style=\"cursor: pointer;\" data-mce-style=\"cursor: pointer;\"\u003e\n\u003ch2 style=\"margin-bottom: 0px; text-align: left;\" class=\"panel-title\" data-mce-style=\"margin-bottom: 0px; text-align: left;\"\u003e\n\u003cspan style=\"font-size: 28px;\" class=\"glyphicon glyphicon-minus\" data-mce-style=\"font-size: 28px;\"\u003e\u003c\/span\u003e\u003cspan style=\"cursor: pointer; text-decoration: none; color: inherit;\" class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#collapseThree\" data-mce-style=\"cursor: pointer; text-decoration: none; color: inherit;\"\u003e Deine Vision. Unser Handwerk \u003c\/span\u003e\n\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv id=\"collapseThree\" class=\"panel-collapse collapse\"\u003e\n\u003cdiv class=\"panel-body\"\u003e\n\u003cdiv class=\"hidden-xs\" style=\"text-align: center;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: center;\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre_1024x1024.png?v=1700729985\" data-mce-style=\"margin-bottom: 10px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"visible-xs\" style=\"text-align: center;\" data-mce-fragment=\"1\" data-mce-style=\"text-align: center;\"\u003e\u003cimg style=\"margin-bottom: 10px; float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Familienunternehmen_33jahre.png?v=1700729985\" data-mce-style=\"margin-bottom: 10px; float: none;\"\u003e\u003c\/div\u003e\n\u003cstrong\u003eKein Dropshipping, bei uns wird Handarbeit großgeschrieben\u003c\/strong\u003e – mit Leidenschaft und Hingabe. \u003cstrong\u003e...Excellence in Praxis. Since the beginning! \u003c\/strong\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"panel-body\"\u003eMit stolzen\u003cstrong\u003e 33 Jahren Branchenerfahrung\u003c\/strong\u003e sind wir ein \u003cstrong\u003eFamilienunternehmen\u003c\/strong\u003e, das fest auf den Werten \u003cstrong\u003eVertrauen, Fairness, Ehrlichkeit, Loyalität\u003c\/strong\u003e und \u003cstrong\u003ePremium\u003c\/strong\u003e in Dienstleistung und Produkten basiert. Wir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich mit Hingabe und Sorgfalt veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\/\/ \u003c![CDATA[\n$(document).ready(function(){\n    \n   $('.collapse').on('shown.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-plus\").removeClass(\"glyphicon-plus\").addClass(\"glyphicon-minus\");\n}).on('hidden.bs.collapse', function(){\n$(this).parent().find(\".glyphicon-minus\").removeClass(\"glyphicon-minus\").addClass(\"glyphicon-plus\");\n}); \n    \n});\n\/\/ ]]\u003e\u003c\/script\u003e","brand":"Juwelier Milano","offers":[{"title":"Schwarzmatt breit","offer_id":44867813736713,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Stahl schwarz","offer_id":44867813769481,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarzmatt sandschwarz","offer_id":44867813802249,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarzmatt schmal","offer_id":44867813835017,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Stahl breit","offer_id":44867826811145,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Stahl schmal","offer_id":44867826843913,"sku":"","price":29.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/1_e1f69f7d-40c7-45b6-a285-5b1398550de1.png?v=1703590835"},{"product_id":"schlanke-geldklammer-edelstahl-gravur","title":"Schlanke Geldklammer aus Edelstahl – Gratis Gravur inklusive","description":"\u003cbody\u003e\n\n\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003ctitle\u003eHochwertige Geldklammer aus Edelstahl inkl. kostenloser Gravur\u003c\/title\u003e\n\n    \u003c!-- SEO --\u003e\n\n    \u003cmeta name=\"description\" content=\"Schlanke Geldklammer aus hochwertigem Edelstahl – minimalistisch, leicht \u0026amp; elegant. In Rosé-Gold, Schwarz matt oder Stahl matt. Jetzt kostenlos gravieren \u0026amp; personalisieren.\"\u003e\n\n    \u003cmeta name=\"keywords\" content=\"Geldklammer Edelstahl, schlanke Geldklammer, Geldklammer mit Gravur, personalisierte Geldklammer, Edelstahl Geldclip, minimalistische Geldklammer, Geldklammer Geschenk,\nGeldklammer Herren Damen,\nGeldclip graviert\"\u003e\n\n\n\n\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n    \u003c!-- Fonts --\u003e\n    \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n    \u003c!-- Bootstrap Icons --\u003e\n    \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n    \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n\n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n\n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n    padding: 31px;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n\n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\/*Desktop*\/\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n\n  color: rgb(186 186 186 \/ 94%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n\n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n\n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/\n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/\n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n}\n\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\/*Desktop*\/\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n   bottom: 64px;\n    left: 27px;\n      transform: rotateZ(343deg);\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n\n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n\n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n\n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n\n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n\n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: -15px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n}\n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.8rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n}\n\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n        bottom: 80px;\n        right: 24px;\n\n}\n  .popup-preview-text-wrap {\n      position: absolute;\n        top: 42%;\n        left: 50%;\n        white-space: nowrap;\n        display: block;\n        transform: rotateZ(343deg);\n\n}\n\n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n\n    .ring-size-visual {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 24px 0;\n}\n\n.ring-size {\n  width: 150px;\n  height: 72px;\n  border: 2px solid #2c2c2c;\n  border-radius: 10px; \/* rechteckig, leicht abgerundet *\/\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-family: Helvetica, Arial, sans-serif;\n  background: #fff;\n  text-align: center;\n  box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n}\n\n.ring-size .size {\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n\n.ring-size .diameter {\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.1;\n}\n\n.ring-size .circumference {\n  font-size: 11px;\n  color: #666;\n  margin-top: 3px;\n}\n\n    @media (max-width: 768px) {\n  .ring-size-visual {\n    gap: 10px;\n    margin: 5px 0;\n  }\n\n  .ring-size {\n    width: 68px;\n    height: 72px;\n    border-width: 1.5px;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.07);\n  }\n\n  .ring-size .size {\n    font-size: 13px;\n    margin-bottom: 1px;\n  }\n\n  .ring-size .diameter {\n    font-size: 11.5px;\n    line-height: 1.1;\n  }\n\n  .ring-size .circumference {\n    font-size: 10px;\n    margin-top: 2px;\n    margin-bottom: 7px;\n  }\n}\n    @media (max-width: 768px) {\n  .ring-size {\n    width: 130px;\n    height: 68px;\n  }\n}\n\n       \/* Container responsiv *\/\n.before-after-image--container {\n    width: 80%;\n    max-width: 450px;\n    margin: 20px auto;\n    border-radius: 10px;\n    overflow: hidden;\n    box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n    transition: transform 0.3s ease;\n    position: relative;\n}\n\n.before-after-image--container:hover {\n    transform: scale(1.02);\n}\n\n\/* Mobile *\/\n@media screen and (max-width: 767px) {\n    .before-after-image--container {\n        width: 80%;\n        box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n    }\n    .before-after-image--image {\n        height: auto !important;\n    }\n}\n\n\/* Slider styling *\/\n.before-after-image--slider {\n    width: 100%;\n    margin-top: 10px;\n}\n\n\/* Hinweis *\/\n.slider-hint {\n   position: absolute;\n    top: 75px;\n    left: 50%;\n    transform: translateX(-50%);\n    background: rgba(255,255,255,0.95);\n    padding: 6px 14px;\n    border-radius: 20px;\n    font-size: 1.2rem;\n    font-weight: 500;\n    color: #111;\n    letter-spacing: 0.02em;\n    pointer-events: none;\n    z-index: 10;\n    animation: pulse 1.5s infinite;\n    transition: opacity 0.3s ease;\n}\n\n@keyframes pulse {\n    0% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n    50% { transform: translate(-50%, -150%) scale(1.1); opacity: 0.6; }\n    100% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n}\n\n\/* Section header *\/\n.section-header--content h1.h3 {\n    font-size: 2.6rem;\n    margin-bottom: 15px;\n}\n.section-header--content .btn {\n    padding: 12px 25px;\n    font-size: 1.4rem;\n}\n\n\n\n\n.before-after-image--container {\n  display: block;\n  position: relative; }\n\n.before-after-image--media {\n  display: block;\n  position: relative;\n  overflow: hidden; }\n  .before-after-image--media:after {\n    content: \"\";\n    display: block;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: 1;\n    pointer-events: none;\n    background: rgba(var(--color-overlay-rgb), var(--overlay-opacity)); }\n\n.before-after-image--image .thb-placeholder,\n.before-after-image--image img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%; }\n  .before-after-image--image .thb-placeholder svg,\n  .before-after-image--image img svg {\n    object-fit: contain; }\n\n.before-after-image--image img {\n  object-fit: cover; }\n\n@media only screen and (max-width: 767px) {\n  .before-after-image--image.mobile-height-image {\n    aspect-ratio: var(--image-aspect);\n    min-height: unset; } }\n\n@media only screen and (min-width: 768px) {\n  .before-after-image--image.desktop-height-image {\n    aspect-ratio: var(--image-aspect);\n    min-height: unset; } }\n\n.before-after-image--2 {\n  clip-path: inset(0px 0px 0px var(--percent));\n  position: absolute;\n  z-index: 3;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n  .before-after-image--2 .before-after-image--content {\n    justify-content: flex-end; }\n\n.before-after-image--content {\n  position: absolute;\n  z-index: 2;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  display: flex;\n  padding: 15px; }\n  @media only screen and (min-width: 768px) {\n    .before-after-image--content {\n      padding: 30px; } }\n  @media only screen and (min-width: 1068px) {\n    .before-after-image--content {\n      padding: 45px; } }\n  .before-after-image--content-center {\n    align-items: center; }\n  .before-after-image--content-bottom {\n    align-items: flex-end; }\n  .before-after-image--content h4 {\n    color: var(--color-body, #151515); }\n\n.before-after-image--slider {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  left: 0;\n  z-index: 40;\n  transform: translateY(-50%);\n  opacity: 0;\n  height: 54px;\n  cursor: pointer; }\n\n.before-after-image--divider {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 10;\n  width: 2px;\n  left: calc(var(--percent) - 1px);\n  background: var(--color-line, --bg-body);\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); }\n  .before-after-image--divider svg {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    z-index: 11;\n    transform: translate3d(-50%, -50%, 0);\n    z-index: 20;\n    border-radius: 20px;\n    box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.1);\n    cursor: pointer; }\n\n.before-after-image--mobile {\n  display: block; }\n  @media only screen and (min-width: 768px) {\n    .before-after-image--mobile {\n      display: none; } }\n\n.before-after-image--desktop {\n  display: none; }\n  @media only screen and (min-width: 768px) {\n    .before-after-image--desktop {\n      display: block; } }\n\n .engraving-cta-strip {\n    background: linear-gradient(135deg, #111, #1c1c1c);\n    color: #fff;\n    padding: 80px 20px;\n    text-align: center;\n}\n\n    \u003c\/style\u003e\n\n\n\n\n    \u003cdiv class=\"engraving-product\"\u003e\n\n        \u003c!-- =========================\n         HERO: Edelstahl Geldklammer\n    ========================== --\u003e\n        \u003csection class=\"engraving-hero engraving-fade show\"\u003e\n            \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n                \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n                    \u003c!-- Textbereich --\u003e\n                    \u003cdiv class=\"engraving-hero-text\"\u003e\n\n\n                        \u003ch1\u003eHochwertige Geldklammer aus Edelstahl inkl. kostenloser Gravur\u003c\/h1\u003e\n                        \u003cdiv class=\"hero-subline\"\u003e\n                            \u003cspan class=\"engraving-badge\"\u003e\n                                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n                            \u003c\/span\u003e\n\n                            \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n                                \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n                                Live-Vorschau ansehen\n                            \u003c\/a\u003e\n                        \u003c\/div\u003e\n\n                        \u003cp\u003e\n                            Elegante schlanke Geldklammer aus hochwertigem Edelstahl …Schlicht. Stark. Stilvoll – in deiner Farbe.\n                        \u003c\/p\u003e\n\n                        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n                        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                            Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                        \u003c\/button\u003e\n\n                        \u003cdiv class=\"micro-trust-valentine\"\u003e\n                            Sicher · Persönlich · Handgefertigt\n                        \u003c\/div\u003e\n\n                        \u003c!-- Trust Icons --\u003e\n                        \u003cdiv class=\"engraving-trust\"\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Hochwertiger Edelstahl \u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e fein mattiert\u003c\/span\u003e\n                            \u003cspan\u003e\n                                \u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n                                \u003cstrong\u003eDicke:\u003c\/strong\u003e ca. 0,8 mm\n                            \u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e 3 Farbvarianten erhältlich\u003c\/span\u003e\n                            \u003cdiv class=\" \" style=\" margin-top: 25px;\"\u003e\n                                \u003cspan\u003e\u003ch2 style=\" font-size: 1.8rem; font-weight: 700; margin-bottom: 16px; color: #1f2a2a; \"\u003e \u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003eMaße je Variante:\u003c\/h2\u003e\u003c\/span\u003e\n                            \u003c\/div\u003e\n\n\n                            \u003cdiv class=\"ring-size-visual\"\u003e\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eVergoldet\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,08 cm · Gewicht: 9,5 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eSchwarz matt\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,08 cm · Gewicht: ca. 8,5 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eStahl matt\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,08 cm · Gewicht: ca. 7,8 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cp class=\"engraving-preview-note\"\u003e\n                                    \u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e\n                                    Hinweis: Maße können je Variante leicht abweichen.\n                                \u003c\/p\u003e\n                            \u003c\/div\u003e\n\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n                    \u003c!--  \u003cdiv class=\"micro-trust-valentine\" style=\" text-align: left; \"\u003e\n                  Angeboten wird der Anhänger ohne Kette.\n                \u003c\/div\u003e--\u003e\n                    \u003c!-- Bildbereich --\u003e\n                    \u003cdiv class=\"engraving-image\"\u003e\n                        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/gesamt_dfddfcf5-d2b4-43dd-9a5b-5625ac4bdb60.png?v=1770295981\" alt=\"Edelstahl schlanke Geldklammer mit Gravur\"\u003e\n\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n\n            \u003c\/div\u003e\n\n        \u003c\/section\u003e\n        \u003c!-- =========================\n         WHY STORY BLOCK\n    ========================== --\u003e\n        \u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n            \u003cdiv class=\"container\"\u003e\n                \u003ch2\u003eWarum dieser Geldklammer? Schlank, leicht und voller Bedeutung.\u003c\/h2\u003e\n                \u003cp\u003e\n                    „Veredle deine schlanke Edelstahl-Geldklammer mit Initialen, einem Namen oder einer kurzen Botschaft – ein filigranes Accessoire oder das perfekte Geschenk für besondere Menschen.“\n                \u003c\/p\u003e\n\n\n                \u003cdiv class=\"engraving-why-grid\"\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n                        \u003cp\u003eEdelstahl, robust, glänzend, hypoallergen und dabei schlank und leicht Fein mattiert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n                        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Motiv graviert, kostenlos.\u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Die schlanke Form macht sie diskret, elegant und leicht zu tragen – mit einer individuellen Gravur wird sie zu einem täglichen Begleiter voller Stil und Persönlichkeit.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-lightning-charge\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eLeicht \u0026amp; praktisch\u003c\/h3\u003e\n                        \u003cp\u003eDank schlankem Design passt die Geldklammer bequem in jede Tasche, ohne aufzutragen – perfekt für unterwegs.\u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- =========================\n         SHIPPING \u0026 TRUST BLOCK\n    ========================== --\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\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e\n                            nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Jede Gravur entsteht in unserem Familienbetrieb –\n                            \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n                        \u003c\/p\u003e\n                        \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Sichere Zahlung, persönlicher Support\n                            und höchste Qualitätskontrolle vor dem Versand.\n                        \u003c\/p\u003e\n                        \u003cp\u003e\n                            Sollte etwas nicht passen, findest du mit uns\n                            unkompliziert eine Lösung.\n                        \u003c\/p\u003e\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003cdiv class=\"before-after-image section-spacing\" style=\"--percent:46.8%; --color-line:#dcbc5a;\"\u003e\n            \u003cdiv class=\"row full-width-row\"\u003e\n                \u003cdiv class=\"small-12 columns\"\u003e\n                    \u003cdiv class=\"section-header section-header-left--false\"\u003e\n                        \u003cdiv class=\"section-header--content\"\u003e\n                            \u003ccenter\u003e\n                                \u003ch2 class=\"h3\" style=\"\n    font-weight: 600;\n\"\u003e\n                                    Deine Vision. Unser Handwerk. 3D Gravuren\n                                \u003c\/h2\u003e\n                            \u003c\/center\u003e\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n\n                    \u003ccenter\u003e\n                        \u003cdiv class=\"responsive before-after-image--container\"\u003e\n                            \u003c!-- Vorher --\u003e\n                            \u003cdiv class=\"before-after-image--media before-after-image--1\" style=\"--color-body: #151515; --overlay-opacity: 0.0;\"\u003e\n                                \u003cdiv class=\"before-after-image--image mobile-height-450 desktop-height-550\" style=\"--image-aspect:1.0;\"\u003e\n                                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Fotogravur_before.jpg?v=1699821284\" alt=\"Fotogravur Vorher\" style=\"object-position:50% 50%; position:relative;\"\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- Nachher --\u003e\n                            \u003cdiv class=\"before-after-image--media before-after-image--2\" style=\"--color-body:#151515; --overlay-opacity:0.0;\"\u003e\n                                \u003cdiv class=\"before-after-image--image mobile-height-450 desktop-height-550\" style=\"--image-aspect:1.0;\"\u003e\n                                    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Fotogravur_after.jpg?v=1699821284\" alt=\"Fotogravur Nachher\" style=\"object-position:50% 50%; position:relative;\"\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- Divider \/ Linie --\u003e\n                            \u003cdiv class=\"before-after-image--divider\"\u003e\n                                \u003csvg width=\"40\" height=\"54\" viewbox=\"0 0 40 54\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n                                    \u003crect width=\"40\" height=\"54\" rx=\"20\" fill=\"var(--color-line, --bg-body)\"\u003e\u003c\/rect\u003e\n                                    \u003crect x=\"14\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n                                    \u003crect x=\"19.2173\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n                                    \u003crect x=\"24.4348\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n                                \u003c\/svg\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- Slider --\u003e\n                            \u003cinput type=\"range\" min=\"0\" max=\"100\" value=\"46.8\" class=\"before-after-image--slider\" id=\"beforeAfterSlider\"\u003e\n                            \u003cdiv id=\"sliderHint\" class=\"slider-hint\"\u003e\n                                \u003cspan class=\"bi bi-arrow-left-circle\"\u003e\u003c\/span\u003e Swipe \u003cspan class=\"bi bi-arrow-right-circle\"\u003e\u003c\/span\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\u003e\n                    \u003c\/center\u003e\n\n                    \u003cdiv class=\"section-header section-header-left--false\"\u003e\n\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003c!-- FEATURES --\u003e\n        \u003c!-- == \u003csection class=\"engraving-section engraving-fade\"\u003e\n        \u003cdiv class=\"container engraving-hero-text\"\u003e\n            \u003ch1\u003eMehr als eine Geldklammer\u003c\/h1\u003e\n            \u003cp class=\"engraving-section-desc\"\u003e\n                Diese elegante Geldklammer aus hochwertigem Edelstahl steht für Stil, Ordnung und Persönlichkeit.\n                Kompakt, robust und mit individueller Gravur wird sie zu einem täglichen Begleiter mit Bedeutung –\n                für Menschen, die Wert auf klare Linien und Qualität legen.\n            \u003c\/p\u003e\n\n            \u003cdiv class=\"engraving-features\"\u003e\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n                    \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Hochwertig verarbeitet, langlebig und formstabil –\n                        entwickelt für Gravuren, die ein Leben lang halten.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Zeitloses Design, persönliche Gravur –\n                        Stilvolles Geschenk für Männer \u0026amp; Frauen\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n\n                \u003cdiv class=\"engraving-feature\"\u003e\n                    \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                    \u003ch3\u003eElegant \u0026amp; Zeitlos\u003c\/h3\u003e\n                    \u003cp\u003e\n                        Schlichtes Design aus hochwertigem Edelstahl – ein klares Statement\n                        für Stil, Charakter und zeitlose Eleganz im Alltag.\n                    \u003c\/p\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/div\u003e\n    \u003c\/section\u003e  == --\u003e\n        \u003c!-- =========================\n         SPECS SECTION\n    ========================== --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n                \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n                \u003cdiv class=\"engraving-specs\"\u003e\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl, robust \n                        \u003c\/li\u003e\n\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eMaße je Variante:\u003c\/strong\u003e\n\n                            \u003cdiv class=\"ring-size-visual\"\u003e\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eVergoldet\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5,0 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,8 mm · ca. 9,5 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eSchwarz matt\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5,0 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,8 mm · ca. 8,5 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cdiv class=\"ring-size\"\u003e\n                                    \u003cspan class=\"size\"\u003eStahl matt\u003c\/span\u003e\n                                    \u003cspan class=\"diameter\"\u003e5,0 × 1,5 cm\u003c\/span\u003e\n                                    \u003cspan class=\"circumference\"\u003eDicke: 0,8 mm · ca. 7,8 g\u003c\/span\u003e\n                                \u003c\/div\u003e\n\n                                \u003cp class=\"engraving-preview-note\"\u003e\n                                    \u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e\n                                    Hinweis: Maße können je Variante leicht abweichen.\n                                \u003c\/p\u003e\n                            \u003c\/div\u003e\n\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eFinish:\u003c\/strong\u003e Vergoldet · Schwarz matt · Stahl matt\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eDesign:\u003c\/strong\u003e Schlanke, minimalistische Geldklammer\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Unisex\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos, individuell\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Stilvoll, elegant \u0026amp; persönlich\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eDicke:\u003c\/strong\u003e ca. 0,8 mm (filigran \u0026amp; leicht)\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n\n        \u003c!-- =========================\n         GRAVUR LIVE PREVIEW\n    ========================== --\u003e\n        \u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n            \u003cspan class=\"engraving-badge visible-xs\"\u003e\n                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n            \u003c\/span\u003e\n            \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n                \u003c!-- IMAGE --\u003e\n                \u003cdiv class=\"engraving-preview-image\"\u003e\n                    \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/silber_2.png?v=1770297401\" alt=\"Edelstahl Geldklammer ohne Gravur\"\u003e\n\n                    \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n                        \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n                            \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n                            \u003cspan class=\"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                    \u003cp class=\"engraving-preview-note\"\u003e\n                        ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n                    \u003c\/p\u003e\n\n\n                \u003c\/div\u003e\n\n                \u003c!-- CONTENT --\u003e\n                \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n                    \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n                    \u003c\/span\u003e\n\n                    \u003ch2\u003eMach diesen Geldklammer einzigartig\u003c\/h2\u003e\n                    \u003cp\u003e\n                        Gib deine gewünschte Gravur ein und sieh sofort,\n                        wie dein persönlicher Geldklammer Gestalt annimmt.\n                    \u003c\/p\u003e\n\n                    \u003c!-- INPUT --\u003e\n                    \u003cdiv class=\"engraving-input-wrap\"\u003e\n                        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n                        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n                        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n                    \u003c\/div\u003e\n                    \u003c!-- SYMBOL PICKER --\u003e\n                    \u003cdiv class=\"engraving-symbol-picker\"\u003e\n                        \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n                    \u003c!-- FONT SELECT --\u003e\n                    \u003cdiv class=\"engraving-font-select\"\u003e\n\n\n                        \u003c!-- =========================\n                         FONT PICKER (BUTTONS)\n                    ========================== --\u003e\n                        \u003cdiv class=\"engraving-font-picker\"\u003e\n                            \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n\n\n                            \u003c!-- SERIF --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n                                        Times New Roman\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n                                        Georgia\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SANS --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n                                        Arial\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n                                        Helvetica\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- MONOSPACE --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n                                        Courier New\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n                                        Lucida Console\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SCRIPT --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n                                        Allura\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n                                        Alex Brush\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n                                        Kaushan Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HANDWRITING --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n                                        Pacifico\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n                                        Indie Flower\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n                                        Dancing Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n                            \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n                        \u003c\/div\u003e\n\n                    \u003c\/div\u003e\n\n\n                    \u003c!-- CTA --\u003e\n                    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                    \u003c\/button\u003e\n\n                    \u003c!-- MICRO TRUST --\u003e\n                    \u003cdiv class=\"engraving-micro-trust\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- End Block --\u003e\n        \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\n            \u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n            \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n            \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n            \u003cp\u003e Handarbeit 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\n        \u003c\/section\u003e\n\n\n\n        \u003c!-- Mobile Popup Vorschau --\u003e\n        \u003cdiv id=\"engraving-mobile-popup\"\u003e\n            \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n                \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/silber_2.png?v=1770297401\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n                \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n                    \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n                        \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n            \u003c\/button\u003e\n        \u003c\/div\u003e\n\n\n        \u003cscript\u003e\n            \/* =========================\n                       Intersection Animations\n                    ========================= *\/\n            const engravingObserver = new IntersectionObserver(entries =\u003e {\n                entries.forEach(entry =\u003e {\n                    if (entry.isIntersecting) entry.target.classList.add('show');\n                });\n            }, { threshold: 0.2 });\n\n            document.querySelectorAll('.engraving-fade').forEach(el =\u003e\n                engravingObserver.observe(el)\n            );\n\n            \/* =========================\n               CTA Scroll + Übergabe\n            ========================= *\/\n            document.addEventListener(\"DOMContentLoaded\", function () {\n                const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n                ctaButtons.forEach(btn =\u003e {\n                    btn.addEventListener(\"click\", function (e) {\n                        e.preventDefault();\n\n                        const gravurInput = document.querySelector(\"#gravur_Vorderseite_1\");\n                        const previewText = document.getElementById(\"engravingPreviewText\");\n\n                        if (gravurInput \u0026\u0026 previewText) {\n                            gravurInput.value = previewText.textContent.trim();\n                            const fontFamily = window.getComputedStyle(previewText).fontFamily;\n                            gravurInput.style.fontFamily = fontFamily;\n\n                            const back = document.querySelector(\"#gravurtext_2\");\n                            if (back) back.style.fontFamily = fontFamily;\n                            const back3 = document.querySelector(\"#gravurtext_3\");\n                            if (back3) back3.style.fontFamily = fontFamily;\n                            const back4 = document.querySelector(\"#gravurtext_4\");\n                            if (back4) back4.style.fontFamily = fontFamily;\n                            const back5 = document.querySelector(\"#gravurtext_5\");\n                            if (back5) back5.style.fontFamily = fontFamily;\n                            const back6 = document.querySelector(\"#gravurtext_6\");\n                            if (back6) back6.style.fontFamily = fontFamily;\n                        }\n\n                        const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n                        if (gravurFontSelect \u0026\u0026 previewText) {\n                            const previewFont = window.getComputedStyle(previewText).fontFamily;\n                            let found = false;\n                            Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n                                if (previewFont.includes(opt.value)) {\n                                    gravurFontSelect.selectedIndex = i;\n                                    found = true;\n                                }\n                            });\n                            if (!found) gravurFontSelect.selectedIndex = 0;\n                        }\n\n                        const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n                        if (!productForm) return;\n\n                        productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n                        const firstInput = productForm.querySelector(\"input, textarea, select\");\n                        if (firstInput) firstInput.focus();\n                    });\n                });\n            });\n\n            \/* =========================\n               Specs Fade-In\n            ========================= *\/\n            document.addEventListener(\"DOMContentLoaded\", function () {\n                const uls = document.querySelectorAll('.engraving-specs ul');\n                const observer = new IntersectionObserver(entries =\u003e {\n                    entries.forEach(entry =\u003e {\n                        if (entry.isIntersecting) entry.target.classList.add('visible');\n                    });\n                }, { threshold: 0.3 });\n                uls.forEach(ul =\u003e observer.observe(ul));\n            });\n\n            \/* =========================\n               Size Buttons\n            ========================= *\/\n            document.querySelectorAll('.size-btn').forEach(btn =\u003e {\n                btn.addEventListener('click', () =\u003e {\n                    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n                    btn.classList.add('active');\n                    document.getElementById('engraving-size-value').textContent =\n                        btn.getAttribute('data-size');\n                });\n            });\n\n            \/* =========================\n               MAIN ENGRAVING LOGIC\n            ========================= *\/\n            document.addEventListener(\"DOMContentLoaded\", function () {\n\n                const input = document.getElementById(\"engravingInput\");\n                const previewText = document.getElementById(\"engravingPreviewText\");\n                const overlay = document.getElementById(\"engravingOverlay\");\n\n                \/* ---- Mobile Popup ---- *\/\n                const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n                const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n                function showPopup() {\n                    if (window.innerWidth \u003e 768) return;\n                    mobilePopup.classList.add(\"show\");\n                }\n                function hidePopup() {\n                    mobilePopup.classList.remove(\"show\");\n                }\n\n                \/* ---- Desktop Effects ---- *\/\n                function triggerDesktopEffects() {\n                    previewText.classList.remove(\"engrave-fade\");\n                    void previewText.offsetWidth;\n                    previewText.classList.add(\"engrave-fade\");\n\n                    const check = document.querySelector(\".preview-check\");\n                    if (check) {\n                        check.classList.add(\"show\");\n                        clearTimeout(check._timeout);\n                        check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n                    }\n                }\n\n                \/* ---- Mobile Popup Sync ---- *\/\n                function updateMobilePopup(value) {\n                    if (!mobilePopupText) return;\n\n                    mobilePopupText.textContent = value;\n                    mobilePopupText.style.fontFamily =\n                        window.getComputedStyle(previewText).fontFamily;\n\n                    mobilePopupText.classList.remove(\"engrave-fade\");\n                    void mobilePopupText.offsetWidth;\n                    mobilePopupText.classList.add(\"engrave-fade\");\n\n                    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n                    if (!popupCheck) {\n                        popupCheck = document.createElement(\"span\");\n                        popupCheck.className = \"popup-preview-check\";\n                        popupCheck.innerHTML = \"✔\";\n                        mobilePopupText.parentElement.appendChild(popupCheck);\n                    }\n\n                    popupCheck.classList.add(\"show\");\n                    clearTimeout(popupCheck._timeout);\n                    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n                    showPopup();\n                }\n\n                const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n                const fontButtons = document.querySelectorAll(\".font-btn\");\n                const hiddenFontInput = document.getElementById(\"selectedFont\");\n                const MAX_LENGTH = 11;\n                let lastValue = \"\";\n\n                function updatePreview(force = false) {\n                    const value = input.value;\n                    if (!value) {\n                        overlay.classList.remove(\"active\");\n                        hidePopup();\n                        lastValue = \"\";\n                        return;\n                    }\n\n                    previewText.textContent = value;\n                    overlay.classList.add(\"active\");\n\n                    if (force || value.length !== lastValue.length) {\n                        triggerDesktopEffects();\n                        updateMobilePopup(value);\n                    }\n\n                    lastValue = value;\n                }\n\n                input.addEventListener(\"input\", () =\u003e updatePreview());\n\n                \/* ---- Symbols ---- *\/\n                symbolButtons.forEach(btn =\u003e {\n                    btn.addEventListener(\"click\", () =\u003e {\n                        const symbol = btn.dataset.symbol;\n                        if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n                        const start = input.selectionStart;\n                        const end = input.selectionEnd;\n                        input.value =\n                            input.value.substring(0, start) +\n                            symbol +\n                            input.value.substring(end);\n\n                        input.focus();\n                        input.selectionStart = input.selectionEnd = start + symbol.length;\n                        updatePreview(true);\n                    });\n                });\n                function forcePopupUpdate() {\n                    const value = input.value.trim();\n                    if (!value) return;\n\n                    \/\/ Popup Text \u0026 Font\n                    mobilePopupText.textContent = value;\n                    mobilePopupText.style.fontFamily =\n                        window.getComputedStyle(previewText).fontFamily;\n\n                    \/\/ Glow\n                    mobilePopupText.classList.remove(\"engrave-fade\");\n                    void mobilePopupText.offsetWidth;\n                    mobilePopupText.classList.add(\"engrave-fade\");\n\n                    \/\/ Micro Check\n                    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n                    if (!popupCheck) {\n                        popupCheck = document.createElement(\"span\");\n                        popupCheck.className = \"popup-preview-check\";\n                        popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n                        mobilePopupText.parentElement.appendChild(popupCheck);\n                    }\n                    popupCheck.classList.add(\"show\");\n                    clearTimeout(popupCheck._timeout);\n                    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n                    \/\/ SHOW\n                    if (window.innerWidth \u003c= 768) {\n                        mobilePopup.classList.add(\"show\");\n                    }\n                }\n\n                \/* ---- Fonts ---- *\/\n                fontButtons.forEach(btn =\u003e {\n                    btn.addEventListener(\"click\", () =\u003e {\n                        const font = btn.dataset.font;\n                        previewText.style.fontFamily = font;\n\n                        const back = document.getElementById(\"gravurtext_2\");\n                        if (back) back.style.fontFamily = font;\n                        const back3 = document.getElementById(\"gravurtext_3\");\n                        if (back3) back3.style.fontFamily = font;\n                        const back4 = document.getElementById(\"gravurtext_4\");\n                        if (back4) back4.style.fontFamily = font;\n                        const back5 = document.getElementById(\"gravurtext_5\");\n                        if (back5) back5.style.fontFamily = font;\n                        const back6 = document.getElementById(\"gravurtext_6\");\n                        if (back6) back6.style.fontFamily = font;\n\n                        hiddenFontInput.value = font;\n                        updatePreview(true);\n                        \/\/ 🔥 DAS IST DER FIX\n                        forcePopupUpdate();\n\n                        fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n                        btn.classList.add(\"active\");\n                    });\n                });\n\n                document.addEventListener(\"click\", e =\u003e {\n                    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n                });\n                window.addEventListener(\"scroll\", hidePopup);\n            });\n\n            \/* =========================\n               Preview Image Pulse\n            ========================= *\/\n            const previewImage = document.querySelector('.engraving-preview-image');\n            let hasPulsed = false;\n\n            function triggerPulse() {\n                if (!previewImage) return;\n                previewImage.classList.remove('pulse');\n                void previewImage.offsetWidth;\n                previewImage.classList.add('pulse');\n            }\n\n            document.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n                if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n                    triggerPulse();\n                    hasPulsed = true;\n                }\n            });\n\n            \/* =========================\n               Live Preview Link (WICHTIG!)\n            ========================= *\/\n            document.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n                link.addEventListener('click', e =\u003e {\n                    e.preventDefault();\n                    document\n                        .querySelector('#engraving-preview')\n                        .scrollIntoView({ behavior: 'smooth', block: 'center' });\n                });\n            });\n            \/* =========================\n               MOBILE FONT POPUP FIX\n               (isoliert, zerstört nichts)\n            ========================= *\/\n            document.addEventListener(\"DOMContentLoaded\", function () {\n\n                if (window.innerWidth \u003e 768) return;\n\n                const input = document.getElementById(\"engravingInput\");\n                const previewText = document.getElementById(\"engravingPreviewText\");\n                const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n                const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n                const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n                const fontButtons = document.querySelectorAll(\".font-btn\");\n\n                if (!input || !previewText || !popupText || !mobilePopup) return;\n\n                function showMobilePopup() {\n                    mobilePopup.classList.add(\"show\");\n                }\n\n                function syncPopupFromPreview() {\n                    const value = input.value.trim();\n                    if (!value) return;\n\n                    \/\/ Text + Font\n                    popupText.textContent = value;\n                    popupText.style.fontFamily =\n                        window.getComputedStyle(previewText).fontFamily;\n\n                    \/\/ Glow\n                    popupText.classList.remove(\"engrave-fade\");\n                    void popupText.offsetWidth;\n                    popupText.classList.add(\"engrave-fade\");\n\n                    \/\/ Micro Check\n                    if (popupCheck) {\n                        popupCheck.classList.add(\"show\");\n                        clearTimeout(popupCheck._timeout);\n                        popupCheck._timeout = setTimeout(\n                            () =\u003e popupCheck.classList.remove(\"show\"),\n                            1000\n                        );\n                    }\n\n                    showMobilePopup();\n                }\n\n                \/* 🔥 FONT-WECHSEL → POPUP *\/\n                fontButtons.forEach(btn =\u003e {\n                    btn.addEventListener(\"click\", () =\u003e {\n                        requestAnimationFrame(syncPopupFromPreview);\n                    });\n                });\n\n                \/* Sicherheit: auch bei erneutem Tippen *\/\n                input.addEventListener(\"input\", syncPopupFromPreview);\n\n            });\n\n            const slider = document.getElementById('beforeAfterSlider');\n            const after = document.querySelector('.before-after-image--2');\n            const divider = document.querySelector('.before-after-image--divider');\n            const hint = document.getElementById('sliderHint');\n            const section = document.querySelector('.before-after-image');\n            let hintTimeout;\n\n            const START_PERCENT = 46.8; \/\/ initialer Wert\n            const RANGE = slider.max - slider.min;\n\n            \/\/ Initialwert setzen\n            slider.value = START_PERCENT;\n\n            \/\/ Funktion: aktualisiert Nachher-Clip, Divider und Hint\n            function updateBeforeAfter() {\n                const percent = slider.value;\n\n                \/\/ Nachher-Bild clip\n                after.style.clipPath = `inset(0% 0% 0% ${percent}%)`;\n\n                \/\/ Divider Position\n                divider.style.left = `calc(${percent}% - ${divider.offsetWidth \/ 2}px)`;\n\n                \/\/ Sliderhint Position\n                const sliderRect = slider.getBoundingClientRect();\n                const handlePosition = ((percent - slider.min) \/ RANGE) * sliderRect.width;\n                hint.style.left = `${handlePosition}px`;\n            }\n\n            \/\/ Slider Event\n            slider.addEventListener('input', () =\u003e {\n                updateBeforeAfter();\n\n                \/\/ Hint ein- und ausblenden\n                hint.style.opacity = '0';\n                clearTimeout(hintTimeout);\n                hintTimeout = setTimeout(() =\u003e { hint.style.opacity = '1'; }, 5000);\n            });\n\n            \/\/ Scroll-to-Swipe (optional)\n            window.addEventListener('scroll', () =\u003e {\n                const rect = section.getBoundingClientRect();\n                const windowHeight = window.innerHeight;\n\n                if (rect.top \u003c windowHeight \u0026\u0026 rect.bottom \u003e 0) {\n                    const scrollProgress = Math.min(Math.max(0, 1 - rect.bottom \/ (rect.height + windowHeight)), 1);\n                    const newValue = START_PERCENT * (1 - scrollProgress);\n                    slider.value = newValue;\n                    updateBeforeAfter();\n                }\n            });\n\n            \/\/ Initial\n            updateBeforeAfter();\n            hint.style.opacity = '1';\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\n    \u003c\/div\u003e\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet","offer_id":48547475030281,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarz-matt","offer_id":48547475063049,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Stahl-matt","offer_id":48547475095817,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/gesamt_dfddfcf5-d2b4-43dd-9a5b-5625ac4bdb60.png?v=1770296519"},{"product_id":"personalisierte-edelstahl-armband-kostenlose-gravur-inschrift-namens-gravur","title":"NEU | Personalisierte Edelstahl-Armband + kostenlose Gravur (Inschrift-Namens-Gravur)","description":"\u003ch1 style=\"text-align: center;\"\u003e\n\u003cspan style=\"color: rgb(36, 31, 31);\"\u003eNEU \u003c\/span\u003e| Inschrift-Namens-Gravur-Armbänder  | Personalisierte Edelstahl-Armband  + kostenlose Gravur\u003c\/h1\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan style=\"color: #b46351;\"\u003eTHE MESSAGE. FÜR DEN SCHATZ. VON HERZEN.\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan style=\"color: #b46351;\"\u003eMit Liebe zum Detail gefertigt!\u003c\/span\u003e\u003c\/p\u003e\n\u003cp class=\"\" data-end=\"612\" data-start=\"301\"\u003e\u003cstrong data-end=\"341\" data-start=\"301\"\u003eMinimalistisch. Zeitlos. Persönlich.\u003c\/strong\u003e\u003cbr data-end=\"344\" data-start=\"341\"\u003eUnser geometrisches Kettenarmband aus hochwertigem Edelstahl verbindet modernes Design mit individueller Bedeutung. Die feine Gliederkette und das klare, reduzierte Design machen es zu einem stilvollen Begleiter – für Alltag, Events oder als bedeutungsvolles Geschenk.\u003c\/p\u003e\n\u003cp class=\"\" data-end=\"612\" data-start=\"301\"\u003e\u003cstrong data-end=\"638\" data-start=\"614\"\u003eIndividuelle Gravur:\u003c\/strong\u003e\u003cbr data-end=\"641\" data-start=\"638\"\u003eMach dieses Schmuckstück einzigartig. Lass Namen, Initialen oder besondere Worte gravieren und trage deine persönliche Geschichte immer bei dir.\u003c\/p\u003e\n\u003cp class=\"\" data-end=\"808\" data-start=\"789\"\u003e✨ \u003cstrong data-end=\"806\" data-start=\"791\"\u003eHighlights:\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul data-end=\"1129\" data-start=\"809\"\u003e\n\u003cli class=\"\" data-end=\"878\" data-start=\"809\"\u003e\n\u003cp class=\"\" data-end=\"878\" data-start=\"811\"\u003eHochwertiger Edelstahl – langlebig, pflegeleicht \u0026amp; hautfreundlich\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli class=\"\" data-end=\"943\" data-start=\"879\"\u003e\n\u003cp class=\"\" data-end=\"943\" data-start=\"881\"\u003eModernes, geometrisches Design für einen stilvollen Auftritt\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli class=\"\" data-end=\"999\" data-start=\"944\"\u003e\n\u003cp class=\"\" data-end=\"999\" data-start=\"946\"\u003eLänge: 19 cm + 5 cm Verlängerung für perfekten Sitz\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli class=\"\" data-end=\"1054\" data-start=\"1000\"\u003e\n\u003cp class=\"\" data-end=\"1054\" data-start=\"1002\"\u003ePersönlich gravierbar – für besondere Erinnerungen\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli class=\"\" data-end=\"1129\" data-start=\"1055\"\u003e\n\u003cp class=\"\" data-end=\"1129\" data-start=\"1057\"\u003eIdeal als liebevolles Geschenk oder für deine eigene Schmuckkollektion\u003c\/p\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cstrong data-end=\"860\" data-start=\"820\"\u003eDein Schmuckstück. Deine Geschichte.\u003c\/strong\u003e\u003cbr data-end=\"863\" data-start=\"860\"\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003ch3\u003e➡️ \u003cstrong data-end=\"247\" data-start=\"178\"\u003eJetzt gestalten und ein Schmuckstück voller Bedeutung erschaffen.\u003c\/strong\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eKoordinaten, Namen, Initialen oder Symbole. \u003cstrong\u003e\u003cem\u003eAusreichend Platz für unbegrenzte Ideen.\u003c\/em\u003e\u003c\/strong\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cbr\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\n\u003ctable class=\"elegant-table\" style=\"width: 382.844px;\"\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003cth style=\"width: 140px;\"\u003eEigenschaften\u003c\/th\u003e\n\u003cth style=\"width: 205.844px;\"\u003eDetails\u003c\/th\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eTyp\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eGeometrisches Kettenarmband mit Gravur-Option\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eMaterial\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eEdelstahl \u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eGeschlecht\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eFrauen\/Männer\u003cbr\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eFarbe\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eSilber (Edelstahl)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003eStil\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003eMode \u0026amp; Casual\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003ePlattenlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e\u003cspan\u003e1,68 cm\u003c\/span\u003e\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003ePlattenbreite\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e0,73 cm\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003eArmbandlänge\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e19 cm + 5 cm Verlängerung\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd style=\"width: 140px;\"\u003e\u003cspan\u003eGewicht\u003c\/span\u003e\u003c\/td\u003e\n\u003ctd style=\"width: 205.844px;\"\u003e\u003cspan\u003e12,73 g\u003c\/span\u003e\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cbr\u003e\n\u003c\/div\u003e\n\u003cdiv style=\"border-radius: 10px;\" class=\"scrollable-wrapper\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003ch3\u003e\n\u003cstrong\u003eBesonderheiten \/ Hinweise\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cul align=\"start\"\u003e\n\u003cli\u003e\n\u003cp class=\"detail-desc-decorate-content\" data-spm-anchor-id=\"a2g0o.detail.1000023.i2.43345d91Sv0k5M\"\u003eDas Material des Produkts besteht aus Edelstahl. Verblasst nicht nach Kontakt mit Wasser. Wird sich nicht verdunkeln. Allergien  vorbeugen!\u003c\/p\u003e\n\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003everrostet nicht\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003enicht allergisch\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003estark von Anti-Säure, Anti-Alkali\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003ekeine Verformung\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003everblasst nicht\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg height=\"550\" width=\"550\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/RoadmapGravur_480x480.png?v=1682035103\" style=\"display: block; margin-left: auto; margin-right: auto;\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cimg height=\"548\" width=\"549\" style=\"display: block; margin-left: auto; margin-right: auto;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/road2_480x480.png?v=1682036533\" alt=\"\"\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch3\u003e\n\u003cstrong\u003eGravur Schriftarten\u003c\/strong\u003e\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eDu kannst ein Symbol oder ein Zeichen auf dem Schmuckstück eingravieren lassen, z.B. das Datum eines besonderen Ereignisses. Außerdem kannst du weiterhin Initialen oder ein Monogramm auf dem Schmuckstück eingravieren lassen.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cem\u003eEs kann vorkommen, dass Du auf unserer Seite nicht die gewünschte Schriftart oder Symbole finden, die Sie für Deine Gravur benötigen. In diesem Fall zögere bitte nicht, uns darüber zu informieren. Wir werden unser Bestes tun, um Deine Wünsche zu erfüllen und die gewünschte Schriftart oder Symbole für Deine Gravur bereitzustellen. Unser Ziel ist es, dass Du mit dem Endprodukt zufrieden sind und es Dir gefällt. Daher freuen wir uns über Dein Feedback und Deine Anregungen, um unsere Dienstleistungen kontinuierlich zu verbessern.\u003c\/em\u003e\u003c\/p\u003e\n\u003ch3\u003e\u003cspan\u003eKein Dropshipping, wir führen die Arbeit selber durch und das mit Liebe\u003c\/span\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cspan\u003eWir betrachten unsere Arbeit als Kunstform und jedes Schmuckstück als ein Meisterwerk. Jedes Stück wird von uns persönlich veredelt und erhält eine individuelle Note durch unsere präzise Gravur-Technik. Mit Hingabe und Sorgfalt führen wir jeden Schritt selbst durch, um sicherzustellen, dass jedes einzelne Stück mit Liebe und Leidenschaft kreiert wird. So verleihen wir jedem Schmuckstück eine einzigartige Geschichte und schaffen eine besondere Verbindung zwischen unseren Kunden und ihrem persönlichen Schatz, die auf der gemeinsamen Wertschätzung für außergewöhnliches Handwerk und höchste Qualität basieren.\u003c\/span\u003e\u003c\/p\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Edelstahl","offer_id":55357212590345,"sku":"","price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_6683.jpg?v=1745671235"},{"product_id":"geflochtenes-plattenarmband-gravur-edelstahl","title":"Geflochtenes Plattenarmband mit Gravur | Verstellbares Edelstahl-Armband für Damen","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!-- SEO --\u003e\n\u003cp\u003e  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\u003c\/p\u003e\n\u003c!-- Fonts --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003c!-- Bootstrap Icons --\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n\/* ==============================\n   SCOPED PRODUCT STYLES\n   ============================== *\/\n.engraving-product {\n  font-family: 'Inter', sans-serif;\n  color: #111;\n}\n.engraving-product .container {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n.engraving-product .container2 {\n  max-width: 1200px;\n  width: 110%;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n\/* HERO *\/\n.engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n.engraving-badge i { font-size: 1.2rem; }\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n  line-height: 1.2;\n  margin-bottom: 20px;\n  color: #222;\n  font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n.engraving-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 40px;\n  background: #111;\n  color: #fff;\n  border-radius: 40px;\n  font-weight: 500;\n  transition: all .3s ease;\n}\n.engraving-cta:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 20px 40px rgba(0,0,0,.2);\n}\n.engraving-trust {\n  margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n  color: #777;\n}\n.engraving-trust span {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.engraving-image {\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n}\n.engraving-image img {\n  width: 140%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n}\n\n\/* HERO BILD MIT HOVER-WECHSEL (watch-image) *\/\n.engraving-product .watch-image {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: flex-start;\n}\n.engraving-product .watch-image img {\n  width: 100%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n  transition: opacity 0.4s ease;\n}\n.engraving-product .watch-image .watch-img-hover {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n  opacity: 0;\n}\n.engraving-product .watch-image:hover .watch-img-hover { opacity: 1; }\n.engraving-product .watch-image:hover .watch-img-primary { opacity: 0; }\n\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image { justify-content: center; }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n    margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n\/* SECTIONS *\/\n.engraving-section { padding: 40px 0; }\n.engraving-section h2 {\n  font-family: 'Playfair Display', serif;\n  font-size: 38px;\n  margin-bottom: 20px;\n}\n.engraving-section-desc {\n  max-width: 720px;\n  color: #666;\n  margin-bottom: 60px;\n}\n\n\/* FEATURES *\/\n.engraving-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 40px;\n}\n\n\/* SPECS *\/\n.engraving-specs {\n  background: #fff;\n  border-radius: 30px;\n  padding: 50px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 40px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.05);\n}\n.engraving-specs ul { list-style: none; padding: 0; }\n.engraving-specs li {\n  padding: 12px 0;\n  border-bottom: 1px solid #eee;\n  font-size: 15px;\n  display: flex;\n  gap: 10px;\n  align-items: center;\n}\n.engraving-specs i { color: #b6a573; }\n\n\/* CTA STRIP *\/\n.engraving-cta-strip {\n  background: linear-gradient(135deg, #111, #1c1c1c);\n  color: #fff;\n  padding: 80px 20px;\n  text-align: center;\n}\n.engraving-cta-strip h2 { color: #fff; margin-bottom: 20px; }\n.engraving-cta-strip p { color: #ccc; margin-bottom: 30px; }\n\n\/* ANIMATION *\/\n.engraving-fade {\n  opacity: 0;\n  transform: translateY(30px);\n  transition: 1s ease;\n}\n.engraving-fade.show {\n  opacity: 1;\n  transform: none;\n}\n\n@media (max-width: 900px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n}\n\n.engraving-collection-btn {\n  position: relative;\n  padding: 14px 28px;\n  background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n  color: rgb(255, 255, 255);\n  font-weight: 400;\n  font-size: 13px;\n  border-radius: 999px;\n  letter-spacing: .5px;\n  border: 1px solid rgba(220, 184, 75, 0.6);\n  cursor: pointer;\n  overflow: hidden;\n  box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n  transition: all .35s ease;\n}\n.engraving-collection-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n  color: #ffdd7a;\n}\n.engraving-collection-btn::before {\n  content: '';\n  position: absolute;\n  inset: -1px;\n  border-radius: inherit;\n  background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n  opacity: .45;\n  pointer-events: none;\n  animation: idleGlow 4.5s ease-in-out infinite;\n}\n.engraving-collection-btn::after {\n  content: '';\n  position: absolute;\n  inset: -120%;\n  background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n  opacity: 0;\n  transform: scale(.2);\n  pointer-events: none;\n}\n.engraving-collection-btn:hover::after {\n  animation: pulseGlow 1.1s ease-out forwards;\n}\n.engraving-collection-btn i { margin-left: 8px; }\n\n.micro-trust-valentine {\n  margin-top: 1.5rem;\n  font-size: 1.3rem;\n  color: #746742;\n  font-weight: 600;\n}\n\n\/* SPECS (Flex-Layout) *\/\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px;\n  flex-wrap: wrap;\n  margin-top: 30px;\n}\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: #555;\n  margin-bottom: 12px;\n}\n.engraving-specs ul li i {\n  color: #bfac79;\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n.engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    padding: 31px;\n  }\n  .engraving-specs ul { text-align: center; }\n}\n\n\/* SHIPPING \u0026 TRUST BLOCK *\/\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n  text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79;\n  margin-bottom: 18px;\n}\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n  .shipping-item { padding: 32px 22px; }\n}\n\n\/* WHY HEART STORY BLOCK *\/\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79;\n  margin-bottom: 16px;\n  display: inline-block;\n}\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n  .engraving-why-heart p { margin-bottom: 40px; }\n}\n\n\/* GRAVUR LIVE PREVIEW *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\/* Gravur-Studio: Vorderseite \/ Rückseite *\/\n    .jm-gk-sides {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n        gap: 8px;\n        margin: 0 0 16px;\n        max-width: 420px;\n    }\n.jm-gk-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-gk-side em { font-style: normal; font-weight: 500; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: #a89060; }\n.jm-gk-side small { font-size: 13px; font-weight: 600; color: #9a8a6a; min-height: 18px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .jm-gk-side {\n        min-width: 0;\n    }\n\n    .jm-gk-sum + .jm-gk-sum::before {\n        content: \" \/ \";\n    }\n\n    @media (max-width: 768px) {\n        \/* Mobile: Zeilen untereinander statt nebeneinander → nichts wird seitlich geschoben *\/\n        .jm-gk-side small {\n            white-space: normal;\n            text-overflow: clip;\n        }\n\n        .jm-gk-sum {\n            display: block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            line-height: 1.35;\n        }\n\n            .jm-gk-sum + .jm-gk-sum::before {\n                content: none;\n            }\n    }\n.jm-gk-side:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-gk-side.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-gk-side.filled small { color: #1a1410; }\n.jm-gk-side-label { position: absolute; top: 12px; left: 12px; z-index: 3; 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; pointer-events: none; }\n@media (max-width: 900px) { .jm-gk-sides { margin-left: auto; margin-right: auto; } }\n\/* 3 Zeilen je Seite *\/\n.jm-gk-line { display: grid; grid-template-columns: 78px 1fr; align-items: center; gap: 10px; max-width: 420px; margin-bottom: 8px; }\n.jm-gk-line-nr { font: 700 10px Inter, sans-serif; letter-spacing: 1px; text-transform: uppercase; color: #a89060; text-align: left; }\n.engraving-input-wrap .jm-gk-line input { width: 100%; }\n@media (max-width: 900px) { .jm-gk-line { margin-left: auto; margin-right: auto; } }\n\/* Zeile 2 + 3 unter Zeile 1 – Zeile 1 bleibt an ihrer Position *\/\n#engravingPreviewText { position: relative; display: inline-block; }\n#engravingPreviewText::after, .popup-preview-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% - 8px); transform: translateX(-50%);\n  white-space: pre; text-align: center; line-height: 1.15; font: inherit; color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n\/* ── GRAVUR-STUDIO: Position je Farbe + Seite (mit ?jmtweak=1 → Bereich „Gravur-Studio“ ermitteln) ──\n   Greift nur, wenn für die aktuelle Farbe\/Seite Werte gesetzt sind – sonst bleibt das bisherige Layout.\n   Beispiel:\n   .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] { --st-x: 50%; --st-y: 55%; --st-rot: 0deg; --st-size: 8; }\n   Mobile-Popup:\n   @media (max-width: 768px) { #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] { … } } *\/\n.engraving-preview-image.jm-st-pos, #engraving-mobile-popup .popup-preview.jm-st-pos { container-type: inline-size; }\n.engraving-preview-image.jm-st-pos { width: 100%; }\n    \/* Häkchen aus dem Textfluss nehmen → Zeile 1 springt nicht, wenn es erscheint *\/\n    .engraving-preview-text-wrap .preview-check {\n        position: absolute;\n        left: 100%;\n        top: 50%;\n        margin: 0 0 0 6px;\n        transform: translateY(-50%) scale(0.6);\n        transform-origin: left center;\n    }\n\n        .engraving-preview-text-wrap .preview-check.show {\n            transform: translateY(-50%) scale(1);\n        }\n.jm-st-pos .engraving-overlay { display: block; padding: 0; }\n.engraving-preview-image.jm-st-pos .engraving-preview-text-wrap,\n#engraving-mobile-popup .popup-preview.jm-st-pos .popup-preview-text-wrap {\n  position: absolute; left: var(--st-x, 50%); top: var(--st-y, 50%); right: auto; bottom: auto; margin: 0;\n  transform: translate(-50%, -50%) rotate(var(--st-rot, 0deg)); display: block; white-space: nowrap;\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  position: relative; top: auto; left: auto; transform: none; padding: 0 !important;\n  font-size: calc(var(--st-size, 8) * 1cqw) !important; letter-spacing: var(--st-ls, 0.08em); opacity: var(--st-op, 1);\n}\n.jm-st-pos #engravingPreviewText::after, .jm-st-pos .popup-preview-text::after {\n  top: calc(100% + var(--st-gap, 0em)); line-height: var(--st-lh, 1.15); transform: translateX(calc(-50% + var(--st-rdx, 0em)));\n}\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n}\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 3rem;\n  letter-spacing: 0.08em;\n  color: rgb(186 186 186 \/ 94%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n}\n.engraving-preview-content h2 {\n  font-size: 2.1rem;\n  margin-bottom: 12px;\n  color: #4b2f2f;\n  font-weight: 600;\n  margin-top: 25px;\n}\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select { margin-bottom: 18px; }\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.engraving-input-wrap input {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n.engraving-input-wrap input:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n  .engraving-preview-image { margin: 0 auto; }\n}\n\n\/* SYMBOL PICKER *\/\n.engraving-symbol-picker { margin-bottom: 22px; }\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n.symbol-btn:active {\n  transform: scale(1.05);\n  background: #d7bf78;\n}\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n\/* FONT PICKER *\/\n.engraving-font-select { margin-bottom: 22px; }\n.engraving-font-picker { margin-bottom: 28px; }\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n}\n.font-group { margin-bottom: 16px; }\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem;\n  transition: all 0.25s ease;\n}\n.font-btn.script { font-size: 1.2rem; }\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\n@media (max-width: 640px) {\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n    padding-bottom: 12px;\n  }\n  .font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    line-height: 1;\n  }\n  .font-btn.script { font-size: 1rem; }\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr);\n    gap: 10px;\n  }\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 10px;\n  }\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px;\n  }\n}\n\n\/* LIVE PREVIEW LINK *\/\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n\/* LUXURY SHINE BUTTON *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n  margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  color: #e6d3a3;\n  background: linear-gradient(180deg, #141414, #0d0d0d);\n  border: 1px solid rgba(201,168,92,0.45);\n  overflow: hidden;\n  isolation: isolate;\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 8px 20px rgba(0,0,0,0.35), 0 0 0 1px rgba(201,168,92,0.35);\n}\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n  width: 60%;\n  height: 220%;\n  background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.0) 35%, rgba(255,214,130,0.65) 50%, rgba(255,255,255,0.0) 65%, transparent 100%);\n  transform: skewX(-20deg);\n  opacity: 0.9;\n  animation: goldLaser 3s ease-in-out infinite;\n}\n@keyframes goldLaser {\n  0% { left: -120%; }\n  55% { left: 140%; }\n  100% { left: 140%; }\n}\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(circle at center, rgba(255,215,160,0.35), transparent 70%);\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n.luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n.luxury-rose::before {\n  background: linear-gradient(120deg, transparent 0%, rgba(255,220,210,0.0) 35%, rgba(255,190,170,0.7) 50%, rgba(255,220,210,0.0) 65%, transparent 100%);\n}\n.luxury-rose i {\n  color: #e0a88c;\n  font-size: 1.1em;\n}\n@media (max-width: 768px) {\n  .luxury-shine-btn::before { animation-duration: 2.4s; }\n}\n\n\/* PREVIEW EFFEKTE *\/\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n.engraving-preview-image.pulse { animation: engravingPulse 0.6s ease-out; }\n\n.engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 64px;\n  left: 27px;\n \n}\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n.engrave-fade { animation: engraveFade 0.9s ease-out; }\n@keyframes engraveFade {\n  0% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n  40% { text-shadow: 0 0 6px rgba(191, 172, 121, 0.45), 0 0 14px rgba(191, 172, 121, 0.25); }\n  100% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n  animation: fadeInSoft 0.6s ease-out both;\n}\n@keyframes fadeInSoft {\n  from { opacity: 0; transform: translateY(-2px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\/* MOBILE POPUP *\/\n#engraving-mobile-popup {\n  display: block;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n.popup-preview-check {\n  position: absolute;\n  top: -15px;\n  left: 65px;\n  font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n.popup-preview-check.show { opacity: 1; }\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n@media (max-width: 769px) {\n  .engraving-overlay {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n  }\n  .engraving-overlay span {\n    font-family: \"Playfair Display\", serif;\n    font-size: 1.8rem;\n    letter-spacing: 0.08em;\n    color: rgb(217 217 217 \/ 71%);\n    text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n  }\n  .engraving-preview-text-wrap {\n    position: relative;\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    bottom: 80px;\n    right: 24px;\n  }\n  .popup-preview-text-wrap {\n    position: absolute;\n    top: 42%;\n    left: 50%;\n    white-space: nowrap;\n    display: block;\n    \n  }\n}\n\n\/* HERO SUBLINE *\/\n.hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline { justify-content: center; }\n  .luxury-shine-btn { margin-top: 6px; }\n}\n\n\/* MASSE JE VARIANTE *\/\n.ring-size-visual {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 24px 0;\n}\n.ring-size {\n  width: 150px;\n  height: 72px;\n  border: 2px solid #2c2c2c;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-family: Helvetica, Arial, sans-serif;\n  background: #fff;\n  text-align: center;\n  box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n}\n.ring-size .size {\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n.ring-size .diameter {\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.1;\n}\n.ring-size .circumference {\n  font-size: 11px;\n  color: #666;\n  margin-top: 3px;\n}\n@media (max-width: 768px) {\n  .ring-size-visual {\n    gap: 10px;\n    margin: 5px 0;\n  }\n  .ring-size {\n    width: 130px;\n    height: 68px;\n    border-width: 1.5px;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.07);\n  }\n  .ring-size .size { font-size: 13px; margin-bottom: 1px; }\n  .ring-size .diameter { font-size: 11.5px; line-height: 1.1; }\n  .ring-size .circumference { font-size: 10px; margin-top: 2px; margin-bottom: 7px; }\n}\n\n\/* VORHER \/ NACHHER SLIDER *\/\n.before-after-image--container {\n  display: block;\n  position: relative;\n  width: 80%;\n  max-width: 450px;\n  margin: 20px auto;\n  border-radius: 10px;\n  overflow: hidden;\n  box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n  transition: transform 0.3s ease;\n}\n.before-after-image--container:hover { transform: scale(1.02); }\n@media screen and (max-width: 767px) {\n  .before-after-image--image { height: auto !important; }\n}\n.slider-hint {\n  position: absolute;\n  top: 75px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255,255,255,0.95);\n  padding: 6px 14px;\n  border-radius: 20px;\n  font-size: 1.2rem;\n  font-weight: 500;\n  color: #111;\n  letter-spacing: 0.02em;\n  pointer-events: none;\n  z-index: 10;\n  animation: pulse 1.5s infinite;\n  transition: opacity 0.3s ease;\n}\n@keyframes pulse {\n  0% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n  50% { transform: translate(-50%, -150%) scale(1.1); opacity: 0.6; }\n  100% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n}\n.before-after-image--media {\n  display: block;\n  position: relative;\n  overflow: hidden;\n}\n.before-after-image--image img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n.before-after-image--2 {\n  clip-path: inset(0px 0px 0px var(--percent));\n  position: absolute;\n  z-index: 3;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n.before-after-image--slider {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  left: 0;\n  z-index: 40;\n  transform: translateY(-50%);\n  opacity: 0;\n  height: 54px;\n  cursor: pointer;\n  margin-top: 10px;\n}\n.before-after-image--divider {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 10;\n  width: 2px;\n  left: calc(var(--percent) - 1px);\n  background: var(--color-line, --bg-body);\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n}\n.before-after-image--divider svg {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate3d(-50%, -50%, 0);\n  z-index: 20;\n  border-radius: 20px;\n  box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.1);\n  cursor: pointer;\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\/* ─── 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\/* Schritt 1: Farbwahl Silber \/ Vergoldet *\/\n.jm-mh-color-title { display: block; margin: 0 0 10px; font-family: 'Playfair Display', serif; font-size: 1.1rem; color: #1a1410; }\n.jm-mh-colors { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; margin-bottom: 18px; }\n.jm-mh-color { display: flex; align-items: center; gap: 10px; padding: 12px 12px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font-family: inherit; text-align: left; transition: all .25s ease; min-width: 0; }\n.jm-mh-color:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-mh-color.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-mh-color.unavailable { opacity: .45; cursor: not-allowed; }\n.jm-mh-color-dot { width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0; border: 1px solid rgba(0,0,0,.15); }\n.jm-mh-color-dot.silber    { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.vergoldet { background: radial-gradient(circle at 35% 30%, #f6e3a1, #b8902f); }\n.jm-mh-color-info { flex: 1; min-width: 0; }\n.jm-mh-color-name { display: block; font-weight: 700; font-size: 14px; color: #1a1410; }\n.jm-mh-color-desc { display: block; font-size: 11.5px; color: #9a8a6a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\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\n\/* ── LESBARKEIT + WÖLBUNG (Tweak-Panel „Wölbung \u0026amp; Lesbarkeit“) ──\n   --lv-l \/ --st-l  = Helligkeit der Schrift (0 % schwarz … 100 % weiß) – auf heller Edelstahl-Platte dunkel = gut lesbar\n   --lv-sh \/ --st-sh = Stärke des Gravur-Schattens\n   --lv-arc \/ --st-arc = Wölbung der Zeile in em (+ Enden tiefer ∩, − Enden höher ∪) – passend zur gebogenen Platte *\/\n.jm-lv-stage .jm-lv-text {\n  color: hsl(40 6% var(--lv-l, 80%));\n  text-shadow: 0 1px 1px rgba(0,0,0,var(--lv-sh, 0.6)), 0 -1px 0 rgba(255,255,255,0.25);\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  color: hsl(40 6% var(--st-l, 73%)) !important;\n  text-shadow: 0 1px 1px rgba(0,0,0,var(--st-sh, 0.6)), 0 -1px 0 rgba(255,255,255,0.25) !important;\n  backdrop-filter: none !important; background: none !important;\n}\n\/* Buchstaben der gewölbten Zeile (werden per Script erzeugt) – erben alles vom Text *\/\n.jm-arc-ch {\n  display: inline-block !important; white-space: pre; padding: 0 !important; margin: 0 !important;\n  font: inherit !important; letter-spacing: inherit !important; color: inherit !important; text-shadow: inherit !important;\n  border-radius: 0 !important; backdrop-filter: none !important; background: none !important; transition: none !important;\n  transform-origin: 50% 50%;\n}\n\/* Armband: Farbpunkte (Hero + Schritt 1) *\/\n.jm-arm-dot { width: 12px; height: 12px; border-radius: 50%; display: inline-block; border: 1px solid rgba(0,0,0,.15); }\n.jm-arm-dot.rot, .jm-mh-color-dot.rot { background: radial-gradient(circle at 35% 30%, #e0626a, #9e1f2a); }\n.jm-arm-dot.schwarz, .jm-mh-color-dot.schwarz { background: radial-gradient(circle at 35% 30%, #555, #111); }\n.jm-arm-dot.gruen, .jm-mh-color-dot.gruen { background: radial-gradient(circle at 35% 30%, #6fae7c, #23592f); }\n.jm-arm-font-hint { margin: 6px 0 0; font-size: 12.5px; color: #8a7448; }\n.jm-arm-font-hint i { color: #c9a84c; margin-right: 4px; }\n\/* Mobile: Hero-Bild nicht breiter als der Bildschirm (Basis-CSS: width 140 %) *\/\n@media (max-width: 768px) { .engraving-image img { width: 100%; max-width: 100%; } }\n\/* Hero: Größen kompakt *\/\n.jm-hz-hero-sizes { display: flex; flex-wrap: wrap; gap: 10px; margin: -8px 0 22px; }\n.jm-hz-hero-size { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border: 1.5px solid #e2d8c4; border-radius: 999px; background: #fff; font: 500 13px Inter, sans-serif; color: #7a6a4a; }\n.jm-hz-hero-size strong { color: #1a1410; font-weight: 700; }\n.jm-hz-hero-size--new { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-hero-size em { font-style: normal; font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #fff; background: #c9a84c; padding: 2px 7px; border-radius: 999px; }\n@media (max-width: 900px) { .jm-hz-hero-sizes { justify-content: center; } }\n\/* Hero: Link „Zu den Produktdetails“ *\/\n.jm-hz-details-link { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; margin-top: 14px; font: 600 14px Inter, sans-serif; color: #8a7448; text-decoration: none; border-bottom: 1px solid rgba(201,168,76,0.5); padding-bottom: 2px; transition: color .2s ease, border-color .2s ease; }\n.jm-hz-details-link:hover { color: #1a1410; border-color: #c9a84c; }\n.jm-hz-details-link .bi-arrow-down { transition: transform .2s ease; }\n.jm-hz-details-link:hover .bi-arrow-down { transform: translateY(2px); }\n#jm-produktdetails { scroll-margin-top: 90px; }\n@media (max-width: 900px) { .jm-hz-details-link { align-self: center; } }\n\/* ── HERZANHÄNGER-KONFIGURATOR: Ergänzungen ── *\/\n\/* Mobile: Produktdetails (container2 = 110 %) machten die Seite breiter als den Bildschirm → alles wirkte verrutscht *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { width: 100%; max-width: 100%; box-sizing: border-box; }\n  .jm-cfg-wrap, .jm-cfg-card { max-width: 100%; }\n  #jm-cfg-card-2 .jm-cfg-card-body { padding-left: 14px; padding-right: 14px; }\n  \/* Schritt 2 mobil: eine Spalte, nichts breiter als die Karte *\/\n  #jm-cfg-card-2, #jm-cfg-card-2 .jm-cfg-card-body { overflow: hidden; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1fr); }\n  .jm-cfg-s2-wrap .engraving-preview-image, .jm-cfg-s2-wrap .engraving-preview-content { min-width: 0; max-width: 100%; }\n  .jm-cfg-s2-wrap .engraving-badge { white-space: normal; }\n  .jm-cfg-s2-wrap .font-group { min-width: 0; }\n  .jm-cfg-s2-wrap .font-group-buttons { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }\n  .jm-cfg-s2-wrap .font-btn { white-space: nowrap; }\n}\n\/* Desktop: Produktdetails als 2 gleich breite Spalten (Flex mit Umbruch hat die 2. Liste unter die 1. geschoben) *\/\n@media (min-width: 769px) {\n  .engraving-product .container2 { width: 100%; box-sizing: border-box; }\n  .engraving-product .engraving-specs { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 48px; align-items: start; }\n  .engraving-product .engraving-specs ul { min-width: 0; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; justify-content: flex-start; margin: 10px 0 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { flex-basis: 100%; text-align: left; font-size: 12px; margin: 0; }\n}\n\/* Mobile: Produktdetails – Theme gibt .engraving-product bereits 30 px Rand → hier keinen zweiten Innenabstand,\n   Liste linksbündig, Größen-Kacheln nebeneinander über die volle Breite *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { padding-left: 0; padding-right: 0; }\n  .engraving-product .engraving-specs { width: 100%; box-sizing: border-box; padding: 20px 16px; gap: 0; align-items: stretch; margin-left: 0; margin-right: 0; }\n  .engraving-product .engraving-specs ul { width: 100%; text-align: left; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; justify-content: flex-start; text-align: left; min-width: 0; padding: 10px 0; margin-bottom: 0; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; margin: 8px 0 0; }\n  .engraving-product .engraving-specs ul li .ring-size { width: auto; min-width: 0; height: auto; padding: 8px 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { grid-column: 1 \/ -1; text-align: left; margin: 2px 0 0; font-size: 11px !important; line-height: 1.4; }\n}\n\/* Schritt 1: Spalten dürfen nicht über die Karte hinauswachsen, Bild bleibt beim Scrollen sichtbar *\/\n#jm-cfg-card-1 { max-width: 920px; }\n#jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 36px; align-items: start; }\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr); gap: 18px; } }\n#jm-cfg-card-1 .jm-cfg-s1-left, #jm-cfg-card-1 .jm-cfg-s1-right { min-width: 0; }\n#jm-cfg-card-1 .jm-cfg-s1-left p { margin-bottom: 16px; }\n@media (min-width: 641px) { #jm-cfg-card-1 .jm-cfg-s1-right { position: sticky; top: 20px; } }\n\/* Mobile: Bild zuerst, dann Auswahl *\/\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-right { order: -1; } #jm-cfg-card-1 .jm-cfg-ring-img-wrap { max-width: 320px; margin: 0 auto; } }\n\/* Farbkarten: Punkt oben, Name + Zusatz darunter – lange Namen brechen sauber um *\/\n.jm-hz-colors .jm-mh-color { flex-direction: column; justify-content: flex-start; text-align: center; gap: 6px; padding: 12px 6px 10px; }\n.jm-hz-colors .jm-mh-color-info { width: 100%; }\n.jm-hz-colors .jm-mh-color-name { font-size: 13.5px; line-height: 1.25; overflow-wrap: anywhere; }\n.jm-hz-colors .jm-mh-color-desc { white-space: normal; overflow: visible; font-size: 11px; line-height: 1.3; margin-top: 2px; }\n\/* Kurzübersicht *\/\n.jm-hz-facts { list-style: none; margin: 4px 0 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }\n.jm-hz-facts li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid #ece4d6; border-radius: 10px; background: #faf9f7; min-width: 0; }\n.jm-hz-facts i { width: 28px; height: 28px; flex-shrink: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(201,168,76,0.12); color: #b39548; font-size: 13px; }\n.jm-hz-facts strong { display: block; font-size: 13px; color: #1a1410; line-height: 1.25; }\n.jm-hz-facts small { display: block; font-size: 11px; color: #9a8a6a; line-height: 1.3; }\n@media (max-width: 380px) { .jm-hz-facts { grid-template-columns: 1fr; } }\n.jm-hz-colors { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.jm-mh-color-dot.edelstahl { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.rosegold  { background: radial-gradient(circle at 35% 30%, #f7d6c8, #b9786a); }\n@media (max-width: 480px) {\n  .jm-hz-colors .jm-mh-color { flex-direction: column; text-align: center; gap: 6px; padding: 10px 6px; }\n  .jm-hz-colors .jm-mh-color-desc { display: none; }\n}\n#jm-cfg-card-1 .jm-hz-size-wrap { max-width: none; margin: 0 0 18px; }\n#jm-cfg-card-1 .jm-hz-size-title, .jm-hz-color-title { display: block; margin: 0 0 10px; font: 600 1.1rem 'Playfair Display', serif; letter-spacing: 0; text-transform: none; color: #1a1410; }\n.jm-cfg-s3-gravur-side-block + .jm-cfg-s3-gravur-side-block { margin-top: 12px; padding-top: 12px; border-top: 1px dashed rgba(201,168,76,0.25); }\n.jm-cfg-s3-gravur-lines { display: block; line-height: 1.35; }\n.jm-cfg-s3-gravur-lines span { display: block; }\n.jm-cfg-s3-price-fallback { font-family: 'Playfair Display', serif; font-size: 2rem; color: #1a1410; font-weight: 700; }\n.jm-cfg-btn-next:disabled { opacity: .4; cursor: not-allowed; }\n.jm-cfg-s2-wrap .engraving-preview-content .engraving-micro-trust { margin-top: 18px; }\n\/* Schritt 2 (Desktop): großes Bild links, beim Scrollen durch die Optionen rechts mittig im Blick\n   – Karte darf nicht „overflow: hidden“ haben, sonst funktioniert sticky nicht *\/\n#jm-cfg-card-2 { overflow: visible; }\n#jm-cfg-card-2 .jm-cfg-card-body { overflow: visible; }\n@media (min-width: 901px) {\n  #jm-cfg-card-2 { max-width: 1180px; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 48px; align-items: start; }\n  .jm-cfg-s2-wrap .engraving-preview-image { max-width: none; width: 100%; position: sticky; top: calc(50vh - min(26vw, 300px)); }\n  .jm-cfg-s2-wrap .engraving-preview-image \u003e img, .jm-cfg-s2-wrap .engraving-preview-image \u003e .jm-st-zoom \u003e img { width: 100%; }\n  \/* Fallback, wenn ein Theme-Container sticky verhindert: Bild wird per JS mitgeführt *\/\n  .jm-cfg-s2-wrap.jm-no-sticky .engraving-preview-image { position: relative; top: auto; will-change: transform; }\n}\n\n\/* =========================\n   KONFIGURATOR: Auswahl-Karten (Größe\/Farbe) im Gravur-Studio\n========================= *\/\n.jm-hz-size-wrap { margin: 0 0 14px; max-width: 420px; }\n.jm-hz-size-title { display: block; margin: 0 0 8px; font: 700 10px Inter, sans-serif; letter-spacing: 1.5px; text-transform: uppercase; color: #a89060; }\n.jm-hz-sizes { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 8px; }\n.jm-hz-size { display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; padding: 10px 8px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font: 700 14px Inter, sans-serif; color: #1a1410; transition: all .25s ease; }\n.jm-hz-size small { font-size: 10.5px; font-weight: 500; color: #9a8a6a; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.jm-hz-size em { font-style: normal; font-size: 9px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #c9a84c; }\n.jm-hz-size:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-size.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-hz-size.unavailable { opacity: .45; }\n@media (max-width: 900px) { .jm-hz-size-wrap { margin-left: auto; margin-right: auto; } }\n\/* Nur 1 Zeile je Seite (Formular ohne Zeile 2\/3): Zeilennummer ausblenden *\/\n.jm-gk-lines-1 .jm-gk-line { grid-template-columns: 1fr; }\n.jm-gk-lines-1 .jm-gk-line-nr { display: none; }\n\n\/* ── BILD-ZOOM (Tweak-Panel „Bild-Zoom“): Bild im Rahmen vergrößern\/verkleinern + Ausschnitt verschieben ──\n   --st-zoom (1 = Originalgröße), --st-px \/ --st-py (Verschiebung in % der Bildgröße) *\/\n.jm-st-zoom { position: relative; overflow: hidden; line-height: 0; background: #000; }\n.jm-st-zoom \u003e img { display: block; transform: translate(var(--st-px, 0%), var(--st-py, 0%)) scale(var(--st-zoom, 1)); transform-origin: center center; }\n\/* ── GRAVUR-STUDIO: Startposition für alle Bandfarben (Platte mittig) ──\n   Mit ?jmtweak=1 → Bereich „Gravur-Studio“ je Farbe\/Seite einstellen und die ausgegebene Regel hier ergänzen. *\/\n.engraving-preview-image[data-side] {\n  --st-x: 50%;\n  --st-y: 50%;\n  --st-rot: 0deg;\n  --st-size: 5;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n@media (max-width: 768px) {\n  #engraving-mobile-popup .popup-preview[data-side] {\n    --st-x: 50%;\n    --st-y: 50%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv class=\"engraving-product\"\u003e\n\u003c!-- =========================\n     HERO: Geflochtenes Plattenarmband\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n\u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n\u003cdiv class=\"engraving-hero-grid\"\u003e\n\u003c!-- Textbereich --\u003e\n\u003cdiv class=\"engraving-hero-text\"\u003e\n\u003ch1\u003eGeflochtenes Plattenarmband mit Gravur\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 \u003ca href=\"#jm-cfg-wrap\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e Live-Vorschau ansehen \u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003eFein. Elegant. Persönlich. Zartes Damen-Armband mit edler Edelstahl-Platte an einem geflochtenen Band – mit Namen, Initialen oder Datum graviert.\u003c\/p\u003e\n\u003c!-- Bandfarben kompakt (Auswahl erfolgt im Produktformular \/ Gravur-Studio) --\u003e\n\u003cdiv class=\"jm-hz-hero-sizes\"\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cspan class=\"jm-arm-dot rot\"\u003e\u003c\/span\u003e\u003cstrong\u003eRot\u003c\/strong\u003e\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cspan class=\"jm-arm-dot schwarz\"\u003e\u003c\/span\u003e\u003cstrong\u003eSchwarz\u003c\/strong\u003e\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cspan class=\"jm-arm-dot gruen\"\u003e\u003c\/span\u003e\u003cstrong\u003eGrün\u003c\/strong\u003e\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003everstellbar \u003cstrong\u003e14–21 cm\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003cdiv class=\"micro-trust-valentine\"\u003eSicher · Persönlich · Handgefertigt\u003c\/div\u003e\n\u003c!-- Trust Icons (max. 4) --\u003e\n\u003cdiv class=\"engraving-trust\"\u003e\n\u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl-Platte\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e Verstellbar\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-droplet\"\u003e\u003c\/i\u003e Rostfrei \u0026amp; formstabil\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e Ideal als Geschenk\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"#jm-produktdetails\" class=\"jm-hz-details-link\"\u003e\u003ci class=\"bi bi-list-check\"\u003e\u003c\/i\u003e Zu den Produktdetails \u003ci class=\"bi bi-arrow-down\"\u003e\u003c\/i\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Bildbereich: Bild kommt automatisch aus dem Hauptbild des Produkts --\u003e\n\u003cdiv class=\"engraving-image\"\u003e\n\u003cimg id=\"jmArmHeroImg\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Geflochtenes Plattenarmband mit Gravur aus Edelstahl\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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 bi-award\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eFamilienunternehmen 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\u003c!-- =========================\n     WHY STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n\u003cdiv class=\"container\"\u003e\n\u003ch2\u003eThe Message. Für den Schatz. Von Herzen.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, das Geschichten erzählt: Verewige Namen, Initialen oder ein bedeutungsvolles Datum auf der eleganten Platte – und trage deine persönliche Geschichte immer bei dir.\u003c\/p\u003e\n\u003cdiv class=\"engraving-why-grid\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiger Edelstahl\u003c\/h3\u003e\n\u003cp\u003eLanglebig, hautfreundlich \u0026amp; pflegeleicht – die Platte rostet nicht, verfärbt sich nicht und bleibt formstabil.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eName, Initialen, Koordinaten, Datum oder Symbol – kostenlos auf der Platte graviert.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n\u003ch3\u003ePerfekter Sitz\u003c\/h3\u003e\n\u003cp\u003eDas geflochtene Band ist stufenlos von ca. 14 bis 21 cm verstellbar – angenehm zu tragen, für fast jedes Handgelenk.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n\u003ch3\u003eVon Herzen geschenkt\u003c\/h3\u003e\n\u003cp\u003eZart, feminin und persönlich – vom Alltag bis zu besonderen Momenten. Ein Geschenk, das bleibt.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n\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\n\u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n\u003cp\u003eJede Gravur entsteht in unserem Familienbetrieb – \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\u003c\/p\u003e\n\u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"shipping-item\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n\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\u003cp\u003eSollte etwas nicht passen, findest du mit uns unkompliziert eine Lösung.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- FEATURES --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n\u003cdiv class=\"container engraving-hero-text\"\u003e\n\u003ch1\u003eMit Liebe zum Detail gefertigt\u003c\/h1\u003e\n\u003cp class=\"engraving-section-desc\"\u003eUnser zartes Damen-Armband verleiht deinem Look eine stilvolle, persönliche Note. Das filigrane Design mit edler Platte macht es zu einem besonderen Schmuckstück für jeden Anlass. Dein Schmuckstück – so einzigartig wie du.\u003c\/p\u003e\n\u003cdiv class=\"engraving-features\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n\u003ch3\u003ePersönliche Gravur\u003c\/h3\u003e\n\u003cp\u003eKoordinaten, Namen, Initialen oder Symbole – die Platte bietet Platz für deine Idee.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e\n\u003ch3\u003eDrei Bandfarben\u003c\/h3\u003e\n\u003cp\u003eRot, Schwarz oder Grün – geflochtenes Baumwollband, passend zu deinem Stil.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\n\u003ch3\u003eVerstellbar\u003c\/h3\u003e\n\u003cp\u003eCa. 14–21 cm Armbandlänge – einfach anpassen, bequem tragen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n\u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n\u003cp\u003ePerfekt als persönliches Geschenk – 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\u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\" id=\"jm-produktdetails\"\u003e\n\u003cdiv class=\"container2 engraving-hero-text\"\u003e\n\u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\u003cdiv class=\"engraving-specs\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-bookmark\"\u003e\u003c\/i\u003e \u003cstrong\u003eTyp:\u003c\/strong\u003e Plattenarmband mit geflochtenem Band, verstellbar\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl-Platte · Band aus Baumwolle\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e \u003cstrong\u003eBandfarben:\u003c\/strong\u003e Rot · Schwarz · Grün\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003ePlatte:\u003c\/strong\u003e\n\u003cdiv class=\"ring-size-visual\"\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eLänge\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e3,5 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eEdelstahl-Platte\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eBreite\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e0,5 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003egravierbar\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"engraving-preview-note\"\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Hinweis: Maße können leicht abweichen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eArmbandlänge:\u003c\/strong\u003e ca. 14–21 cm (verstellbar)\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 4 g\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Damen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e \u003cstrong\u003eStil:\u003c\/strong\u003e Mode \u0026amp; Casual\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos · Vorderseite · 1 Zeile, max. 11 Zeichen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e \u003cstrong\u003ePlatte:\u003c\/strong\u003e rostet nicht · verfärbt sich nicht · formstabil · säure- \u0026amp; laugenbeständig\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-droplet\"\u003e\u003c\/i\u003e \u003cstrong\u003ePflege:\u003c\/strong\u003e Das Baumwollband möglichst nicht nass werden lassen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; von Herzen\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n========================== --\u003e\n\u003c!-- =========================\n     3-SCHRITT KONFIGURATOR: Schmuckstück → Gravur → Bestätigung\n========================== --\u003e\n\u003cdiv class=\"jm-cfg-wrap\" id=\"jm-cfg-wrap\"\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\"\u003eDein Armband. Deine Botschaft.\u003c\/h2\u003e\n\u003cp class=\"jm-cfg-subline\"\u003eGestalte in 3 Schritten dein persönliches Armband – Bandfarbe wählen, Platte gravieren, alles prüfen. 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: Bandfarbe --\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 Plattenarmband\u003c\/h3\u003e\n\u003cp\u003eEdelstahl-Platte an einem geflochtenen Baumwollband – wähle deine Bandfarbe. Die Auswahl wird direkt ins Produktformular übernommen.\u003c\/p\u003e\n\u003c!-- FARBE (wird aus den Varianten erzeugt, synchron zum Produktformular) --\u003e\n\u003cdiv id=\"jm-hz-color-wrap\" hidden\u003e\n\u003cspan class=\"jm-hz-color-title\"\u003eWähle deine Bandfarbe\u003c\/span\u003e\n\u003cdiv class=\"jm-mh-colors jm-hz-colors\" id=\"jm-hz-colors\" role=\"radiogroup\" aria-label=\"Bandfarbe wählen\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- KURZÜBERSICHT (kompakt, 2 Spalten) --\u003e\n\u003cul class=\"jm-hz-facts\"\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003ePlatte 3,5 × 0,5 cm\u003c\/strong\u003e\u003csmall\u003eEdelstahl · ca. 4 g\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eVerstellbar\u003c\/strong\u003e\u003csmall\u003eca. 14–21 cm\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eGravur gratis\u003c\/strong\u003e\u003csmall\u003e1 Zeile · max. 11 Zeichen\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eRostfrei\u003c\/strong\u003e\u003csmall\u003everfärbt sich nicht\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\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=\"hzCfgImg\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Plattenarmband Vorderseite\"\u003e\n\u003cspan class=\"jm-cfg-ring-img-label\" id=\"hzCfgLabel\"\u003eRot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"jm-cfg-ring-img-caption\"\u003eBand \u003cspan class=\"js-hz-color\"\u003eRot\u003c\/span\u003e · Platte 3,5 × 0,5 cm\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 type=\"button\" class=\"jm-cfg-btn-back\" hidden\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Zurück\u003c\/button\u003e\n\u003cbutton type=\"button\" 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: Gravur-Studio (Vorder-\/Rückseite, je 1 Zeile) --\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\u003cspan class=\"engraving-badge visible-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003cdiv class=\"engraving-preview-grid\"\u003e\n\u003c!-- IMAGE --\u003e\n\u003cdiv class=\"engraving-preview-image\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg id=\"engravingProductImage\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Plattenarmband ohne Gravur\"\u003e\n\u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n\u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e \u003cspan class=\"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\u003cp class=\"engraving-preview-note\"\u003e✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- CONTENT --\u003e\n\u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\u003cspan class=\"engraving-badge hidden-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003ch2\u003eMach dein Armband einzigartig\u003c\/h2\u003e\n\u003cp\u003eGib deine gewünschte Gravur ein und sieh sofort, wie sie auf der Platte wirkt – Name, Initialen, Datum oder Koordinaten.\u003c\/p\u003e\n\u003c!-- VORDERSEITE \/ RÜCKSEITE --\u003e\n\u003cdiv class=\"jm-gk-sides\" role=\"tablist\" aria-label=\"Gravurseite wählen\"\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side active\" data-side=\"front\" role=\"tab\" aria-selected=\"true\"\u003eVorderseite\u003csmall id=\"jm-gk-side-front\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side\" data-side=\"back\" role=\"tab\" aria-selected=\"false\"\u003eRückseite \u003cem\u003eoptional\u003c\/em\u003e\u003csmall id=\"jm-gk-side-back\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c!-- INPUT --\u003e\n\u003cdiv class=\"engraving-input-wrap\" id=\"jmGkInputWrap\"\u003e\n\u003clabel for=\"engravingInput\" id=\"jmGkInputLabel\"\u003eGravur Vorderseite\u003c\/label\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e1 · oben\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. Für immer ♥\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e2 · Mitte\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput2\" maxlength=\"11\" placeholder=\"z. B. Für immer\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e3 · unten\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput3\" maxlength=\"11\" placeholder=\"z. B. 12.06.24\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003csmall id=\"jmGkHint\"\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich · Zeilen 2 + 3 optional\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\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 \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"∞\"\u003e∞\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"★\"\u003e★\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"✝\"\u003e✝\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"❥\"\u003e❥\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n\u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n\u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e \u003c!-- SERIF --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family: 'Times New Roman';\"\u003e Times New Roman \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family: Georgia;\"\u003e Georgia \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SANS --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family: Arial;\"\u003e Arial \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family: Helvetica;\"\u003e Helvetica \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MONOSPACE --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family: 'Courier New';\"\u003e Courier New \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family: 'Lucida Console';\"\u003e Lucida Console \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SCRIPT --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family: 'Allura';\"\u003e Allura \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family: 'Alex Brush';\"\u003e Alex Brush \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family: 'Kaushan Script';\"\u003e Kaushan Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HANDWRITING --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family: 'Pacifico';\"\u003e Pacifico \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family: 'Indie Flower';\"\u003e Indie Flower \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family: 'Dancing Script';\"\u003e Dancing Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003cp class=\"jm-arm-font-hint\"\u003e\u003ci class=\"bi bi-chat-heart\"\u003e\u003c\/i\u003e Deine Wunsch-Schriftart oder ein Symbol fehlt? Schreib uns – wir machen es möglich.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MICRO TRUST --\u003e\n\u003cdiv class=\"engraving-micro-trust\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\u003c\/div\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 type=\"button\" 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 type=\"button\" class=\"jm-cfg-btn-next\" id=\"jm-cfg-next-2\" disabled\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: Bestätigung --\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=\"Plattenarmband mit Gravur\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"jm-cfg-s3-product-name\"\u003eGeflochtenes Plattenarmband 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\"\u003eBandfarbe\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-color\"\u003eRot\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003ePlatte\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-size\"\u003eEdelstahl · 3,5 × 0,5 cm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003eLänge · Gewicht\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-weight\"\u003eca. 14–21 cm verstellbar · ca. 4 g\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\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 js-scroll-to-form jm-cfg-s3-cta\" id=\"jm-cfg-s3-cta-btn\" data-target=\"#product-form\" style=\"width:100%;justify-content:center;font-size:15px;padding:18px 32px;\"\u003e\u003ci class=\"bi bi-bag-check\"\u003e\u003c\/i\u003e Gravur übernehmen \u0026amp; zum Warenkorb \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\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 type=\"button\" 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\u003c\/div\u003e\n\u003c!-- \/jm-cfg-wrap --\u003e\n\u003c!-- End Block --\u003e\n\u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"font-size: 6rem; color: #c0a860;\"\u003e\u003c\/i\u003e\n\u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, 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\u003c\/section\u003e\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n\u003cdiv class=\"popup-preview\" style=\"position: relative; margin-bottom: 10px;\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkPopupSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width: 100%;\"\u003e\n\u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"popup-preview-text-wrap\"\u003e\n\u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\u003e \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 Zur Bestätigung \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\/* =========================\n   GRAVURFELDER IM PRODUKTFORMULAR finden\n   Zeile n einer Seite: #gravur_\u003cSeite\u003e_\u003cn\u003e · [data-gravur-seite][data-gravur-zeile]\n   Zeile 1 zusätzlich: #gravurtext_vorderseite \/ #gravurtext_rueckseite (Standard-IDs)\n========================= *\/\nwindow.jmGravurFeld = function (seite, n) {\n  var back = seite === \"Rückseite\";\n  var sels = [\"#gravur_\" + seite + \"_\" + n,\n              '[data-gravur-seite=\"' + seite + '\"][data-gravur-zeile=\"' + n + '\"]'];\n  if (n === 1) sels = sels.concat(back\n    ? [\"#gravurtext_rueckseite\", \"#gravurtext_rückseite\", 'input[data-gravur-seite=\"Rückseite\"]', \"#gravurtext_2\"]\n    : [\"#gravurtext_vorderseite\", \"#gravurtext_oberfläche\", 'input[data-gravur-seite=\"Vorderseite\"]', \"#gravurtext\"]);\n  for (var i = 0; i \u003c sels.length; i++) {\n    try { var el = document.querySelector(sels[i]); if (el \u0026\u0026 !el.closest(\"#engraving-preview\")) return el; } catch (e) {}\n  }\n  return null;\n};\n\/* Herzanhänger: 3 Zeilen je Seite (wie Geldklammer: #gravur_Vorderseite_1..3 \/ #gravur_Rückseite_1..3) *\/\nwindow.jmGravurZeilen = function () { return 1; };   \/* Platte 0,5 cm hoch → 1 Zeile je Seite *\/\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = window.jmGravurFeld(\"Vorderseite\", 1);\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      \/* Gravur-Studio: Vorder- und Rückseite je 3 Zeilen übernehmen (nur Seiten mit Inhalt) *\/\n      const gkSides = window.jmGkSides;\n      if (gkSides) {\n        gkSides.save \u0026\u0026 gkSides.save();\n        const studioFont = previewText ? window.getComputedStyle(previewText).fontFamily : \"\";\n        [[\"front\", \"Vorderseite\"], [\"back\", \"Rückseite\"]].forEach(([k, seite]) =\u003e {\n          if (!gkSides.has(k)) return;\n          \/* Zeile ohne eigenes Formularfeld → an Zeile 1 anhängen („A + M | Ewig | 2024“), damit nichts verloren geht *\/\n          const extra = [];\n          gkSides[k].forEach((val, n) =\u003e {\n            const f = window.jmGravurFeld(seite, n + 1);\n            if (!f) { if (n \u003e 0 \u0026\u0026 val.trim()) extra.push(val.trim()); return; }\n            f.value = val.trim();\n            if (studioFont) f.style.fontFamily = studioFont;\n            f.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          });\n          const f1 = window.jmGravurFeld(seite, 1);\n          if (f1 \u0026\u0026 extra.length) {\n            f1.value = [f1.value.trim()].concat(extra).filter(Boolean).join(\" | \");\n            f1.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          }\n        });\n      }\n      if (gravurInput \u0026\u0026 previewText \u0026\u0026 !gkSides) {\n        gravurInput.value = previewText.textContent.trim();\n        gravurInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n      }\n      if (gravurInput \u0026\u0026 previewText) {\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n        const back3 = document.querySelector(\"#gravurtext_3\");\n        if (back3) back3.style.fontFamily = fontFamily;\n        const back4 = document.querySelector(\"#gravurtext_4\");\n        if (back4) back4.style.fontFamily = fontFamily;\n        const back5 = document.querySelector(\"#gravurtext_5\");\n        if (back5) back5.style.fontFamily = fontFamily;\n        const back6 = document.querySelector(\"#gravurtext_6\");\n        if (back6) back6.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      const maxLen = input.maxLength \u003e 0 ? input.maxLength : MAX_LENGTH;\n      if (input.value.length + symbol.length \u003e maxLen) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n      const back3 = document.getElementById(\"gravurtext_3\");\n      if (back3) back3.style.fontFamily = font;\n      const back4 = document.getElementById(\"gravurtext_4\");\n      if (back4) back4.style.fontFamily = font;\n      const back5 = document.getElementById(\"gravurtext_5\");\n      if (back5) back5.style.fontFamily = font;\n      const back6 = document.getElementById(\"gravurtext_6\");\n      if (back6) back6.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Hero-Link „Zu den Produktdetails“\n========================= *\/\ndocument.querySelectorAll('.jm-hz-details-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    const t = document.getElementById('jm-produktdetails');\n    if (!t) return;\n    e.preventDefault();\n    t.classList.add('show');   \/* Einblend-Animation sofort auslösen *\/\n    t.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\n\/* Gilt für ALLE „Live-Vorschau ansehen“-Links der Seite – auch den im Produkt-Template\n   (href=\"#engraving-preview\"). Nur wenn diese Beschreibung den Konfigurator (#jm-cfg-wrap) hat,\n   wird zum Konfigurator gescrollt; auf anderen Produkten passiert hier nichts. *\/\ndocument.addEventListener('click', e =\u003e {\n  const link = e.target.closest \u0026\u0026 e.target.closest('a[href=\"#engraving-preview\"], a[href=\"#jm-cfg-wrap\"], .live-preview-link');\n  if (!link) return;\n  const wrap = document.getElementById('jm-cfg-wrap');\n  if (!wrap) return;\n  e.preventDefault();\n  e.stopPropagation();\n  wrap.scrollIntoView({ behavior: 'smooth', block: 'start' });\n}, true);\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\u003cscript\u003e\n\/* =========================\n   GRAVUR-STUDIO: VORDERSEITE \/ RÜCKSEITE · je 3 Zeilen (oben \/ Mitte \/ unten)\n   (Ergänzung – nutzt das vorhandene Eingabefeld #engravingInput als Zeile 1)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const lineInputs = [\"engravingInput\", \"engravingInput2\", \"engravingInput3\"].map(id =\u003e document.getElementById(id));\n  const input = lineInputs[0];\n  const tabs  = document.querySelectorAll(\".jm-gk-side\");\n  if (!input || !tabs.length) return;\n\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay     = document.getElementById(\"engravingOverlay\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText   = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-text\");\n  const studioImg   = document.getElementById(\"engravingProductImage\");\n  const popupImg    = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-image\");\n  \/* Zoom-Rahmen um Studio- und Popup-Bild (Bild-Zoom per --st-zoom \/ --st-px \/ --st-py, Tweak-Panel) *\/\n  [studioImg, popupImg].forEach(img =\u003e {\n    if (!img || img.parentElement.classList.contains(\"jm-st-zoom\")) return;\n    const z = document.createElement(\"div\");\n    z.className = \"jm-st-zoom\";\n    z.style.borderRadius = getComputedStyle(img).borderRadius;\n    img.parentNode.insertBefore(z, img);\n    z.appendChild(img);\n  });\n\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n\n  \/* ── Herzanhänger: Zeilen + Zeichen aus dem Produktformular übernehmen ── *\/\n  const LINES = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n  const hasBack = false;   \/* Plattenarmband: nur Vorderseite → Tabs Vorder-\/Rückseite ausgeblendet *\/\n  (function setupLines() {\n    const wrap = document.getElementById(\"jmGkInputWrap\");\n    if (wrap) wrap.classList.toggle(\"jm-gk-lines-1\", LINES === 1);\n    lineInputs.forEach((i, n) =\u003e {\n      if (!i) return;\n      const row = i.closest(\".jm-gk-line\");\n      if (row) row.style.display = n \u003c LINES ? \"\" : \"none\";\n      \/* Studio: fest max. 11 Zeichen (Formularfeld bitte ebenfalls maxlength=\"11\") *\/\n    });\n    if (LINES === 1) input.placeholder = \"z. B. Für immer ♥\";\n    const max = lineInputs[0] \u0026\u0026 lineInputs[0].maxLength \u003e 0 ? lineInputs[0].maxLength : 11;\n    const hint = document.getElementById(\"jmGkHint\");\n    if (hint) hint.innerHTML = (LINES === 1 ? \"Max. \" + max + \" Zeichen\" : \"Je Zeile max. \" + max + \" Zeichen\")\n      + \" · Zahlen \u0026amp; Symbole möglich\" + (LINES \u003e 1 ? \" · Zeile\" + (LINES === 3 ? \"n 2 + 3\" : \" 2\") + \" optional\" : \"\")\n      + (hasBack ? \" · Rückseite optional\" : \"\");\n    const sideTabs = document.querySelector(\".jm-gk-sides\");\n    if (sideTabs \u0026\u0026 !hasBack) sideTabs.style.display = \"none\";\n  })();\n  const S = window.jmGkSides = { front: [\"\", \"\", \"\"], back: [\"\", \"\", \"\"], side: \"front\" };\n  let focused = input;\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"focus\", () =\u003e { focused = i; }));\n\n  S.has  = k =\u003e S[k].some(v =\u003e v.trim());\n  S.save = function () { S[S.side] = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\"); renderTabs(); };\n\n  function renderTabs() {\n    [\"front\", \"back\"].forEach(k =\u003e {\n      const sm = document.getElementById(\"jm-gk-side-\" + k);\n        if (sm) {\n            \/* jede Zeile als eigenes Element → Desktop: „a \/ b \/ c“, Mobile: untereinander *\/\n            const filled = S[k].filter(v =\u003e v.trim());\n            sm.textContent = \"\";\n            if (!filled.length) sm.textContent = \"–\";\n            filled.forEach(v =\u003e {\n                const el = document.createElement(\"span\");\n                el.className = \"jm-gk-sum\";\n                el.textContent = v.trim();\n                sm.appendChild(el);\n            });\n        }\n      const b = document.querySelector('.jm-gk-side[data-side=\"' + k + '\"]');\n      if (b) b.classList.toggle(\"filled\", S.has(k));\n    });\n  }\n\n  \/* Vorschau: Zeile 1 im Text, Zeile 2 + 3 darunter (data-rest) *\/\n  function restOf(l) { return l[2].trim() ? (l[1] + \"\\n\" + l[2]) : l[1]; }\n  function render(openPopup) {\n    const l = S[S.side];\n    const any = l.some(v =\u003e v.trim());\n    [previewText, popupText].forEach(el =\u003e {\n      if (!el) return;\n      if (any) el.textContent = l[0] || \"\\u00A0\";\n      el.setAttribute(\"data-rest\", any ? restOf(l) : \"\");\n    });\n    if (overlay) overlay.classList.toggle(\"active\", any);\n    if (openPopup \u0026\u0026 any \u0026\u0026 mobilePopup \u0026\u0026 window.innerWidth \u003c= 768) mobilePopup.classList.add(\"show\");\n  }\n\n  \/* ── Bilder je Seite + Farbe (Alt-Text „Vorderseite Vergoldet“, „Rückseite Stahl matt“ …) ── *\/\n  const IMG = {};                \/* variantId → { front, back } *\/\n  const TITLES = {};             \/* variantId → slug (vergoldet, schwarz-matt …) *\/\n  const studioBox = document.querySelector(\".engraving-preview-image\");\n  const popupBox  = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview\");\n  function slug(t) {\n    return String(t || \"\").toLowerCase().replace(\/ä\/g, \"ae\").replace(\/ö\/g, \"oe\").replace(\/ü\/g, \"ue\").replace(\/ß\/g, \"ss\")\n      .replace(\/[^a-z0-9]+\/g, \"-\").replace(\/^-|-$\/g, \"\");\n  }\n  \/* Farbe + Seite an Studio-Bild und Popup schreiben → CSS-Regeln je Farbe\/Seite greifen *\/\n  function markStudio() {\n    [studioBox, popupBox].forEach(box =\u003e {\n      if (!box) return;\n      box.dataset.side = S.side;\n      box.dataset.variant = TITLES[currentVariant()] || \"\";\n      const v = getComputedStyle(box).getPropertyValue(\"--st-x\").trim();\n      box.classList.toggle(\"jm-st-pos\", !!v || !!box.style.getPropertyValue(\"--st-x\"));\n    });\n  }\n  const FALLBACK = studioImg ? studioImg.getAttribute(\"src\") : \"\";\n  const FALLBACK_POP = popupImg ? popupImg.getAttribute(\"src\") : \"\";\n  let want = \"\", wantPop = \"\";\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort („vergoldet“) *\/\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, Farbe „Rosé Gold“ → „rosegold“ (+ erstes Wort) *\/\n  function plain(t) { return String(t || \"\").toLowerCase().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\").replace(\/ß\/g, \"ss\"); }\n  function optKeys(o) {\n    o = plain(o);\n    const m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + \"x\" + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, \"\"), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  \/* Alt-Text kompakt: „Herz Zirkonia Vorderseite Rose Gold“ → „herzzirkoniavorderseiterosegold“ *\/\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, \"$1x$2\").replace(\/[^a-z0-9]+\/g, \"\"); }\n  function imgUrl(src) {\n    if (!src) return \"\";\n    if (src.indexOf(\"\/\/\") === 0) src = \"https:\" + src;\n    return src + (src.indexOf(\"?\") \u003e -1 ? \"\u0026\" : \"?\") + \"width=900\";\n  }\n  function currentVariant() {\n    const f = document.querySelector('form[action*=\"\/cart\/add\"] [name=\"id\"]');\n    return f ? String(f.value) : \"\";\n  }\n  function applyImage() {\n    markStudio();\n    syncSizes();\n    const m = IMG[currentVariant()] || {};\n    const url = m[S.side] || \"\";\n    \/* Kein Foto mit passendem Alt-Text → bisherige Studio-\/Popup-Bilder *\/\n    want = url || FALLBACK;\n    wantPop = url || FALLBACK_POP;\n    if (studioImg \u0026\u0026 studioImg.getAttribute(\"src\") !== want) studioImg.src = want;\n    if (popupImg \u0026\u0026 popupImg.getAttribute(\"src\") !== wantPop) popupImg.src = wantPop;\n  }\n  function guard(img, pop) {\n    if (!img) return;\n    new MutationObserver(() =\u003e {\n      const w = pop ? wantPop : want;\n      if (w \u0026\u0026 img.getAttribute(\"src\") !== w) img.src = w;\n    }).observe(img, { attributes: true, attributeFilter: [\"src\"] });\n  }\n\n  \/* ── Größe + Farbe (Schritt 1) ──\n     Quelle 1: Auswahlfelder im Produktformular (Debut: .single-option-selector) – funktioniert sofort\n     Quelle 2: Produktdaten (ProductJson \/ .js) – für Verfügbarkeit und als Ersatz *\/\n  let PRODUCT = null, SIZE_IDX = -1, COLOR_IDX = -1;\n  const sizeWrap  = document.getElementById(\"jm-hz-size-wrap\");\n  const sizeBox   = document.getElementById(\"jm-hz-sizes\");\n  const colorWrap = document.getElementById(\"jm-hz-color-wrap\");\n  const colorBox  = document.getElementById(\"jm-hz-colors\");\n  const isSize = o =\u003e \/\\d\\s*[x×]\\s*\\d\/i.test(String(o || \"\"));\n  const optsOf = v =\u003e (v.options || [v.option1, v.option2, v.option3]).filter(o =\u003e o != null).map(String);\n  const COLOR_INFO = { rot: \"geflochtenes Band\", schwarz: \"geflochtenes Band\", gruen: \"geflochtenes Band\", edelstahl: \"silberfarbig\", vergoldet: \"goldfarbig\", rosegold: \"roséfarbig\" };\n  function dotOf(c) { c = plain(c); return \/\\brot\\b|red\/.test(c) ? \"rot\" : \/schwarz|black\/.test(c) ? \"schwarz\" : \/grun|gruen|green\/.test(c) ? \"gruen\" : \/ros\/.test(c) ? \"rosegold\" : (\/gold\/.test(c) ? \"vergoldet\" : \"edelstahl\"); }\n  function area(o) {\n    const m = String(o).match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    return m ? parseFloat(m[1].replace(\",\", \".\")) * parseFloat(m[2].replace(\",\", \".\")) : 0;\n  }\n  function variantById(id) { return PRODUCT \u0026\u0026 (PRODUCT.variants || []).find(v =\u003e String(v.id) === String(id)); }\n  function cartForm() { return document.querySelector('form[action*=\"\/cart\/add\"]'); }\n\n  \/* Auswahlfelder im Formular: Größe = Werte wie „16 × 20 mm“ oder Label „Größe\/Size“, Farbe = das andere *\/\n  function labelOf(sel) {\n    const l = sel.id \u0026\u0026 document.querySelector('label[for=\"' + sel.id + '\"]');\n    return plain((l \u0026\u0026 l.textContent) || sel.getAttribute(\"data-name\") || sel.getAttribute(\"aria-label\") || sel.name || \"\");\n  }\n  function formSelects() {\n    const f = cartForm();\n    if (!f) return { size: null, color: null };\n    const list = Array.from(f.querySelectorAll(\"select\")).filter(sel =\u003e\n      sel.name !== \"id\" \u0026\u0026 !\/productselect\/i.test(sel.id || \"\") \u0026\u0026 sel.options.length \u003e 1);\n    let size = list.find(sel =\u003e Array.from(sel.options).some(o =\u003e isSize(o.value)) || \/gro|size\/.test(labelOf(sel))) || null;\n    let color = list.find(sel =\u003e sel !== size \u0026\u0026 \/farb|color|colour|material|metall\/.test(labelOf(sel))) ||\n                list.find(sel =\u003e sel !== size) || null;\n    return { size: size, color: color };\n  }\n  function setSelect(sel, val) {\n    if (!sel || sel.value === val) return;\n    sel.value = val;\n    sel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    setTimeout(() =\u003e { lastVariant = currentVariant(); applyImage(); }, 120);\n  }\n\n  \/* aktuelle Werte (Formular hat Vorrang, sonst Variante) *\/\n  function curSize() {\n    const fs = formSelects();\n    if (fs.size) return fs.size.value;\n    const v = variantById(currentVariant());\n    return v ? (SIZE_IDX \u003e -1 ? optsOf(v)[SIZE_IDX] : v.title) : \"\";\n  }\n  function curColor() {\n    const fs = formSelects();\n    if (fs.color) return fs.color.value;\n    const v = variantById(currentVariant());\n    return v \u0026\u0026 COLOR_IDX \u003e -1 ? optsOf(v)[COLOR_IDX] : \"\";\n  }\n  \/* Werteliste + Verfügbarkeit einer Option *\/\n  function valuesFor(kind) {\n    const fs = formSelects();\n    const sel = kind === \"size\" ? fs.size : fs.color;\n    const vs = PRODUCT ? (PRODUCT.variants || []) : [];\n    const idx = kind === \"size\" ? SIZE_IDX : COLOR_IDX;\n    let vals = [];\n    if (sel) vals = Array.from(sel.options).map(o =\u003e o.value).filter(Boolean);\n    else if (vs.length) vs.forEach(v =\u003e {\n      const x = idx \u003e -1 ? optsOf(v)[idx] : (kind === \"size\" ? v.title : null);\n      if (x \u0026\u0026 vals.indexOf(x) === -1) vals.push(x);\n    });\n    return vals.map(x =\u003e ({\n      value: x,\n      avail: !vs.length || idx \u003c 0 ? true : vs.some(v =\u003e optsOf(v)[idx] === x \u0026\u0026 v.available !== false)\n    }));\n  }\n  function chooseSize(val)  { const fs = formSelects(); if (fs.size)  setSelect(fs.size, val);  else selectOpt(SIZE_IDX, val); }\n  function chooseColor(val) { const fs = formSelects(); if (fs.color) setSelect(fs.color, val); else selectOpt(COLOR_IDX, val); }\n\n  function buildSizes() {\n    if (!sizeBox || !sizeWrap) return;\n    const sizes = valuesFor(\"size\");\n    if (sizes.length \u003c 2) { sizeWrap.hidden = true; return; }\n    const maxA = Math.max.apply(null, sizes.map(x =\u003e area(x.value)));\n    sizeBox.innerHTML = \"\";\n    sizes.forEach(x =\u003e {\n      const big = maxA \u003e 0 \u0026\u0026 area(x.value) === maxA;\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-hz-size\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.size = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = (big ? \"\u003cem\u003eNeu · größer\u003c\/em\u003e\" : \"\") + \"\u003cspan\u003e\u003c\/span\u003e\u003csmall\u003e\u003c\/small\u003e\";\n      b.querySelector(\"span\").textContent = x.value;\n      b.querySelector(\"small\").textContent = !x.avail ? \"ausverkauft\" : (big ? \"mehr Sichtbarkeit\" : (maxA \u003e 0 ? \"klassisch\" : \"\"));\n      b.addEventListener(\"click\", () =\u003e chooseSize(x.value));\n      sizeBox.appendChild(b);\n    });\n    sizeWrap.hidden = false;\n  }\n  function buildColors() {\n    if (!colorBox || !colorWrap) return;\n    const colors = valuesFor(\"color\");\n    if (colors.length \u003c 2) { colorWrap.hidden = true; return; }\n    colorBox.innerHTML = \"\";\n    colors.forEach(x =\u003e {\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-mh-color\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.color = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = '\u003cspan class=\"jm-mh-color-dot ' + dotOf(x.value) + '\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-info\"\u003e\u003cspan class=\"jm-mh-color-name\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-desc\"\u003e\u003c\/span\u003e\u003c\/span\u003e';\n      const m = String(x.value).match(\/^(.*?)\\s*\\((.*)\\)\\s*$\/);   \/* „Roségold (vergoldet)“ *\/\n      b.querySelector(\".jm-mh-color-name\").textContent = m ? m[1] : x.value;\n      b.querySelector(\".jm-mh-color-desc\").textContent = !x.avail ? \"ausverkauft\"\n        : [m ? m[2] : \"\", COLOR_INFO[dotOf(x.value)] || \"\"].filter(Boolean).join(\" · \");\n      b.title = x.value;\n      b.addEventListener(\"click\", () =\u003e chooseColor(x.value));\n      colorBox.appendChild(b);\n    });\n    colorWrap.hidden = false;\n  }\n  function buildChoices() {\n    if (PRODUCT) {\n      const first = (PRODUCT.variants || [])[0] ? optsOf(PRODUCT.variants[0]) : [];\n      SIZE_IDX = first.findIndex(isSize);\n      COLOR_IDX = first.findIndex((o, i) =\u003e i !== SIZE_IDX);\n    }\n    buildSizes();\n    buildColors();\n    syncSizes();\n    if (sizeWrap \u0026\u0026 colorWrap \u0026\u0026 sizeWrap.hidden \u0026\u0026 colorWrap.hidden) {\n      const fs = formSelects();\n      console.warn(\"[JM Armband] Schritt 1: keine Größen\/Farben gefunden\",\n        { formular: !!cartForm(), auswahlfelder: [fs.size, fs.color], produktdaten: !!PRODUCT,\n          varianten: PRODUCT ? PRODUCT.variants.map(v =\u003e v.title) : null });\n    }\n  }\n\n  \/* Gewicht je Größe *\/\n  const WEIGHT = { \"16x20\": \"ca. 1,6 g\", \"20x25\": \"ca. 2,6 g\" };\n  function info() {\n    const v = variantById(currentVariant());\n    const size  = curSize() || \"Platte 3,5 × 0,5 cm\";\n    const color = curColor() || \"\";\n    return { variant: v, size: size, color: color, weight: \"ca. 4 g\",\n             front: (IMG[currentVariant()] || {}).front || FALLBACK };\n  }\n  \/* Schritt-1-Karte + Texte (Größe, Farbe, Gewicht, Bild) *\/\n  function syncCard() {\n    const i = info();\n    document.querySelectorAll(\".js-hz-size\").forEach(el =\u003e { el.textContent = i.size; });\n    document.querySelectorAll(\".js-hz-color\").forEach(el =\u003e { el.textContent = i.color; });\n\n    const lb = document.getElementById(\"hzCfgLabel\");\n    if (lb) { lb.textContent = i.color; lb.style.display = i.color ? \"\" : \"none\"; }\n    const im = document.getElementById(\"hzCfgImg\");\n    if (im \u0026\u0026 i.front \u0026\u0026 im.getAttribute(\"src\") !== i.front) { im.src = i.front; im.alt = \"Plattenarmband \" + i.color; }\n  }\n  function syncSizes() {\n    const s = curSize(), c = curColor();\n    if (sizeBox) sizeBox.querySelectorAll(\".jm-hz-size\").forEach(b =\u003e {\n      const on = b.dataset.size === s;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    if (colorBox) colorBox.querySelectorAll(\".jm-mh-color\").forEach(b =\u003e {\n      const on = b.dataset.color === c;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    syncCard();\n  }\n  \/* Formularauswahl geändert (auch direkt oben im Produktformular) → Karten nachziehen *\/\n  document.addEventListener(\"change\", e =\u003e {\n    if (e.target \u0026\u0026 e.target.tagName === \"SELECT\" \u0026\u0026 e.target.closest('form[action*=\"\/cart\/add\"]')) setTimeout(() =\u003e { syncSizes(); applyImage(); }, 150);\n  });\n  \/* sofort aus dem Formular aufbauen – nicht erst auf die Produktdaten warten *\/\n  setTimeout(buildChoices, 0);\n\n  function selectSize(s) { chooseSize(s); }\n  \/* Ersatz ohne Auswahlfelder: Variante über Produktdaten wählen (übrige Optionen beibehalten) *\/\n  function selectOpt(idx, s) {\n    if (!PRODUCT) return;\n    const form = cartForm();\n    if (!form) return;\n    const cur = variantById(currentVariant());\n    const curOpts = cur ? optsOf(cur) : [];\n    const list = (PRODUCT.variants || []).filter(v =\u003e (idx \u003e -1 ? optsOf(v)[idx] : v.title) === s);\n    const score = v =\u003e optsOf(v).filter((o, i) =\u003e i !== idx \u0026\u0026 o === curOpts[i]).length * 2 + (v.available !== false ? 1 : 0);\n    const v = list.sort((a, b) =\u003e score(b) - score(a))[0];\n    if (!v) return;\n    const vals = optsOf(v);\n    form.querySelectorAll('input[type=\"radio\"]').forEach(r =\u003e {\n      if (vals.indexOf(r.value) \u003e -1 \u0026\u0026 !r.checked) {\n        r.checked = true;\n        r.dispatchEvent(new Event(\"change\", { bubbles: true }));\n        const lab = r.id \u0026\u0026 form.querySelector('label[for=\"' + r.id + '\"]');\n        if (lab) lab.click();\n      }\n    });\n    const idSel = form.querySelector('select[name=\"id\"], input[name=\"id\"]');\n    if (idSel \u0026\u0026 String(idSel.value) !== String(v.id)) {\n      idSel.value = v.id;\n      idSel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    }\n    lastVariant = currentVariant();\n    applyImage();\n  }\n  (function loadProduct() {\n    const el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    const get = el ? Promise.resolve(JSON.parse(el.textContent))\n                   : fetch(location.pathname.replace(\/\\\/$\/, \"\") + \".js\").then(r =\u003e r.json());\n    get.then(p =\u003e {\n      const media = (p.media || []).map(m =\u003e ({ alt: String(m.alt || \"\").toLowerCase(), src: m.src || (m.preview_image \u0026\u0026 m.preview_image.src) }));\n      const pick = (side, opts, strict) =\u003e {\n        const sideKeys = side === \"front\" ? [\"vorderseite\"] : [\"rückseite\", \"rueckseite\"];\n        const list = media.filter(m =\u003e sideKeys.some(k =\u003e m.alt.indexOf(k) \u003e -1));\n        let hit = list.find(m =\u003e opts.some(o =\u003e optKeys(o).some(k =\u003e altNorm(m.alt).indexOf(k) \u003e -1)));\n        if (!hit \u0026\u0026 !strict \u0026\u0026 list.length === 1) hit = list[0];\n        return hit ? imgUrl(hit.src) : \"\";\n      };\n      \/* Hauptbild des Produkts → Hero-Bild + Ersatz, wenn kein Foto mit Alt-Text „Vorderseite \u003cFarbe\u003e“ existiert *\/\n      const heroSrc = (typeof p.featured_image === \"object\" \u0026\u0026 p.featured_image) ? p.featured_image.src : (p.featured_image || (p.images \u0026\u0026 p.images[0]) || \"\");\n      const hero = document.getElementById(\"jmArmHeroImg\");\n      if (hero \u0026\u0026 heroSrc) hero.src = imgUrl(heroSrc);\n      p.variants.forEach(v =\u003e {\n        const opts = v.options || [v.option1, v.option2, v.option3];\n        \/* Reihenfolge: Foto „Vorderseite \u003cFarbe\u003e“ → Variantenbild → einziges Vorderseiten-Foto → Hauptbild *\/\n        const fr = pick(\"front\", opts, true) || imgUrl(v.featured_image \u0026\u0026 (v.featured_image.src || v.featured_image)) || pick(\"front\", opts) || imgUrl(heroSrc);\n        IMG[String(v.id)] = { front: fr, back: pick(\"back\", opts) || fr };\n        \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n        TITLES[String(v.id)] = slug(String(v.title).replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, \" \"));\n      });\n      PRODUCT = p;\n      buildChoices();\n      applyImage();\n    }).catch(err =\u003e { console.warn(\"[JM Armband] Produktdaten nicht geladen\", err); buildChoices(); });\n  })();\n  guard(studioImg, false); guard(popupImg, true);\n  let lastVariant = currentVariant();\n  setInterval(() =\u003e { const v = currentVariant(); if (v !== lastVariant) { lastVariant = v; applyImage(); } }, 400);\n\n  \/* ── Seite wechseln ── *\/\n  function setSide(k) {\n    if (!LABEL[k] || (k === \"back\" \u0026\u0026 !hasBack)) return;\n    S.save();\n    S.side = k;\n    tabs.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(\"jmGkInputLabel\");\n    if (lb) lb.textContent = \"Gravur \" + LABEL[k] + (k === \"back\" ? \" (optional)\" : \"\");\n    [\"jmGkSideLabel\", \"jmGkPopupSideLabel\"].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (el) el.textContent = LABEL[k];\n    });\n    lineInputs.forEach((i, n) =\u003e { if (i) i.value = S[k][n]; });\n    applyImage();\n    \/* vorhandene Vorschau-Logik (Effekte, Mobile-Popup) auslösen *\/\n    input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    render(true);\n    (lineInputs.find(i =\u003e i \u0026\u0026 !i.value) || input).focus();\n  }\n  tabs.forEach(b =\u003e b.addEventListener(\"click\", () =\u003e setSide(b.dataset.side)));\n\n  \/* ── Eingaben ── *\/\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"input\", () =\u003e { S.save(); render(true); }));\n\n  \/* Symbole: in die zuletzt gewählte Zeile einfügen (Zeile 1 übernimmt die vorhandene Logik) *\/\n  document.addEventListener(\"click\", function (e) {\n    const btn = e.target.closest \u0026\u0026 e.target.closest(\"#engraving-preview .symbol-btn\");\n    if (!btn) return;\n    if (focused === input) { setTimeout(() =\u003e { S.save(); render(true); }, 30); return; }\n    e.stopImmediatePropagation();\n    const sym = btn.dataset.symbol || btn.textContent.trim();\n    const max = focused.maxLength \u003e 0 ? focused.maxLength : 11;\n    if (Array.from(focused.value + sym).length \u003e max) return;\n    const st = focused.selectionStart != null ? focused.selectionStart : focused.value.length;\n    const en = focused.selectionEnd != null ? focused.selectionEnd : focused.value.length;\n    focused.value = focused.value.substring(0, st) + sym + focused.value.substring(en);\n    focused.focus();\n    focused.selectionStart = focused.selectionEnd = st + sym.length;\n    S.save(); render(true);\n  }, true);\n\n  \/* Schriftart: vorhandene Logik setzt nur Zeile 1 → danach komplett neu zeichnen *\/\n  document.querySelectorAll(\"#engraving-preview .font-btn\").forEach(b =\u003e\n    b.addEventListener(\"click\", () =\u003e setTimeout(() =\u003e render(true), 30)));\n\n  \/* Werte, die per Skript gesetzt werden → regelmäßig übernehmen *\/\n  setInterval(() =\u003e {\n    const now = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\");\n    if (now.join(\"|\") !== S[S.side].join(\"|\")) { S.save(); render(false); }\n  }, 200);\n\n  \/* Schnittstelle für das Tweak-Panel *\/\n  window.jmGkStudio = { setSide: setSide, mark: markStudio, box: () =\u003e (window.innerWidth \u003c= 768 ? popupBox : studioBox),\n                        studioBox: studioBox, popupBox: popupBox, side: () =\u003e S.side, render: render,\n                        info: info, lines: () =\u003e LINES };\n  markStudio();\n  renderTabs();\n});\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   3-SCHRITT KONFIGURATOR: 1 Schmuckstück → 2 Gravur → 3 Bestätigung\n   (nutzt window.jmGkSides \/ window.jmGkStudio aus dem Gravur-Studio)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const wrap = document.getElementById(\"jm-cfg-wrap\");\n  if (!wrap) return;\n  const TOTAL = 3;\n  let step = 1;\n  const next2 = document.getElementById(\"jm-cfg-next-2\");\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n  const sides = () =\u003e window.jmGkSides || { front: [], back: [], has: () =\u003e false };\n  const hasAny = () =\u003e sides().has(\"front\") || sides().has(\"back\");\n  const esc = t =\u003e String(t).replace(\/[\u0026\u003c\u003e\"]\/g, c =\u003e ({ \"\u0026\": \"\u0026amp;\", \"\u003c\": \"\u0026lt;\", \"\u003e\": \"\u0026gt;\", '\"': \"\u0026quot;\" }[c]));\n\n  function updNext2() {\n    if (!next2) return;\n    next2.disabled = !hasAny();\n    next2.title = next2.disabled ? \"Bitte zuerst eine Gravur eingeben\" : \"\";\n  }\n  function hidePopup() {\n    const p = document.getElementById(\"engraving-mobile-popup\");\n    if (p) p.classList.remove(\"show\");\n  }\n\n  function go(n, scroll) {\n    step = n;\n    for (let i = 1; i \u003c= TOTAL; i++) {\n      const card = document.getElementById(\"jm-cfg-card-\" + i);\n      if (card) card.classList.toggle(\"active\", i === n);\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 === 2) { updNext2(); if (window.jmGkStudio) { window.jmGkStudio.mark(); window.jmGkStudio.render(false); } }\n    if (n === 3) fillSummary();\n    if (scroll) wrap.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n  }\n\n  function fillSummary() {\n    const st = window.jmGkStudio;\n    const i = st \u0026\u0026 st.info ? st.info() : {};\n    const S = sides();\n    if (S.save) S.save();\n    const set = (id, v) =\u003e { const el = document.getElementById(id); if (el \u0026\u0026 v != null) el.textContent = v; };\n    \/* Platte: fester Text im HTML *\/\n    set(\"jm-cfg-s3-color\", i.color);\n    \/* Länge · Gewicht: fester Text im HTML *\/\n    const thumb = document.getElementById(\"jm-cfg-s3-thumb\");\n    if (thumb \u0026\u0026 i.front) thumb.src = i.front;\n\n    const pv = document.getElementById(\"engravingPreviewText\");\n    const font = pv ? getComputedStyle(pv).fontFamily : \"Playfair Display\";\n    const fontName = font.replace(\/['\"]\/g, \"\").split(\",\")[0].trim();\n    const used = [\"front\", \"back\"].filter(k =\u003e S.has(k));\n    const box = document.getElementById(\"jm-cfg-s3-gravur-text\");\n    if (box) {\n      box.innerHTML = used.length ? used.map(k =\u003e\n        '\u003cdiv class=\"jm-cfg-s3-gravur-side-block\"\u003e\u003cspan class=\"jm-cfg-s3-gravur-side\"\u003e' + LABEL[k] + '\u003c\/span\u003e' +\n        '\u003cspan class=\"jm-cfg-s3-gravur-lines\" style=\"font-family:' + esc(font) + '\"\u003e' +\n        S[k].filter(v =\u003e v.trim()).map(v =\u003e \"\u003cspan\u003e\" + esc(v.trim()) + \"\u003c\/span\u003e\").join(\"\") + \"\u003c\/span\u003e\u003c\/div\u003e\").join(\"\") : \"–\";\n    }\n    set(\"jm-cfg-s3-sides\", (used.length ? used.map(k =\u003e LABEL[k]).join(\" \u0026 \") : \"Keine\") + \" · kostenlos\");\n    set(\"jm-cfg-s3-gravur-meta\", \"Schriftart: \" + fontName + \" · 1 Zeile · max. 11 Zeichen\");\n\n    \/* Preis: aus dem Theme übernehmen, sonst aus der Variante *\/\n    const target = document.getElementById(\"jm-cfg-s3-price\");\n    if (target) {\n      const src = document.querySelector(\".price__pricing-group\");\n      if (src) target.innerHTML = src.innerHTML;\n      else if (i.variant \u0026\u0026 i.variant.price != null) {\n        const p = Number(i.variant.price);\n        const eur = (p \u003e 999 || String(i.variant.price).indexOf(\".\") === -1 ? p \/ 100 : p);\n        target.innerHTML = '\u003cspan class=\"jm-cfg-s3-price-fallback\"\u003e' + eur.toFixed(2).replace(\".\", \",\") + \" €\u003c\/span\u003e\";\n      }\n    }\n  }\n\n  const on = (id, fn) =\u003e { const el = document.getElementById(id); if (el) el.addEventListener(\"click\", fn); };\n  on(\"jm-cfg-next-1\", () =\u003e go(2, true));\n  on(\"jm-cfg-back-2\", () =\u003e go(1, true));\n  on(\"jm-cfg-next-2\", () =\u003e { if (hasAny()) go(3, true); });\n  on(\"jm-cfg-back-3\", () =\u003e go(2, true));\n  on(\"jm-cfg-popup-next\", e =\u003e {\n    e.preventDefault(); e.stopPropagation();\n    hidePopup();\n    if (step === 2 \u0026\u0026 hasAny()) go(3, true);\n  });\n\n  \/* Weiter-Button erst aktiv, wenn eine Seite befüllt ist *\/\n  setInterval(() =\u003e { if (step === 2) updNext2(); }, 300);\n\n  \/* sticky geht nicht, wenn ein Elterncontainer overflow hidden\/auto hat → Bild stattdessen mittig *\/\n  (function checkSticky() {\n    const s2 = wrap.querySelector(\".jm-cfg-s2-wrap\");\n    if (!s2) return;\n    let el = s2.parentElement, blocked = false;\n    while (el \u0026\u0026 el !== document.body) {\n      const o = getComputedStyle(el);\n      if (\/(hidden|auto|scroll|clip)\/.test(o.overflow + o.overflowY + o.overflowX)) { blocked = true; break; }\n      el = el.parentElement;\n    }\n    s2.classList.toggle(\"jm-no-sticky\", blocked);\n    if (!blocked) return;\n    \/* Bild mitführen: bleibt mittig im Fenster, aber innerhalb der Gravur-Spalte *\/\n    const grid = s2.querySelector(\".engraving-preview-grid\");\n    const img  = s2.querySelector(\".engraving-preview-image\");\n    if (!grid || !img) return;\n    let raf = 0;\n    function follow() {\n      raf = 0;\n      if (window.innerWidth \u003c= 900 || step !== 2) { img.style.transform = \"\"; return; }\n      const g = grid.getBoundingClientRect();\n      const h = img.offsetHeight;\n      const want = (window.innerHeight - h) \/ 2 - g.top;\n      const y = Math.max(0, Math.min(want, g.height - h));\n      img.style.transform = y ? \"translateY(\" + Math.round(y) + \"px)\" : \"\";\n    }\n    const req = () =\u003e { if (!raf) raf = requestAnimationFrame(follow); };\n    window.addEventListener(\"scroll\", req, { passive: true });\n    window.addEventListener(\"resize\", req);\n    wrap.addEventListener(\"click\", () =\u003e setTimeout(req, 50));\n    setInterval(req, 500);\n  })();\n\n  window.jmCfg = { go: go, step: () =\u003e step };\n  go(1, false);\n});\n\u003c\/script\u003e\n\n  \u003cstyle\u003e\n.jm-lv-stage {\n  \/* ── Gravur-Position (mit ?jmtweak=1 einstellen) ── *\/\n  --lv-x: 50%;\n  --lv-y: 50%;\n  --lv-rot: 0deg;\n  --lv-size: 6;\n  --lv-tx: -50%;     \/* Anker: Zeile 1 mittig auf x\/y *\/\n  --lv-ty: -50%;\n  --lv-color: rgba(205,205,205,0.92);\n  \/* Feinjustierung (mit ?jmtweak=1 einstellbar) *\/\n  --lv-lh: 1.15;     \/* Zeilenabstand Zeile 2 + 3 *\/\n  --lv-gap: 0em;     \/* Abstand Zeile 1 → Zeile 2 *\/\n  --lv-ls: 0.06em;   \/* Zeichenabstand *\/\n  --lv-op: 1;        \/* Deckkraft der Gravur *\/\n  --lv-rdx: 0em;     \/* Versatz Zeile 2 + 3 seitlich *\/\n  position: relative;\n  container-type: inline-size;\n  border-radius: 14px;\n  overflow: hidden;\n}\n.jm-lv-img {\n  width: 100%;\n  display: block;\n  border-radius: 14px;\n  transition: opacity 0.3s ease;\n}\n\/* Bild-Zoom (Tweak-Panel): --lv-zoom (1 = Original), --lv-px \/ --lv-py (Verschiebung in %) – Bühne schneidet ab *\/\n.jm-lv-stage { background: #000; }\n.jm-lv-stage .jm-lv-img, .jm-lv-stage .jm-lv-img-back {\n  transform: translate(var(--lv-px, 0%), var(--lv-py, 0%)) scale(var(--lv-zoom, 1));\n  transform-origin: center center;\n}\n.jm-lv-text {\n  position: absolute;\n  left: var(--lv-x);\n  top: var(--lv-y);\n  transform: translate(var(--lv-tx, -50%), var(--lv-ty, -190%)) rotate(var(--lv-rot));\n  font-size: calc(var(--lv-size) * 1cqw);\n  font-family: 'Playfair Display', serif;\n  color: var(--lv-color);\n  letter-spacing: var(--lv-ls, 0.06em);\n  opacity: var(--lv-op, 1);\n  white-space: nowrap;\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  pointer-events: none;\n}\n.jm-lv-text.is-empty { opacity: 0.65; }\n\/* Zeile 2 + 3 unter Zeile 1 (Zeile 1 bleibt an der eingestellten Position) *\/\n.jm-lv-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% + var(--lv-gap, 0em)); transform: translateX(calc(-50% + var(--lv-rdx, 0em)));\n  white-space: pre; text-align: center; font: inherit; line-height: var(--lv-lh, 1.15); color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n    @keyframes jmLvShake {\n  0%, 100% { transform: translateX(0); }\n  20%, 60% { transform: translateX(-5px); }\n  40%, 80% { transform: translateX(5px); }\n}\n.jm-lv-shake { animation: jmLvShake 0.35s ease; }\n.jm-lv-label {\n  display: block;\n  text-align: center;\n  margin-top: 10px;\n  font-size: 9px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: #c9a84c;\n  font-weight: 700;\n}\n.jm-lv-close {\n  position: absolute;\n  top: 8px;\n  right: 10px;\n  background: none;\n  border: none;\n  color: #c9a84c;\n  font-size: 20px;\n  line-height: 1;\n  cursor: pointer;\n  padding: 4px;\n  z-index: 10;\n  opacity: 0.7;\n  transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.jm-lv-close:hover { opacity: 1; transform: scale(1.15); }\n\n\/* Desktop-Panel *\/\n#jm-lv-desktop {\n  display: none;\n  position: fixed;\n  left: 25vh;\n  top: 50vh;\n  transform: translateY(-50%);\n  z-index: 8888;\n  width: 460px;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 20px;\n  padding: 16px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n}\n\/* ── Desktop: Werte je Größe + Seite (mit ?jmtweak=1 ermitteln, Regel hier einfügen) ──\n   Beispiel: #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage { --lv-x: 50%; --lv-y: 48%; --lv-rot: 0deg; --lv-size: 7; }\n             #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage.jm-lv-stage--back { … }\n   Gravur-Studio: .engraving-preview-image[data-variant=\"20-25-mm\"][data-side=\"front\"] { --st-x: …; } *\/\n\n#jm-lv-desktop.show { display: block; animation: jmLvIn 0.3s ease; }\n@keyframes jmLvIn {\n  from { opacity: 0; transform: translateY(-50%) translateX(-12px); }\n  to   { opacity: 1; transform: translateY(-50%) translateX(0); }\n}\n\n\/* Mobile-Popup *\/\n#jm-lv-mobile {\n  position: fixed;\n  left: 50%;\n  bottom: 110px;\n  width: calc(100% - 24px);\n  max-width: 380px;\n  z-index: 9998;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 18px;\n  padding: 12px;\n  box-shadow: 0 -10px 40px rgba(0,0,0,0.35);\n  opacity: 0;\n  pointer-events: none;\n  transform: translate(-50%, 20px);\n  transition: opacity 0.3s ease, transform 0.3s ease;\n}\n#jm-lv-mobile.show { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }\n\n@media (max-width: 768px) {\n  #jm-lv-desktop { display: none !important; }\n\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 50%;\n    --lv-rot: 0deg;\n    --lv-size: 6;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-color: rgba(205, 205, 205, 0.92);\n    position: relative;\n    container-type: inline-size;\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n  \/* ── Mobile: Werte je Größe + Seite (mit ?jmtweak=1 am Handy ermitteln) ──\n     Beispiel: #jm-lv-mobile[data-variant=\"20-25-mm\"] .jm-lv-stage { … } *\/\n}\n@media (min-width: 769px) { #jm-lv-mobile { display: none !important; } }\n\n\/* Vorder- + Rückseite nebeneinander *\/\n.jm-lv-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr 1fr; }\n.jm-lv-side { display: none; }\n.jm-lv-side.on { display: block; }\n.jm-lv-side-label { display: block; text-align: center; margin-top: 6px; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #8a7055; font-weight: 700; }\n\/* Vorder- + Rückseite befüllt: immer EIN großes Bild – Umschalter Vorderseite \/ Rückseite\n   (Panel bleibt so schmal wie bisher und verdeckt das Produktformular nicht) *\/\n.jm-lv-tabs { display: none; gap: 6px; margin-bottom: 8px; padding-right: 26px; }\n.jm-lv-both .jm-lv-tabs { display: flex; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr; }\n.jm-lv-tabs button { flex: 1; padding: 6px 8px; border-radius: 999px; border: 1px solid rgba(201,168,76,0.45); background: transparent; color: #e6d3a3; font: 700 10px Inter, sans-serif; letter-spacing: 1.2px; text-transform: uppercase; cursor: pointer; }\n.jm-lv-tabs button.active { background: #c9a84c; color: #1a1410; }\n\/* ── RÜCKSEITE: eigene Werte je Größe (mit ?jmtweak=1 → Seite „Rückseite“ ermitteln) ──\n   Höhere Spezifität (.jm-lv-stage.jm-lv-stage--back) → greift immer vor den Vorderseiten-Werten. *\/\n\n\/* ── LIVE-VORSCHAU OBEN: Startposition für alle Bandfarben ──\n   Mit ?jmtweak=1 → „Live-Vorschau oben“ je Farbe einstellen und die ausgegebene Regel hier ergänzen. *\/\n#jm-lv-desktop .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 50%;\n  --lv-rot: 0deg;\n  --lv-size: 5;\n  --lv-ty: -50%;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n@media (max-width: 768px) {\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 50%;\n    --lv-rot: 0deg;\n    --lv-size: 5;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-l: 28%;\n    --lv-sh: 0.15;\n  }\n}\n\n\/* ── WERTE JE BANDFARBE (mit ?jmtweak=1 ermittelt) ── *\/\n#jm-lv-desktop[data-variant=\"rot\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 62%;\n  --lv-rot: 0deg;\n  --lv-size: 4.25;\n  --lv-ty: -50%;\n  --lv-arc: -0.24em;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n\n#jm-lv-desktop[data-variant=\"schwarz\"] .jm-lv-stage {\n  --lv-x: 56%;\n  --lv-y: 60%;\n  --lv-rot: 16deg;\n  --lv-size: 3.75;\n  --lv-ty: -50%;\n  --lv-arc: 0.26em;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n  --lv-zoom: 1.56;\n}\n\n#jm-lv-desktop[data-variant=\"gruen\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 59.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.75;\n  --lv-ty: -50%;\n  --lv-arc: -0.16em;\n  --lv-l: 28%;\n  --lv-sh: 0.15;\n}\n\n.engraving-preview-image[data-variant=\"gruen\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 53.5%;\n  --st-rot: 0deg;\n  --st-size: 3.75;\n  --st-arc: -0.17em;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n\n.engraving-preview-image[data-variant=\"schwarz\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 57%;\n  --st-rot: 0deg;\n  --st-size: 5;\n  --st-arc: -0.24em;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n\n.engraving-preview-image[data-variant=\"rot\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 55%;\n  --st-rot: 0deg;\n  --st-size: 4.25;\n  --st-arc: -0.32em;\n  --st-l: 28%;\n  --st-sh: 0.15;\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"gruen\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 50%;\n    --st-rot: 0deg;\n    --st-size: 5;\n    --st-l: 28%;\n    --st-sh: 0.15;\n    --st-zoom: 1.81;\n  }\n  #engraving-mobile-popup .popup-preview[data-variant=\"gruen\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 59.5%;\n    --st-rot: 0deg;\n    --st-size: 4;\n    --st-arc: -0.04em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n  #engraving-mobile-popup .popup-preview[data-variant=\"schwarz\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 64%;\n    --st-rot: 0deg;\n    --st-size: 3.75;\n    --st-arc: -0.14em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n  #engraving-mobile-popup .popup-preview[data-variant=\"rot\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 62.5%;\n    --st-rot: 0deg;\n    --st-size: 3.75;\n    --st-arc: -0.19em;\n    --st-l: 28%;\n    --st-sh: 0.15;\n  }\n}\n\n\/* Tweak-Panel *\/\n#jm-lv-tweak {\n  position: fixed;\n  right: 20px;\n  top: 120px;\n  z-index: 99999;\n  width: 240px;\n  background: #111;\n  color: #eee;\n  border: 1px solid #c9a84c;\n  border-radius: 12px;\n  padding: 12px;\n  font: 12px\/1.4 Inter, sans-serif;\n  cursor: move;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.4);\n}\n#jm-lv-tweak label { display: flex; justify-content: space-between; margin-top: 8px; }\n#jm-lv-tweak input[type=range] { width: 100%; cursor: pointer; }\n#jm-lv-tweak code { display: block; margin-top: 10px; padding: 6px; background: #222; border-radius: 6px; font-size: 11px; white-space: pre-wrap; cursor: text; }\n#jm-lv-tweak button { margin-top: 8px; width: 100%; padding: 6px; background: #c9a84c; color: #111; border: 0; border-radius: 6px; cursor: pointer; font-weight: 600; }\n#jm-lv-tweak select { width: 100%; margin-top: 8px; padding: 5px; border-radius: 6px; border: 0; font: inherit; }\n#jm-lv-tweak { max-height: 85vh; overflow: auto; }\n#jm-lv-tweak strong { display: block; touch-action: none; user-select: none; }\n@media (max-width: 768px) { #jm-lv-tweak { top: 10px; right: 8px; width: 220px; max-height: 45vh; overflow: auto; background: rgba(17,17,17,.88); } }\n\u003c\/style\u003e\n\n\n\u003cscript\u003e\n\/* =========================\n   WÖLBUNG DER GRAVURZEILE (Zeile 1)\n   Liest --lv-arc (Live-Vorschau oben) bzw. --st-arc (Gravur-Studio + Mobile-Popup) aus dem CSS \/ Tweak-Panel.\n   Jeder Buchstabe wird entlang eines Bogens versetzt und gedreht – Text bleibt sonst unverändert.\n========================= *\/\n(function () {\n  const TARGETS = [[\".jm-lv-text\", \"--lv-arc\"], [\"#engravingPreviewText\", \"--st-arc\"], [\".popup-preview-text\", \"--st-arc\"]];\n  function textOf(el) {\n    return el._jmBent \u0026\u0026 el.querySelector(\".jm-arc-ch\") ? el._jmText : el.textContent;\n  }\n  function bend(el, arc, txt) {\n    el._jmText = txt;\n    if (!arc || !txt) {\n      if (el.querySelector(\".jm-arc-ch\")) el.textContent = txt;\n      el._jmBent = false; el._jmKey = \"0|\" + txt;\n      return;\n    }\n    el.textContent = \"\";\n    const chars = Array.from(txt).map(ch =\u003e {\n      const sp = document.createElement(\"span\");\n      sp.className = \"jm-arc-ch\";\n      sp.textContent = ch === \" \" ? \"\\u00A0\" : ch;\n      el.appendChild(sp);\n      return sp;\n    });\n    const fs = parseFloat(getComputedStyle(el).fontSize) || 16;\n    const xs = chars.map(c =\u003e c.offsetLeft + c.offsetWidth \/ 2);\n    const mid = (xs[0] + xs[xs.length - 1]) \/ 2;\n    const half = Math.max(1, (xs[xs.length - 1] - xs[0]) \/ 2);\n    chars.forEach((c, i) =\u003e {\n      const u = (xs[i] - mid) \/ half;                 \/* −1 … +1 *\/\n      const dy = arc * u * u;                          \/* Enden um „arc“ em versetzt *\/\n      const ang = Math.atan(2 * arc * u \/ (half \/ fs)) * 180 \/ Math.PI;\n      c.style.transform = \"translateY(\" + dy.toFixed(3) + \"em) rotate(\" + ang.toFixed(2) + \"deg)\";\n    });\n    el._jmBent = true; el._jmKey = arc + \"|\" + txt;\n  }\n  function tick() {\n    TARGETS.forEach(([sel, v]) =\u003e {\n      document.querySelectorAll(sel).forEach(el =\u003e {\n        if (!el.getClientRects().length) return;          \/* unsichtbar → später *\/\n        const arc = parseFloat(getComputedStyle(el).getPropertyValue(v)) || 0;\n        const txt = textOf(el);\n        if (el._jmKey !== arc + \"|\" + txt \u0026\u0026 !(arc === 0 \u0026\u0026 !el._jmBent \u0026\u0026 el._jmKey === undefined)) bend(el, arc, txt);\n      });\n    });\n  }\n  window.jmArcRefresh = tick;\n  setInterval(tick, 250);\n})();\n\u003c\/script\u003e\n\u003c!-- JM LIVE-VORSCHAU: Desktop-Panel + Mobile-Popup --\u003e\n\u003cdiv id=\"jm-lv-desktop\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cdiv id=\"jm-lv-mobile\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* Optional: eigene Vorschaubilder pro Farbe (Name wie in der Variante, klein geschrieben).\n   Leer lassen = Variantenbild aus Shopify wird genutzt. *\/\nvar JM_LV_BILDER = {\n  \/\/ 'gold':    'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'schwarz': 'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'silber':  'https:\/\/cdn.shopify.com\/...'\n};\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  var form    = document.querySelector('form[action*=\"\/cart\/add\"]');\n  var desktop = document.getElementById('jm-lv-desktop');\n  var mobile  = document.getElementById('jm-lv-mobile');\n  if (!form || !desktop || !mobile) return;\n\n  \/* Panels an den body hängen → nie im Formular, X löst kein Add-to-Cart aus *\/\n  document.body.appendChild(desktop);\n  document.body.appendChild(mobile);\n\n  var stages = document.querySelectorAll('.jm-lv-stage');\n  var texts  = document.querySelectorAll('.jm-lv-text:not(.jm-lv-text--back)');\n  var imgs   = document.querySelectorAll('.jm-lv-img');\n  \/* Rückseite *\/\n  var backTexts = document.querySelectorAll('.jm-lv-text--back');\n  var backImgs  = document.querySelectorAll('.jm-lv-img-back');\n  var colors = document.querySelectorAll('.jm-lv-color');\n  var variants = {};\n  var currentId = null;\n\n  \/* ── Produktdaten: erst Theme-JSON, sonst \/products\/handle.js ── *\/\n  function loadProduct() {\n    var el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    if (el) {\n      try { return Promise.resolve(JSON.parse(el.textContent)); } catch (e) {}\n    }\n    var path = location.pathname.replace(\/\\\/$\/, '');\n    return fetch(path + '.js').then(function (r) { return r.json(); });\n  }\n\n  function imgUrl(src) {\n    if (!src) return '';\n    if (src.indexOf('\/\/') === 0) src = 'https:' + src;\n    return src + (src.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=900';\n  }\n\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort *\/\n  function plain(t) { return String(t || '').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').replace(\/ß\/g, 'ss'); }\n  function optKeys(o) {\n    o = plain(o);\n    var m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + 'x' + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, ''), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, '$1x$2').replace(\/[^a-z0-9]+\/g, ''); }\n\n  loadProduct().then(function (p) {\n    var fallback = p.featured_image || (p.images \u0026\u0026 p.images[0]) || '';\n    if (typeof fallback === 'object') fallback = fallback.src;\n    \/* Rückseiten-Fotos: Alt-Text mit „Rückseite“ + Farbe (z. B. „Rückseite Vergoldet“) *\/\n    var backMedia = (p.media || []).filter(function (m) {\n      var a = String(m.alt || '').toLowerCase();\n      return a.indexOf('rückseite') \u003e -1 || a.indexOf('rueckseite') \u003e -1;\n    });\n    p.variants.forEach(function (v) {\n      var src = v.featured_image ? v.featured_image.src : fallback;\n      var own = null;\n      var opts = (v.options || [v.option1, v.option2, v.option3]);\n      opts.forEach(function (o) {\n        if (o \u0026\u0026 JM_LV_BILDER[String(o).toLowerCase()]) own = JM_LV_BILDER[String(o).toLowerCase()];\n      });\n      var back = null;\n      backMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!back \u0026\u0026 hitK) back = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!back \u0026\u0026 backMedia.length === 1) back = backMedia[0].src || (backMedia[0].preview_image \u0026\u0026 backMedia[0].preview_image.src);\n      \/* Vorderseiten-Foto: Alt-Text mit „Vorderseite“ + Farbe *\/\n      var frontMedia = (p.media || []).filter(function (m) { return String(m.alt || '').toLowerCase().indexOf('vorderseite') \u003e -1; });\n      var frontOwn = null;\n      frontMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!frontOwn \u0026\u0026 hitK) frontOwn = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!frontOwn \u0026\u0026 frontMedia.length === 1) frontOwn = frontMedia[0].src || (frontMedia[0].preview_image \u0026\u0026 frontMedia[0].preview_image.src);\n      var front = own || (frontOwn ? imgUrl(frontOwn) : imgUrl(src));\n      variants[String(v.id)] = { img: front, back: back ? imgUrl(back) : front, title: v.title };\n    });\n    checkVariant();\n  });\n\n  function getInput() {\n    return (window.jmGravurFeld \u0026\u0026 window.jmGravurFeld('Vorderseite', 1)) ||\n           form.querySelector('.gravurText, input[type=\"text\"][name*=\"ravur\"]');\n  }\n  \/* Rückseite (Zeile 1) im Produktformular *\/\n  function getBackInput() {\n    return window.jmGravurFeld ? window.jmGravurFeld('Rückseite', 1)\n      : form.querySelector('#gravur_Rückseite_1, #gravurtext_rueckseite, #gravurtext_rückseite, input[data-gravur-seite=\"Rückseite\"]');\n  }\n  var ZEILEN = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n\n  function getFont(input) {\n    var f = form.querySelector('#gravur_schriftart_input, input[name*=\"Schriftart\"], select[name*=\"Schriftart\"]');\n    if (f \u0026\u0026 f.value) return f.value;\n    return input ? getComputedStyle(input).fontFamily : 'Playfair Display';\n  }\n\n  \/* Zeilen 1–3 einer Seite (Zeile 1 = Feld der Seite, 2 + 3 per ID) *\/\n  function sideLines(seite, first) {\n    var l = [first ? first.value : ''];\n    for (var n = 2; n \u003c= 3; n++) {\n      var f = n \u003c= ZEILEN \u0026\u0026 window.jmGravurFeld ? window.jmGravurFeld(seite, n) : null;\n      l.push(f ? f.value : '');\n    }\n    return l.map(function (v) { return v.trim(); });\n  }\n  function restOf(l) { return l[2] ? (l[1] + '\\n' + l[2]) : l[1]; }\n\n  function updateText() {\n    var input = getInput();\n    var fl    = sideLines('Vorderseite', input);\n    if (lvSample \u0026\u0026 !fl.join('')) fl = ['A + M', 'Für immer', '12.06.24'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var val   = fl.join('');\n    var font  = getFont(input);\n    var bl    = sideLines('Rückseite', getBackInput());\n    if (lvSample \u0026\u0026 !bl.join('')) bl = ['♥', 'In Liebe', '2024'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var bVal  = bl.join('');\n    texts.forEach(function (t) {\n      t.textContent = fl[0] || (val ? '\\u00A0' : 'Deine Gravur');\n      t.setAttribute('data-rest', val ? restOf(fl) : '');\n      t.classList.toggle('is-empty', !val);\n      t.style.fontFamily = font + ', serif';\n    });\n    backTexts.forEach(function (t) {\n      t.textContent = bl[0] || (bVal ? '\\u00A0' : '');\n      t.setAttribute('data-rest', bVal ? restOf(bl) : '');\n      t.style.fontFamily = font + ', serif';\n    });\n    \/* Vorderseite zeigen, wenn befüllt oder keine Rückseite – Rückseite nur wenn befüllt *\/\n    \/* Beide Seiten befüllt: zuletzt bearbeitete Seite groß zeigen (Tweak: gewählte Seite) *\/\n    var fKey = fl.join('|'), bKey = bl.join('|');\n    if (bKey !== lastBKey \u0026\u0026 bVal) mSide = 'back';\n    if (fKey !== lastFKey \u0026\u0026 val)  mSide = 'front';\n    lastFKey = fKey; lastBKey = bKey;\n    if (tweakActive) mSide = tweakSide;\n    [desktop, mobile].forEach(function (panel) {\n      var f = panel.querySelector('.jm-lv-side[data-side=\"front\"]');\n      var b = panel.querySelector('.jm-lv-side[data-side=\"back\"]');\n      var both = (!!val || tweakSide === 'back') \u0026\u0026 (!!bVal || tweakSide === 'back');\n      var fOn = !!val || !bVal, bOn = !!bVal || tweakSide === 'back';\n      if (both) { fOn = mSide === 'front'; bOn = mSide === 'back'; }\n      if (f) f.classList.toggle('on', fOn);\n      if (b) b.classList.toggle('on', bOn);\n      panel.classList.toggle('jm-lv-both', both);\n    });\n    document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n      t.classList.toggle('active', t.dataset.side === mSide);\n    });\n  }\n  var tweakSide = 'front';\n  var lvSample = false;   \/* Tweak: Beispieltext mit 3 Zeilen *\/\n  var mSide = 'front', lastFKey = '', lastBKey = '', tweakActive = false;\n  \/* Umschalter Vorderseite \/ Rückseite (Desktop + Mobile) *\/\n  document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n    t.addEventListener('click', function (e) {\n      e.preventDefault(); e.stopPropagation();\n      mSide = t.dataset.side;\n      if (tweakActive) { tweakSide = mSide; var sel = document.getElementById('jm-lv-side'); if (sel) { sel.value = mSide; sel.dispatchEvent(new Event('change')); } }\n      updateText();\n    });\n  });\n\n  function show() {\n    updateText();\n    if (window.innerWidth \u003e 768) desktop.classList.add('show');\n    else mobile.classList.add('show');\n  }\n\n  \/* X schließt nur das Panel *\/\n  document.querySelectorAll('.jm-lv-close').forEach(function (btn) {\n    btn.addEventListener('click', function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      btn.parentElement.classList.remove('show');\n    });\n  });\n\n  \/* Tippen → öffnen *\/\n  function isGravurField(el) {\n    if (!el) return false;\n    if (el === getInput() || el === getBackInput()) return true;\n    for (var n = 2; n \u003c= ZEILEN; n++) {\n      if (window.jmGravurFeld \u0026\u0026 (el === window.jmGravurFeld('Vorderseite', n) || el === window.jmGravurFeld('Rückseite', n))) return true;\n    }\n    return !!(el.id \u0026\u0026 \/^gravur_(Vorderseite|Rückseite)_[123]$\/.test(el.id));\n  }\n  form.addEventListener('input', function (e) {\n    if (isGravurField(e.target)) show();\n  });\n\n  \/* Schriftart → öffnen *\/\n  form.addEventListener('click', function (e) {\n    if (e.target.closest('.font-btn')) setTimeout(show, 60);\n  });\n  form.addEventListener('change', function (e) {\n    if (e.target.name \u0026\u0026 e.target.name.indexOf('Schriftart') \u003e -1) show();\n  });\n\n  \/* Symbole → wie Buchstaben einfügen + öffnen *\/\n  var SYM_SEL = '.symbol-btn, .symbol-btn-2, .symbol-button';\n  var valBefore = null;\n\n  \/* Zu welchem Feld gehört der Symbol-Button? (nächstes Gravurfeld im selben Block) *\/\n  function inputForSymbol(btn) {\n    var el = btn.parentElement;\n    while (el \u0026\u0026 el !== form) {\n      var i = el.querySelector('input[type=\"text\"][name*=\"ravur\"], .gravurText');\n      if (i) return i;\n      el = el.parentElement;\n    }\n    return getInput();\n  }\n\n  function isFormSymbol(el) {\n    var btn = el.closest(SYM_SEL);\n    if (!btn || btn.closest('#engraving-preview')) return null; \/* Vorschau-Block in der Beschreibung ignorieren *\/\n    return btn;\n  }\n\n  function shake(input) {\n    input.classList.remove('jm-lv-shake', 'jm-shake');\n    void input.offsetWidth;\n    input.classList.add('jm-lv-shake', 'jm-shake');\n  }\n\n  document.addEventListener('pointerdown', function (e) {\n    var b = isFormSymbol(e.target);\n    var input = b ? inputForSymbol(b) : null;\n    if (input) valBefore = input.value;\n  }, true);\n\n  document.addEventListener('click', function (e) {\n    var btn = isFormSymbol(e.target);\n    var input = btn ? inputForSymbol(btn) : null;\n    if (!btn || !input) return;\n    e.preventDefault();\n    var before = valBefore;\n    valBefore = null;\n    setTimeout(function () {\n      \/* Hat das Gravur-Snippet das Symbol schon eingefügt? Dann nur anzeigen. *\/\n      if (before === null || input.value !== before) { show(); return; }\n      var sym = (btn.dataset.symbol || btn.textContent).trim();\n      var max = input.maxLength \u003e 0 ? input.maxLength : Infinity;\n      if (input.value.length + sym.length \u003e max) { shake(input); show(); return; }\n      input.value += sym;\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      show();\n    }, 40);\n  });\n\n  \/* Jede Wertänderung (auch per Script eingefügt) → Vorschau öffnen *\/\n  function bothVals() {\n    return sideLines('Vorderseite', getInput()).join('|') + '||' + sideLines('Rückseite', getBackInput()).join('|');\n  }\n  var lastVal = bothVals();\n  setInterval(function () {\n    var now = bothVals();\n    if (now !== lastVal) { lastVal = now; show(); }\n  }, 200);\n\n  \/* ── Farbe \/ Variante → Bild wechseln ── *\/\n  function setBackImage(url) {\n    backImgs.forEach(function (img) { if (url) img.src = url; });\n  }\n\n  function setImage(url) {\n    var pre = new Image();\n    pre.onload = function () {\n      imgs.forEach(function (img) {\n        if (!img.getAttribute('src')) { img.src = url; return; }\n        img.style.opacity = 0;\n        setTimeout(function () { img.src = url; img.style.opacity = 1; }, 150);\n      });\n    };\n    pre.src = url;\n  }\n\n  var onVariant = null;\n\n  function checkVariant() {\n    var idField = form.querySelector('[name=\"id\"]');\n    var id = idField ? String(idField.value) : null;\n    if (!id || id === currentId || !variants[id]) return;\n    currentId = id;\n    \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n    var slug = variants[id].title.replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, ' ').toLowerCase()\n      .replace(\/ä\/g, 'ae').replace(\/ö\/g, 'oe').replace(\/ü\/g, 'ue').replace(\/ß\/g, 'ss')\n      .replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '');\n    desktop.dataset.variant = slug;\n    mobile.dataset.variant  = slug;\n    setImage(variants[id].img);\n    setBackImage(variants[id].back);\n    colors.forEach(function (c) { c.textContent = variants[id].title; });\n    if (onVariant) onVariant();\n  }\n\n  form.addEventListener('change', function () { setTimeout(checkVariant, 50); });\n  form.addEventListener('click',  function () { setTimeout(checkVariant, 80); });\n  setInterval(checkVariant, 400);\n  updateText();\n\n  \/* ── Tweak-Panel: URL mit ?jmtweak=1 aufrufen ── *\/\n  if (location.search.indexOf('jmtweak') === -1) return;\n\n  var ranges = { x: [0, 100, 0.5], y: [0, 100, 0.5], rot: [-90, 90, 1], size: [2, 20, 0.25],\n                 tx: [-150, 50, 1], ty: [-400, 100, 1],\n                 lh: [0.6, 2.5, 0.05], gap: [-1.5, 2, 0.05], ls: [-0.1, 0.5, 0.01], rdx: [-3, 3, 0.05], op: [0.2, 1, 0.05],\n                 arc: [-1.5, 1.5, 0.01], l: [0, 100, 1], sh: [0, 1, 0.05],\n                 zoom: [0.5, 3, 0.01], px: [-50, 50, 0.5], py: [-50, 50, 0.5] };\n  var names  = { x: 'Horizontal %', y: 'Vertikal %', rot: 'Drehung °', size: 'Größe',\n                 tx: 'Anker horizontal %', ty: 'Anker vertikal %',\n                 lh: 'Zeilenabstand (Z. 2+3)', gap: 'Abstand Zeile 1 → 2', ls: 'Zeichenabstand', rdx: 'Versatz Z. 2+3 seitlich', op: 'Deckkraft',\n                 arc: 'Wölbung (− ∪ \/ + ∩)', l: 'Schrift hell ↔ dunkel %', sh: 'Gravur-Schatten',\n                 zoom: 'Bild-Zoom ×', px: 'Bild horizontal %', py: 'Bild vertikal %' };\n  \/* Variable, Einheit, Standardwert *\/\n  var PROPS  = { x: ['--lv-x', '%', 50], y: ['--lv-y', '%', 50], rot: ['--lv-rot', 'deg', 0], size: ['--lv-size', '', 5],\n                 tx: ['--lv-tx', '%', -50], ty: ['--lv-ty', '%', -190],\n                 lh: ['--lv-lh', '', 1.15], gap: ['--lv-gap', 'em', 0], ls: ['--lv-ls', 'em', 0.06], rdx: ['--lv-rdx', 'em', 0], op: ['--lv-op', '', 1],\n                 arc: ['--lv-arc', 'em', 0], l: ['--lv-l', '%', 80], sh: ['--lv-sh', '', 0.6],\n                 zoom: ['--lv-zoom', '', 1], px: ['--lv-px', '%', 0], py: ['--lv-py', '%', 0] };\n  var vals   = {};\n  \/* Gravur-Studio unten: eigene Variablen (ohne Anker) *\/\n  var PROPS_ST = { x: ['--st-x', '%', 50], y: ['--st-y', '%', 50], rot: ['--st-rot', 'deg', 0], size: ['--st-size', '', 8],\n                   lh: ['--st-lh', '', 1.15], gap: ['--st-gap', 'em', 0], ls: ['--st-ls', 'em', 0.08], rdx: ['--st-rdx', 'em', 0], op: ['--st-op', '', 1],\n                   arc: ['--st-arc', 'em', 0], l: ['--st-l', '%', 73], sh: ['--st-sh', '', 0.6],\n                   zoom: ['--st-zoom', '', 1], px: ['--st-px', '%', 0], py: ['--st-py', '%', 0] };\n  var area = 'top';   \/* top | studio | studiopop *\/\n  function curProps() { return area === 'top' ? PROPS : PROPS_ST; }\n  function studioTarget() {\n    var st = window.jmGkStudio;\n    if (!st) return null;\n    return area === 'studiopop' ? st.popupBox : st.studioBox;\n  }\n  function tTargets() {\n    if (area === 'top') return Array.prototype.slice.call(sideStages());\n    var t = studioTarget();\n    return t ? [t] : [];\n  }\n\n  function activePanel() { return window.innerWidth \u003e 768 ? desktop : mobile; }\n\n  \/* Stages der gewählten Seite (Vorderseite \/ Rückseite) *\/\n  var SIDE_SEL = { front: '.jm-lv-stage:not(.jm-lv-stage--back)', back: '.jm-lv-stage--back' };\n  function sideStages() { return document.querySelectorAll(SIDE_SEL[tweakSide]); }\n\n  function readVals() {\n    if (area !== 'top') {\n      var st = window.jmGkStudio, tg = studioTarget();\n      if (st \u0026\u0026 st.side() !== tweakSide) st.setSide(tweakSide);\n      if (st) st.mark();\n      if (tg) {\n        Object.keys(PROPS_ST).forEach(function (k) { tg.style.removeProperty(PROPS_ST[k][0]); });\n        if (st) st.mark();\n        var cst = getComputedStyle(tg);\n        Object.keys(PROPS_ST).forEach(function (k) {\n          var v = parseFloat(cst.getPropertyValue(PROPS_ST[k][0]));\n          vals[k] = isNaN(v) ? PROPS_ST[k][2] : v;\n        });\n      }\n      return;\n    }\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.removeProperty(PROPS[k][0]); });\n    });\n    var cs = getComputedStyle(activePanel().querySelector(SIDE_SEL[tweakSide]));\n    \/* Anker-Standard je Ansicht (Desktop: -50 \/ -190 · Mobile: -9 \/ -239 bzw. 0 \/ -239) *\/\n    var mob = activePanel() === mobile;\n    var hasVar = \/translate\\(-9%\/.test(getComputedStyle(activePanel().querySelector('.jm-lv-text')).transform) || !!activePanel().dataset.variant;\n    PROPS.tx[2] = mob ? (hasVar ? -9 : 0) : -50;\n    PROPS.ty[2] = mob ? -239 : -190;\n    Object.keys(PROPS).forEach(function (k) {\n      var v = parseFloat(cs.getPropertyValue(PROPS[k][0]));\n      vals[k] = isNaN(v) ? PROPS[k][2] : v;\n    });\n  }\n  readVals();\n\n  var tw = document.createElement('div');\n  tw.id = 'jm-lv-tweak';\n  tweakActive = true;\n  var html = '\u003cstrong style=\"color:#c9a84c;display:flex;justify-content:space-between;align-items:center\"\u003e⠿ Gravur-Position · \u003cspan id=\"jm-lv-view\"\u003e\u003c\/span\u003e'\n           + '\u003cbutton type=\"button\" id=\"jm-lv-min\" title=\"einklappen\" style=\"width:auto;margin:0;padding:2px 10px;background:#333;color:#eee\"\u003e–\u003c\/button\u003e\u003c\/strong\u003e'\n           + '\u003cselect id=\"jm-lv-area\"\u003e\u003coption value=\"top\"\u003eBereich: Live-Vorschau oben\u003c\/option\u003e'\n           + '\u003coption value=\"studio\"\u003eBereich: Gravur-Studio (Bild)\u003c\/option\u003e'\n           + '\u003coption value=\"studiopop\"\u003eBereich: Gravur-Studio Mobile-Popup\u003c\/option\u003e\u003c\/select\u003e'\n           + '\u003cselect id=\"jm-lv-side\"\u003e\u003coption value=\"front\"\u003eVorderseite\u003c\/option\u003e\u003coption value=\"back\"\u003eRückseite\u003c\/option\u003e\u003c\/select\u003e';\n  Object.keys(vals).forEach(function (k) {\n    if (k === 'tx') html += '\u003cdiv data-row=\"tx\" style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eAnker (Feinposition des Textblocks)\u003c\/div\u003e';\n    if (k === 'lh') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eZeilen \u0026amp; Schrift\u003c\/div\u003e';\n    if (k === 'arc') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eWölbung \u0026amp; Lesbarkeit\u003c\/div\u003e';\n    if (k === 'zoom') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eBild-Zoom \u0026amp; Ausschnitt\u003c\/div\u003e';\n    html += '\u003cdiv data-row=\"' + k + '\"\u003e\u003clabel\u003e' + names[k] + ' \u003cspan id=\"jm-lv-v-' + k + '\"\u003e' + vals[k] + '\u003c\/span\u003e\u003c\/label\u003e' +\n            '\u003cinput type=\"range\" data-k=\"' + k + '\" min=\"' + ranges[k][0] + '\" max=\"' + ranges[k][1] +\n            '\" step=\"' + ranges[k][2] + '\" value=\"' + vals[k] + '\"\u003e\u003c\/div\u003e';\n  });\n  html += '\u003cbutton type=\"button\" id=\"jm-lv-sample\" style=\"background:#333;color:#eee\"\u003eBeispieltext: aus\u003c\/button\u003e'\n        + '\u003cbutton type=\"button\" id=\"jm-lv-reset\" style=\"background:#333;color:#eee\"\u003eSeite zurücksetzen\u003c\/button\u003e'\n        + '\u003ccode id=\"jm-lv-out\"\u003e\u003c\/code\u003e\u003cbutton type=\"button\" id=\"jm-lv-copy\"\u003eWerte kopieren\u003c\/button\u003e';\n  tw.innerHTML = html;\n  document.body.appendChild(tw);\n\n  function apply() {\n    if (area !== 'top') return applyStudio();\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.setProperty(PROPS[k][0], vals[k] + PROPS[k][1]); });\n    });\n    var panel = activePanel();\n    \/* Ausgabe: Position immer, Feinjustierung nur wenn vom Standard abweichend *\/\n    var lines = Object.keys(PROPS).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS[k][2];\n    }).map(function (k) { return '  ' + PROPS[k][0] + ': ' + vals[k] + PROPS[k][1] + ';'; });\n    var rule = '#' + panel.id + '[data-variant=\"' + (panel.dataset.variant || '') + '\"] .jm-lv-stage' + (tweakSide === 'back' ? '.jm-lv-stage--back' : '') + ' {\\n' +\n      lines.join('\\n') + '\\n}';\n    document.getElementById('jm-lv-out').textContent = panel === mobile\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Gravur-Studio: Werte anwenden + CSS-Regel ausgeben *\/\n  function applyStudio() {\n    var tg = studioTarget(), st = window.jmGkStudio;\n    if (!tg) { document.getElementById('jm-lv-out').textContent = '⚠ Bereich nicht gefunden'; return; }\n    Object.keys(PROPS_ST).forEach(function (k) { tg.style.setProperty(PROPS_ST[k][0], vals[k] + PROPS_ST[k][1]); });\n    tg.classList.add('jm-st-pos');\n    \/* Beispieltext im Studio, solange die Seite leer ist *\/\n    if (lvSample \u0026\u0026 st \u0026\u0026 !window.jmGkSides.has(tweakSide)) {\n      tg.querySelectorAll('#engravingPreviewText, .popup-preview-text').forEach(function (el) {\n        el.textContent = 'A + M';\n        el.setAttribute('data-rest', ZEILEN \u003e= 3 ? 'Für immer\\n12.06.24' : (ZEILEN === 2 ? 'Für immer' : ''));\n      });\n      var ov = tg.querySelector('.engraving-overlay');\n      if (ov) ov.classList.add('active');\n    }\n    if (area === 'studiopop') {\n      var pop = document.getElementById('engraving-mobile-popup');\n      if (pop) setTimeout(function () { pop.classList.add('show'); }, 30);\n    }\n    var lines = Object.keys(PROPS_ST).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS_ST[k][2];\n    }).map(function (k) { return '  ' + PROPS_ST[k][0] + ': ' + vals[k] + PROPS_ST[k][1] + ';'; });\n    var sel = (area === 'studiopop' ? '#engraving-mobile-popup .popup-preview' : '.engraving-preview-image')\n            + '[data-variant=\"' + (tg.dataset.variant || '') + '\"][data-side=\"' + tweakSide + '\"]';\n    var rule = sel + ' {\\n' + lines.join('\\n') + '\\n}';\n    \/* Mobile-Werte nur für Mobile, Desktop-Werte gelten als Basis für alle Größen *\/\n    document.getElementById('jm-lv-out').textContent = (area === 'studiopop' || activePanel() === mobile)\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Bereich wechseln: Regler-Zeilen anpassen, Bereich sichtbar machen *\/\n  function syncRows() {\n    ['tx', 'ty'].forEach(function (k) {\n      tw.querySelectorAll('[data-row=\"' + k + '\"]').forEach(function (r) { r.style.display = area === 'top' ? '' : 'none'; });\n    });\n    var opt = tw.querySelector('#jm-lv-area option[value=\"studiopop\"]');\n    if (opt) opt.disabled = activePanel() !== mobile;\n  }\n  function focusArea() {\n    if (area === 'top') { show(); return; }\n    desktop.classList.remove('show'); mobile.classList.remove('show');\n    \/* Gravur-Studio liegt in Schritt 2 des Konfigurators → Schritt öffnen *\/\n    if (window.jmCfg \u0026\u0026 window.jmCfg.step() !== 2) window.jmCfg.go(2, false);\n    var tg = studioTarget();\n    if (area === 'studio' \u0026\u0026 tg) tg.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    if (area === 'studiopop') {\n      var sec = document.getElementById('engraving-preview');\n      if (sec) sec.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  function viewLabel() {\n    var v = document.getElementById('jm-lv-view');\n    if (v) v.textContent = activePanel() === mobile ? 'Mobile' : 'Desktop';\n  }\n  \/* Ansicht gewechselt (Fenster schmaler\/breiter, Handy gedreht) → Werte der neuen Ansicht laden *\/\n  var lastView = activePanel();\n  window.addEventListener('resize', function () {\n    if (activePanel() !== lastView) { lastView = activePanel(); onVariant(); show(); }\n  });\n\n  \/* Variante gewechselt → Regler auf die Werte dieser Variante setzen *\/\n  onVariant = function () {\n    viewLabel();\n    syncRows();\n    readVals();\n    Object.keys(vals).forEach(function (k) {\n      tw.querySelector('[data-k=\"' + k + '\"]').value = vals[k];\n      document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    });\n    apply();\n  };\n\n  \/* Seite wechseln → Regler auf die Werte dieser Seite setzen, Rückseite sichtbar machen *\/\n  document.getElementById('jm-lv-side').addEventListener('change', function () {\n    tweakSide = this.value;\n    onVariant();\n    if (area === 'top') show(); else focusArea();\n  });\n  document.getElementById('jm-lv-area').addEventListener('change', function () {\n    area = this.value;\n    onVariant();\n    focusArea();\n  });\n\n  tw.addEventListener('input', function (e) {\n    var k = e.target.dataset.k;\n    if (!k) return;\n    vals[k] = parseFloat(e.target.value);\n    document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    apply();\n    if (window.jmArcRefresh) setTimeout(window.jmArcRefresh, 0);\n    if (area === 'top') show();\n  });\n\n  \/* Beispieltext: zeigt 3 Zeilen auf beiden Seiten (nur Vorschau, Formular bleibt leer) *\/\n  document.getElementById('jm-lv-sample').addEventListener('click', function () {\n    lvSample = !lvSample;\n    this.textContent = 'Beispieltext: ' + (lvSample ? 'an' : 'aus');\n    if (area === 'top') show();\n    else { if (!lvSample \u0026\u0026 window.jmGkStudio) window.jmGkStudio.render(false); apply(); }\n  });\n  \/* Zurücksetzen: Live-Werte der gewählten Seite verwerfen → Werte aus dem CSS *\/\n  document.getElementById('jm-lv-reset').addEventListener('click', function () {\n    onVariant();\n    if (area === 'top') show();\n  });\n\n  document.getElementById('jm-lv-copy').addEventListener('click', function () {\n    if (navigator.clipboard) navigator.clipboard.writeText(document.getElementById('jm-lv-out').textContent);\n    var b = this; b.textContent = 'Kopiert ✓';\n    setTimeout(function () { b.textContent = 'Werte kopieren'; }, 1500);\n  });\n\n  \/* Draggable ohne Sprung *\/\n  var drag = false, ox = 0, oy = 0;\n  \/* Touch (Mobile): über die Überschrift verschieben *\/\n  var head = tw.querySelector('strong');\n  \/* Einklappen: nur die Kopfzeile bleibt sichtbar → Vorschau frei *\/\n  document.getElementById('jm-lv-min').addEventListener('click', function (e) {\n    e.stopPropagation();\n    var min = tw.classList.toggle('jm-lv-min');\n    Array.prototype.forEach.call(tw.children, function (c) { if (c !== head) c.style.display = min ? 'none' : ''; });\n    if (!min) syncRows();\n    this.textContent = min ? '+' : '–';\n  });\n  head.addEventListener('touchstart', function (e) {\n    if (e.target.closest \u0026\u0026 e.target.closest('button')) return;\n    var t = e.touches[0], r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = t.clientX - r.left; oy = t.clientY - r.top;\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchmove', function (e) {\n    if (!drag) return;\n    var t = e.touches[0];\n    tw.style.left = Math.min(Math.max(t.clientX - ox, 0), window.innerWidth - 60) + 'px';\n    tw.style.top  = Math.min(Math.max(t.clientY - oy, 0), window.innerHeight - 40) + 'px';\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchend', function () { drag = false; });\n\n  tw.addEventListener('mousedown', function (e) {\n    if (['INPUT', 'BUTTON', 'CODE', 'SELECT', 'OPTION'].indexOf(e.target.tagName) \u003e -1) return;\n    var r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = e.clientX - r.left; oy = e.clientY - r.top;\n    e.preventDefault();\n  });\n  document.addEventListener('mousemove', function (e) {\n    if (!drag) return;\n    tw.style.left = (e.clientX - ox) + 'px';\n    tw.style.top  = (e.clientY - oy) + 'px';\n  });\n  document.addEventListener('mouseup', function () { drag = false; });\n\n  apply();\n  show();\n});\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"rot","offer_id":55357573398793,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"schwarz","offer_id":55357573431561,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"grün","offer_id":55364247290121,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_6690.jpg?v=1745673875"},{"product_id":"edelstahl-herzanhanger-gravur","title":"Edelstahl Herzanhänger mit persönlicher Gravur","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003ctitle\u003eEdelstahl Herzanhänger mit persönlicher Gravur\u003c\/title\u003e\n\n  \u003c!-- SEO --\u003e\n  \u003cmeta name=\"description\" content=\"Edelstahl Herzanhänger mit kostenloser Gravur. Massiver Herzanhänger 29x33mm, Hochglanz poliert. Zeitloses Unisex Design.\"\u003e\n  \u003cmeta name=\"keywords\" content=\"Herzanhänger Gravur, Edelstahl Herz Anhänger, personalisierter Schmuck, Herz Kette graviert, Geschenk Liebe, Gravur Schmuck\"\u003e\n\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n  \u003c!-- Fonts --\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n  \u003c!-- Bootstrap Icons --\u003e\n  \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n  \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 100%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n    \n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  \n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n  \n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n   \n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n   \n  color: rgb(217 217 217 \/ 84%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n  \n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n  \n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n \n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  \n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n      bottom:65px;\n      left:35px;\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n    \n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n    \n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n    \n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n   \n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n \n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n   \n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n  bottom: 140px;\n    right: 35px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n    \n  \u003c\/style\u003e\n\n\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n  \u003c!-- =========================\n     HERO: Edelstahl Herz Anhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n  \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n    \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n      \u003c!-- Textbereich --\u003e\n      \u003cdiv class=\"engraving-hero-text\"\u003e\n        \u003cspan class=\"engraving-badge\"\u003e\n           \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\u003ca href=\"#engraving-preview\" class=\"live-preview-link\"\u003e\n      · mit Live-Vorschau \u003ci class=\"bi bi-arrow-down-short\"\u003e\u003c\/i\u003e\n    \u003c\/a\u003e\n  \u003c\/span\u003e\n\n        \u003ch1\u003eEdelstahl Herzanhänger mit persönlicher Gravur\u003c\/h1\u003e\n\n        \u003cp\u003e\n          Ein zeitloses Herz aus massivem Edelstahl – individuell graviert und geschaffen, um Gefühle für immer festzuhalten.\n        \u003c\/p\u003e\n\n        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n          Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"micro-trust-valentine\"\u003e\n          Sicher · Persönlich · Handgefertigt\n        \u003c\/div\u003e\n\n        \u003c!-- Trust Icons --\u003e\n        \u003cdiv class=\"engraving-trust\"\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 29 × 33 mm \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e Unisex\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Bildbereich --\u003e\n      \u003cdiv class=\"engraving-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2568.jpg?v=1769465475\" alt=\"Edelstahl Herzanhänger mit Gravur\"\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     WHY HEART STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ch2\u003eWarum dieses Herz?\u003c\/h2\u003e\n    \u003cp\u003e\n      Jedes Herz erzählt seine eigene Geschichte. Massives Edelstahl, fein verarbeitet und mit deiner persönlichen Gravur – ein Symbol für Nähe, Liebe und besondere Momente.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"engraving-why-grid\"\u003e\n      \n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n        \u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Herz graviert, kostenlos.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n        \u003cp\u003eEin Herz, das Nähe ausdrückt – perfekt für Armbänder, Ketten oder Schlüsselanhänger.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n        \u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n  \n  \u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n        \u003cp\u003e\n          Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e  \n          nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n        \u003cp\u003e\n          Jede Gravur entsteht in unserem Familienbetrieb –  \n          \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n        \u003c\/p\u003e\n         \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n        \u003cp\u003e\n          Sichere Zahlung, persönlicher Support  \n          und höchste Qualitätskontrolle vor dem Versand.\n        \u003c\/p\u003e\n         \u003cp\u003eSollte etwas nicht passen, findest du mit uns\n        unkompliziert eine Lösung.  \u003c\/p\u003e\n        \n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"engraving-section engraving-fade\"\u003e\n    \u003cdiv class=\"container engraving-hero-text\"\u003e\n      \u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n      \u003cp class=\"engraving-section-desc\"\u003e\n        Dieser Herzanhänger steht für Beständigkeit, Persönlichkeit und zeitlose Eleganz.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"engraving-features\"\u003e\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n          \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n          \u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – \n    entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n         \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n  \u003cp\u003e\n    Zeitloses Design, persönliche Gravur – \n    ein Schmuckstück, das Emotionen transportiert statt nur gut auszusehen.\n  \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-person\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eUnisex\u003c\/h3\u003e\n          \u003cp\u003eReduziert, elegant – für Damen \u0026amp; Herren geeignet.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\n\n    \n  \u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n  \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n    \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n    \u003cdiv class=\"engraving-specs\"\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eGröße:\u003c\/strong\u003e 29 × 33 mm\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e 7,3 g\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n      \u003c\/ul\u003e\n\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Kette · Armband · Schlüsselanhänger\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Unisex\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n  \u003cspan class=\"engraving-badge visible-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n  \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n    \u003c!-- IMAGE --\u003e\n    \u003cdiv class=\"engraving-preview-image\"\u003e\n      \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Herzanhaenger_26.png?v=1769114894\" alt=\"Edelstahl Herzanhänger ohne Gravur\"\u003e\n\n      \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n       \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n  \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n  \u003cspan class=\"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      \u003cp class=\"engraving-preview-note\"\u003e\n  ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich.\n\u003c\/p\u003e\n\n      \n    \u003c\/div\u003e\n\n    \u003c!-- CONTENT --\u003e\n    \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n      \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n\n      \u003ch2\u003eMach dieses Herz einzigartig\u003c\/h2\u003e\n      \u003cp\u003e\n        Gib deine gewünschte Gravur ein und sieh sofort,\n        wie dein persönlicher Herzanhänger Gestalt annimmt.\n      \u003c\/p\u003e\n\n      \u003c!-- INPUT --\u003e\n      \u003cdiv class=\"engraving-input-wrap\"\u003e\n        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n      \u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\u003e\n\u003cdiv class=\"engraving-symbol-picker\"\u003e\n  \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n      \u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n  \n\n  \u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n  \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n \n    \n  \u003c!-- SERIF --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n     \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n      Times New Roman\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n      Georgia\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n  \u003c!-- SANS --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n      Arial\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n      Helvetica\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- MONOSPACE --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n      Courier New\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n      Lucida Console\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- SCRIPT --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n      Allura\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n      Alex Brush\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n      Kaushan Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HANDWRITING --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n      Pacifico\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n      Indie Flower\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n      Dancing Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n  \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n      \u003c!-- CTA --\u003e\n      \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n      \u003c\/button\u003e\n\n      \u003c!-- MICRO TRUST --\u003e\n      \u003cdiv class=\"engraving-micro-trust\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n    \n\u003c!-- End Block --\u003e\n  \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n    \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n    \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n   \u003cp\u003e Handarbeit 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 \n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n  \u003cdiv class=\"popup-preview\" style=\"position: relative;\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Herzanhaenger_26-removebg-preview.png?v=1769376184\" alt=\"Gravur Vorschau\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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  \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n    \n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravurtext\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Edelstahl","offer_id":56774044188937,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet","offer_id":56774044221705,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet)","offer_id":56781213597961,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2566.jpg?v=1769465475"},{"product_id":"herzanhaenger-edelstahl-gravur","title":"Edelstahl Herzanhänger mit Gravur – Zeitlose Eleganz zum Verschenken","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003ctitle\u003eEdelstahl Herzanhänger mit persönlicher Gravur\u003c\/title\u003e\n\n  \u003c!-- SEO --\u003e\n  \u003cmeta name=\"description\" content=\"Edelstahl 15x17mm Herzanhänger mit kostenloser Gravur. Minimalistisch, hochwertig und persönlich. Zeitlos, leicht und bedeutungsvoll – ein persönliches Geschenk für Herzensmomente.\"\u003e\n  \u003cmeta name=\"keywords\" content=\"Herzanhänger Gravur, Edelstahl Herz Anhänger, personalisierter Schmuck, Herz Kette graviert, Geschenk Liebe, Gravur Schmuck\"\u003e\n\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n  \u003c!-- Fonts --\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n  \u003c!-- Bootstrap Icons --\u003e\n  \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n  \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 100%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 30px 80px rgba(0,0,0,0.18);\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n    \n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  \n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n  \n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n   \n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n} \n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n}\n    \n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n  \n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n \n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  \n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\ntop: 4px;\n    right: 44px;\n    transform: rotateZ(44deg);\n}\n    @media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n top: -16px;\n    right: 24px;\n    transform: rotateZ(44deg);\n}\n  .popup-preview-text-wrap {\n       position: absolute;\n          top: 70%;\n        left: 39%;\n        transform: translate(-50%, -50%) rotate(41deg);\n  white-space: nowrap;\n  display: block;\n        \n}  \n      \n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  position: relative;\n    left: 89px;\n    bottom: 100px;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n    \n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n    \n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n    \n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n   \n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n \n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n   \n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n \n     position: relative;\n  font-size: 1.7rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n  text-shadow:\n    0 1px 1px rgba(0,0,0,.85),\n    0 -1px 0 rgba(255,255,255,.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n  text-align: center;\n  white-space: nowrap;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n  top: -6px;\n  right: -18px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity .25s ease, transform .25s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n    \n  \u003c\/style\u003e\n\n\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n  \u003c!-- =========================\n     HERO: Edelstahl Herz Anhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n  \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n    \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n      \u003c!-- Textbereich --\u003e\n      \u003cdiv class=\"engraving-hero-text\"\u003e\n         \u003ch1\u003eEdelstahl Herzanhänger mit persönlicher Gravur\u003c\/h1\u003e\n        \u003cdiv class=\"hero-subline\"\u003e\n  \u003cspan class=\"engraving-badge\"\u003e\n    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n  \u003c\/span\u003e\n\n  \u003cbutton type=\"button\" class=\"luxury-shine-btn luxury-rose live-preview-link\" data-target=\"#engraving-preview\"\u003e\n      \u003cspan class=\"gs-live-dot\"\u003e\u003c\/span\u003e\n      \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n      Live-Vorschau ansehen\n    \u003c\/button\u003e\n\u003c\/div\u003e\n\n       \n\u003cp\u003eDieser filigrane Herzanhänger aus hochwertigem Edelstahl verbindet zeitloses Design\nmit persönlicher Bedeutung. Ideal als Geschenk für einen besonderen Menschen –\noder als Erinnerung für dich selbst.\u003c\/p\u003e\n        \u003cp\u003e\n          Minimalistisch, leicht \u0026amp; voller Bedeutung – gestalte deinen Herzanhänger mit einer Gravur, die bleibt.\n        \u003c\/p\u003e\n\n        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n          Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"micro-trust-valentine\"\u003e\n          Sicher · Persönlich · Handgefertigt\n        \u003c\/div\u003e\n\n        \u003c!-- Trust Icons --\u003e\n        \u003cdiv class=\"engraving-trust\"\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 15 × 17 mm \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-chevron-bar-contract\"\u003e\u003c\/i\u003e 1 mm Dicke\u003c\/span\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Bildbereich --\u003e\n      \u003cdiv class=\"engraving-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/UN-0109_gmup8woco87_2026-01-26-18-11-16.jpg?v=1769468046\" alt=\"Edelstahl Herzanhänger mit individueller Gravur\"\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     WHY HEART STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ch2\u003eWarum dieses Herz?\u003c\/h2\u003e\n    \u003cp\u003e\n      Der Edelstahl Herzanhänger überzeugt durch seine schlichte Eleganz und sein leichtes, angenehmes Tragegefühl. Mit einer Größe von 15 × 17 mm und einer Dicke von nur 1 mm wirkt er dezent, aber ausdrucksstark.\n    \u003c\/p\u003e\n    \u003ch3\u003eEin Geschenk mit Bedeutung\u003c\/h3\u003e\n\u003cp\u003e\nOb Jahrestag, Geburtstag, Valentinstag oder einfach als Zeichen deiner Liebe –\ndieser Herzanhänger ist ein persönliches Geschenk, das Emotionen trägt.\n\u003c\/p\u003e\n\n    \u003cdiv class=\"engraving-why-grid\"\u003e\n      \n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n        \u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Herz graviert, kostenlos.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n        \u003cp\u003eEin Herz, das Nähe ausdrückt – perfekt für Armbänder, Ketten oder Schlüsselanhänger.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n        \u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n  \n  \u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n        \u003cp\u003e\n          Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e  \n          nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n        \u003cp\u003e\n          Jede Gravur entsteht in unserem Familienbetrieb –  \n          \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n        \u003c\/p\u003e\n         \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n        \u003cp\u003e\n          Sichere Zahlung, persönlicher Support  \n          und höchste Qualitätskontrolle vor dem Versand.\n        \u003c\/p\u003e\n         \u003cp\u003eSollte etwas nicht passen, findest du mit uns\n        unkompliziert eine Lösung.  \u003c\/p\u003e\n        \n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"engraving-section engraving-fade\"\u003e\n    \u003cdiv class=\"container engraving-hero-text\"\u003e\n      \u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n      \u003cp class=\"engraving-section-desc\"\u003e\n        Dieser Herzanhänger steht für Beständigkeit, Persönlichkeit und zeitlose Eleganz.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"engraving-features\"\u003e\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n          \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n          \u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – \n    entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n         \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n  \u003cp\u003e\n    Zeitloses Design, persönliche Gravur – \n    ein Schmuckstück, das Emotionen transportiert statt nur gut auszusehen.\n  \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n         \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n  \u003ch3\u003eElegant \u0026amp; zeitlos\u003c\/h3\u003e\n  \u003cp\u003eMinimalistisches Design – perfekt für stilbewusste Damen.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\n\n    \n  \u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n  \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n    \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n    \u003cdiv class=\"engraving-specs\"\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eGröße:\u003c\/strong\u003e 15 × 17 mm\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e 1 g\u003c\/li\u003e\n       \n\u003cli\u003e\n\u003ci class=\"bi bi-chevron-bar-contract\"\u003e\u003c\/i\u003e \u003cstrong\u003eDicke:\u003c\/strong\u003e 1 mm\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n      \u003c\/ul\u003e\n\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Kette · Armband · Schlüsselanhänger\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Dame\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n  \u003cspan class=\"engraving-badge visible-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n  \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n    \u003c!-- IMAGE --\u003e\n    \u003cdiv class=\"engraving-preview-image\"\u003e\n      \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2590.png?v=1769471465\" alt=\"Edelstahl Herzanhänger ohne Gravur\"\u003e\n\n      \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n       \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n  \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n  \u003cspan class=\"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      \u003cp class=\"engraving-preview-note\"\u003e\n  ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich.\n\u003c\/p\u003e\n\n      \n    \u003c\/div\u003e\n\n    \u003c!-- CONTENT --\u003e\n    \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n      \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n\n      \u003ch2\u003eMach dieses Herz einzigartig\u003c\/h2\u003e\n      \u003cp\u003e\n        Gib deine gewünschte Gravur ein und sieh sofort,\n        wie dein persönlicher Herzanhänger Gestalt annimmt.\n      \u003c\/p\u003e\n\n      \u003c!-- INPUT --\u003e\n      \u003cdiv class=\"engraving-input-wrap\"\u003e\n        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n      \u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\u003e\n\u003cdiv class=\"engraving-symbol-picker\"\u003e\n  \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n      \u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n  \n\n  \u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n  \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n \n    \n  \u003c!-- SERIF --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n     \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n      Times New Roman\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n      Georgia\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n  \u003c!-- SANS --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n      Arial\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n      Helvetica\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- MONOSPACE --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n      Courier New\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n      Lucida Console\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- SCRIPT --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n      Allura\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n      Alex Brush\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n      Kaushan Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HANDWRITING --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n      Pacifico\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n      Indie Flower\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n      Dancing Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n  \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n      \u003c!-- CTA --\u003e\n      \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n      \u003c\/button\u003e\n\n      \u003c!-- MICRO TRUST --\u003e\n      \u003cdiv class=\"engraving-micro-trust\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n    \n\u003c!-- End Block --\u003e\n  \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n    \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n    \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n   \u003cp\u003e Handarbeit 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 \n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n  \u003cdiv class=\"popup-preview\" style=\"position: relative;\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2590.png?v=1769471465\" alt=\"Gravur Vorschau\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n    \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n     \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n    \n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravurtext\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Edelstahl","offer_id":56781215236361,"sku":null,"price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet","offer_id":56781215269129,"sku":null,"price":29.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet)","offer_id":56781215301897,"sku":null,"price":29.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/UN-0109_gmup8woco87_2026-01-26-18-11-16.jpg?v=1769473768"},{"product_id":"herzanhaenger-mit-zirkon","title":"Herzanhänger mit Zirkon – Edelstahl Schmuck mit Gravur","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!-- SEO --\u003e\n\u003cp\u003e  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\u003c\/p\u003e\n\u003c!-- Fonts --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003c!-- Bootstrap Icons --\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n\/* ==============================\n   SCOPED PRODUCT STYLES\n   ============================== *\/\n.engraving-product {\n  font-family: 'Inter', sans-serif;\n  color: #111;\n}\n.engraving-product .container {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n.engraving-product .container2 {\n  max-width: 1200px;\n  width: 110%;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n\/* HERO *\/\n.engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n.engraving-badge i { font-size: 1.2rem; }\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n  line-height: 1.2;\n  margin-bottom: 20px;\n  color: #222;\n  font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n.engraving-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 40px;\n  background: #111;\n  color: #fff;\n  border-radius: 40px;\n  font-weight: 500;\n  transition: all .3s ease;\n}\n.engraving-cta:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 20px 40px rgba(0,0,0,.2);\n}\n.engraving-trust {\n  margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n  color: #777;\n}\n.engraving-trust span {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.engraving-image {\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n}\n.engraving-image img {\n  width: 140%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n}\n\n\/* HERO BILD MIT HOVER-WECHSEL (watch-image) *\/\n.engraving-product .watch-image {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: flex-start;\n}\n.engraving-product .watch-image img {\n  width: 100%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n  transition: opacity 0.4s ease;\n}\n.engraving-product .watch-image .watch-img-hover {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n  opacity: 0;\n}\n.engraving-product .watch-image:hover .watch-img-hover { opacity: 1; }\n.engraving-product .watch-image:hover .watch-img-primary { opacity: 0; }\n\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image { justify-content: center; }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n    margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n\/* SECTIONS *\/\n.engraving-section { padding: 40px 0; }\n.engraving-section h2 {\n  font-family: 'Playfair Display', serif;\n  font-size: 38px;\n  margin-bottom: 20px;\n}\n.engraving-section-desc {\n  max-width: 720px;\n  color: #666;\n  margin-bottom: 60px;\n}\n\n\/* FEATURES *\/\n.engraving-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 40px;\n}\n\n\/* SPECS *\/\n.engraving-specs {\n  background: #fff;\n  border-radius: 30px;\n  padding: 50px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 40px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.05);\n}\n.engraving-specs ul { list-style: none; padding: 0; }\n.engraving-specs li {\n  padding: 12px 0;\n  border-bottom: 1px solid #eee;\n  font-size: 15px;\n  display: flex;\n  gap: 10px;\n  align-items: center;\n}\n.engraving-specs i { color: #b6a573; }\n\n\/* CTA STRIP *\/\n.engraving-cta-strip {\n  background: linear-gradient(135deg, #111, #1c1c1c);\n  color: #fff;\n  padding: 80px 20px;\n  text-align: center;\n}\n.engraving-cta-strip h2 { color: #fff; margin-bottom: 20px; }\n.engraving-cta-strip p { color: #ccc; margin-bottom: 30px; }\n\n\/* ANIMATION *\/\n.engraving-fade {\n  opacity: 0;\n  transform: translateY(30px);\n  transition: 1s ease;\n}\n.engraving-fade.show {\n  opacity: 1;\n  transform: none;\n}\n\n@media (max-width: 900px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n}\n\n.engraving-collection-btn {\n  position: relative;\n  padding: 14px 28px;\n  background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n  color: rgb(255, 255, 255);\n  font-weight: 400;\n  font-size: 13px;\n  border-radius: 999px;\n  letter-spacing: .5px;\n  border: 1px solid rgba(220, 184, 75, 0.6);\n  cursor: pointer;\n  overflow: hidden;\n  box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n  transition: all .35s ease;\n}\n.engraving-collection-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n  color: #ffdd7a;\n}\n.engraving-collection-btn::before {\n  content: '';\n  position: absolute;\n  inset: -1px;\n  border-radius: inherit;\n  background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n  opacity: .45;\n  pointer-events: none;\n  animation: idleGlow 4.5s ease-in-out infinite;\n}\n.engraving-collection-btn::after {\n  content: '';\n  position: absolute;\n  inset: -120%;\n  background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n  opacity: 0;\n  transform: scale(.2);\n  pointer-events: none;\n}\n.engraving-collection-btn:hover::after {\n  animation: pulseGlow 1.1s ease-out forwards;\n}\n.engraving-collection-btn i { margin-left: 8px; }\n\n.micro-trust-valentine {\n  margin-top: 1.5rem;\n  font-size: 1.3rem;\n  color: #746742;\n  font-weight: 600;\n}\n\n\/* SPECS (Flex-Layout) *\/\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px;\n  flex-wrap: wrap;\n  margin-top: 30px;\n}\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: #555;\n  margin-bottom: 12px;\n}\n.engraving-specs ul li i {\n  color: #bfac79;\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n.engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    padding: 31px;\n  }\n  .engraving-specs ul { text-align: center; }\n}\n\n\/* SHIPPING \u0026 TRUST BLOCK *\/\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n  text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79;\n  margin-bottom: 18px;\n}\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n  .shipping-item { padding: 32px 22px; }\n}\n\n\/* WHY HEART STORY BLOCK *\/\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79;\n  margin-bottom: 16px;\n  display: inline-block;\n}\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n  .engraving-why-heart p { margin-bottom: 40px; }\n}\n\n\/* GRAVUR LIVE PREVIEW *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\/* Gravur-Studio: Vorderseite \/ Rückseite *\/\n    .jm-gk-sides {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n        gap: 8px;\n        margin: 0 0 16px;\n        max-width: 420px;\n    }\n.jm-gk-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-gk-side em { font-style: normal; font-weight: 500; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: #a89060; }\n.jm-gk-side small { font-size: 13px; font-weight: 600; color: #9a8a6a; min-height: 18px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .jm-gk-side {\n        min-width: 0;\n    }\n\n    .jm-gk-sum + .jm-gk-sum::before {\n        content: \" \/ \";\n    }\n\n    @media (max-width: 768px) {\n        \/* Mobile: Zeilen untereinander statt nebeneinander → nichts wird seitlich geschoben *\/\n        .jm-gk-side small {\n            white-space: normal;\n            text-overflow: clip;\n        }\n\n        .jm-gk-sum {\n            display: block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            line-height: 1.35;\n        }\n\n            .jm-gk-sum + .jm-gk-sum::before {\n                content: none;\n            }\n    }\n.jm-gk-side:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-gk-side.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-gk-side.filled small { color: #1a1410; }\n.jm-gk-side-label { position: absolute; top: 12px; left: 12px; z-index: 3; 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; pointer-events: none; }\n@media (max-width: 900px) { .jm-gk-sides { margin-left: auto; margin-right: auto; } }\n\/* 3 Zeilen je Seite *\/\n.jm-gk-line { display: grid; grid-template-columns: 78px 1fr; align-items: center; gap: 10px; max-width: 420px; margin-bottom: 8px; }\n.jm-gk-line-nr { font: 700 10px Inter, sans-serif; letter-spacing: 1px; text-transform: uppercase; color: #a89060; text-align: left; }\n.engraving-input-wrap .jm-gk-line input { width: 100%; }\n@media (max-width: 900px) { .jm-gk-line { margin-left: auto; margin-right: auto; } }\n\/* Zeile 2 + 3 unter Zeile 1 – Zeile 1 bleibt an ihrer Position *\/\n#engravingPreviewText { position: relative; display: inline-block; }\n#engravingPreviewText::after, .popup-preview-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% - 8px); transform: translateX(-50%);\n  white-space: pre; text-align: center; line-height: 1.15; font: inherit; color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n\/* ── GRAVUR-STUDIO: Position je Farbe + Seite (mit ?jmtweak=1 → Bereich „Gravur-Studio“ ermitteln) ──\n   Greift nur, wenn für die aktuelle Farbe\/Seite Werte gesetzt sind – sonst bleibt das bisherige Layout.\n   Beispiel:\n   .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] { --st-x: 50%; --st-y: 55%; --st-rot: 0deg; --st-size: 8; }\n   Mobile-Popup:\n   @media (max-width: 768px) { #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] { … } } *\/\n.engraving-preview-image.jm-st-pos, #engraving-mobile-popup .popup-preview.jm-st-pos { container-type: inline-size; }\n.engraving-preview-image.jm-st-pos { width: 100%; }\n    \/* Häkchen aus dem Textfluss nehmen → Zeile 1 springt nicht, wenn es erscheint *\/\n    .engraving-preview-text-wrap .preview-check {\n        position: absolute;\n        left: 100%;\n        top: 50%;\n        margin: 0 0 0 6px;\n        transform: translateY(-50%) scale(0.6);\n        transform-origin: left center;\n    }\n\n        .engraving-preview-text-wrap .preview-check.show {\n            transform: translateY(-50%) scale(1);\n        }\n.jm-st-pos .engraving-overlay { display: block; padding: 0; }\n.engraving-preview-image.jm-st-pos .engraving-preview-text-wrap,\n#engraving-mobile-popup .popup-preview.jm-st-pos .popup-preview-text-wrap {\n  position: absolute; left: var(--st-x, 50%); top: var(--st-y, 50%); right: auto; bottom: auto; margin: 0;\n  transform: translate(-50%, -50%) rotate(var(--st-rot, 0deg)); display: block; white-space: nowrap;\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  position: relative; top: auto; left: auto; transform: none; padding: 0 !important;\n  font-size: calc(var(--st-size, 8) * 1cqw) !important; letter-spacing: var(--st-ls, 0.08em); opacity: var(--st-op, 1);\n}\n.jm-st-pos #engravingPreviewText::after, .jm-st-pos .popup-preview-text::after {\n  top: calc(100% + var(--st-gap, 0em)); line-height: var(--st-lh, 1.15); transform: translateX(calc(-50% + var(--st-rdx, 0em)));\n}\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n}\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 3rem;\n  letter-spacing: 0.08em;\n  color: rgb(186 186 186 \/ 94%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n}\n.engraving-preview-content h2 {\n  font-size: 2.1rem;\n  margin-bottom: 12px;\n  color: #4b2f2f;\n  font-weight: 600;\n  margin-top: 25px;\n}\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select { margin-bottom: 18px; }\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.engraving-input-wrap input {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n.engraving-input-wrap input:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n  .engraving-preview-image { margin: 0 auto; }\n}\n\n\/* SYMBOL PICKER *\/\n.engraving-symbol-picker { margin-bottom: 22px; }\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n.symbol-btn:active {\n  transform: scale(1.05);\n  background: #d7bf78;\n}\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n\/* FONT PICKER *\/\n.engraving-font-select { margin-bottom: 22px; }\n.engraving-font-picker { margin-bottom: 28px; }\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n}\n.font-group { margin-bottom: 16px; }\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem;\n  transition: all 0.25s ease;\n}\n.font-btn.script { font-size: 1.2rem; }\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\n@media (max-width: 640px) {\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n    padding-bottom: 12px;\n  }\n  .font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    line-height: 1;\n  }\n  .font-btn.script { font-size: 1rem; }\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr);\n    gap: 10px;\n  }\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 10px;\n  }\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px;\n  }\n}\n\n\/* LIVE PREVIEW LINK *\/\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n\/* LUXURY SHINE BUTTON *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n  margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  color: #e6d3a3;\n  background: linear-gradient(180deg, #141414, #0d0d0d);\n  border: 1px solid rgba(201,168,92,0.45);\n  overflow: hidden;\n  isolation: isolate;\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 8px 20px rgba(0,0,0,0.35), 0 0 0 1px rgba(201,168,92,0.35);\n}\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n  width: 60%;\n  height: 220%;\n  background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.0) 35%, rgba(255,214,130,0.65) 50%, rgba(255,255,255,0.0) 65%, transparent 100%);\n  transform: skewX(-20deg);\n  opacity: 0.9;\n  animation: goldLaser 3s ease-in-out infinite;\n}\n@keyframes goldLaser {\n  0% { left: -120%; }\n  55% { left: 140%; }\n  100% { left: 140%; }\n}\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(circle at center, rgba(255,215,160,0.35), transparent 70%);\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n.luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n.luxury-rose::before {\n  background: linear-gradient(120deg, transparent 0%, rgba(255,220,210,0.0) 35%, rgba(255,190,170,0.7) 50%, rgba(255,220,210,0.0) 65%, transparent 100%);\n}\n.luxury-rose i {\n  color: #e0a88c;\n  font-size: 1.1em;\n}\n@media (max-width: 768px) {\n  .luxury-shine-btn::before { animation-duration: 2.4s; }\n}\n\n\/* PREVIEW EFFEKTE *\/\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n.engraving-preview-image.pulse { animation: engravingPulse 0.6s ease-out; }\n\n.engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 64px;\n  left: 27px;\n \n}\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n.engrave-fade { animation: engraveFade 0.9s ease-out; }\n@keyframes engraveFade {\n  0% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n  40% { text-shadow: 0 0 6px rgba(191, 172, 121, 0.45), 0 0 14px rgba(191, 172, 121, 0.25); }\n  100% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n  animation: fadeInSoft 0.6s ease-out both;\n}\n@keyframes fadeInSoft {\n  from { opacity: 0; transform: translateY(-2px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\/* MOBILE POPUP *\/\n#engraving-mobile-popup {\n  display: block;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n.popup-preview-check {\n  position: absolute;\n  top: -15px;\n  left: 65px;\n  font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n.popup-preview-check.show { opacity: 1; }\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n@media (max-width: 769px) {\n  .engraving-overlay {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n  }\n  .engraving-overlay span {\n    font-family: \"Playfair Display\", serif;\n    font-size: 1.8rem;\n    letter-spacing: 0.08em;\n    color: rgb(217 217 217 \/ 71%);\n    text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n  }\n  .engraving-preview-text-wrap {\n    position: relative;\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    bottom: 80px;\n    right: 24px;\n  }\n  .popup-preview-text-wrap {\n    position: absolute;\n    top: 42%;\n    left: 50%;\n    white-space: nowrap;\n    display: block;\n    \n  }\n}\n\n\/* HERO SUBLINE *\/\n.hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline { justify-content: center; }\n  .luxury-shine-btn { margin-top: 6px; }\n}\n\n\/* MASSE JE VARIANTE *\/\n.ring-size-visual {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 24px 0;\n}\n.ring-size {\n  width: 150px;\n  height: 72px;\n  border: 2px solid #2c2c2c;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-family: Helvetica, Arial, sans-serif;\n  background: #fff;\n  text-align: center;\n  box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n}\n.ring-size .size {\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n.ring-size .diameter {\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.1;\n}\n.ring-size .circumference {\n  font-size: 11px;\n  color: #666;\n  margin-top: 3px;\n}\n@media (max-width: 768px) {\n  .ring-size-visual {\n    gap: 10px;\n    margin: 5px 0;\n  }\n  .ring-size {\n    width: 130px;\n    height: 68px;\n    border-width: 1.5px;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.07);\n  }\n  .ring-size .size { font-size: 13px; margin-bottom: 1px; }\n  .ring-size .diameter { font-size: 11.5px; line-height: 1.1; }\n  .ring-size .circumference { font-size: 10px; margin-top: 2px; margin-bottom: 7px; }\n}\n\n\/* VORHER \/ NACHHER SLIDER *\/\n.before-after-image--container {\n  display: block;\n  position: relative;\n  width: 80%;\n  max-width: 450px;\n  margin: 20px auto;\n  border-radius: 10px;\n  overflow: hidden;\n  box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n  transition: transform 0.3s ease;\n}\n.before-after-image--container:hover { transform: scale(1.02); }\n@media screen and (max-width: 767px) {\n  .before-after-image--image { height: auto !important; }\n}\n.slider-hint {\n  position: absolute;\n  top: 75px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255,255,255,0.95);\n  padding: 6px 14px;\n  border-radius: 20px;\n  font-size: 1.2rem;\n  font-weight: 500;\n  color: #111;\n  letter-spacing: 0.02em;\n  pointer-events: none;\n  z-index: 10;\n  animation: pulse 1.5s infinite;\n  transition: opacity 0.3s ease;\n}\n@keyframes pulse {\n  0% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n  50% { transform: translate(-50%, -150%) scale(1.1); opacity: 0.6; }\n  100% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n}\n.before-after-image--media {\n  display: block;\n  position: relative;\n  overflow: hidden;\n}\n.before-after-image--image img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n.before-after-image--2 {\n  clip-path: inset(0px 0px 0px var(--percent));\n  position: absolute;\n  z-index: 3;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n.before-after-image--slider {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  left: 0;\n  z-index: 40;\n  transform: translateY(-50%);\n  opacity: 0;\n  height: 54px;\n  cursor: pointer;\n  margin-top: 10px;\n}\n.before-after-image--divider {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 10;\n  width: 2px;\n  left: calc(var(--percent) - 1px);\n  background: var(--color-line, --bg-body);\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n}\n.before-after-image--divider svg {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate3d(-50%, -50%, 0);\n  z-index: 20;\n  border-radius: 20px;\n  box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.1);\n  cursor: pointer;\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\/* ─── 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\/* Schritt 1: Farbwahl Silber \/ Vergoldet *\/\n.jm-mh-color-title { display: block; margin: 0 0 10px; font-family: 'Playfair Display', serif; font-size: 1.1rem; color: #1a1410; }\n.jm-mh-colors { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; margin-bottom: 18px; }\n.jm-mh-color { display: flex; align-items: center; gap: 10px; padding: 12px 12px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font-family: inherit; text-align: left; transition: all .25s ease; min-width: 0; }\n.jm-mh-color:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-mh-color.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-mh-color.unavailable { opacity: .45; cursor: not-allowed; }\n.jm-mh-color-dot { width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0; border: 1px solid rgba(0,0,0,.15); }\n.jm-mh-color-dot.silber    { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.vergoldet { background: radial-gradient(circle at 35% 30%, #f6e3a1, #b8902f); }\n.jm-mh-color-info { flex: 1; min-width: 0; }\n.jm-mh-color-name { display: block; font-weight: 700; font-size: 14px; color: #1a1410; }\n.jm-mh-color-desc { display: block; font-size: 11.5px; color: #9a8a6a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\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\/* Hero: Größen kompakt *\/\n.jm-hz-hero-sizes { display: flex; flex-wrap: wrap; gap: 10px; margin: -8px 0 22px; }\n.jm-hz-hero-size { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border: 1.5px solid #e2d8c4; border-radius: 999px; background: #fff; font: 500 13px Inter, sans-serif; color: #7a6a4a; }\n.jm-hz-hero-size strong { color: #1a1410; font-weight: 700; }\n.jm-hz-hero-size--new { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-hero-size em { font-style: normal; font-size: 10px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #fff; background: #c9a84c; padding: 2px 7px; border-radius: 999px; }\n@media (max-width: 900px) { .jm-hz-hero-sizes { justify-content: center; } }\n\/* Hero: Link „Zu den Produktdetails“ *\/\n.jm-hz-details-link { display: inline-flex; align-items: center; gap: 8px; align-self: flex-start; margin-top: 14px; font: 600 14px Inter, sans-serif; color: #8a7448; text-decoration: none; border-bottom: 1px solid rgba(201,168,76,0.5); padding-bottom: 2px; transition: color .2s ease, border-color .2s ease; }\n.jm-hz-details-link:hover { color: #1a1410; border-color: #c9a84c; }\n.jm-hz-details-link .bi-arrow-down { transition: transform .2s ease; }\n.jm-hz-details-link:hover .bi-arrow-down { transform: translateY(2px); }\n#jm-produktdetails { scroll-margin-top: 90px; }\n@media (max-width: 900px) { .jm-hz-details-link { align-self: center; } }\n\/* ── HERZANHÄNGER-KONFIGURATOR: Ergänzungen ── *\/\n\/* Mobile: Produktdetails (container2 = 110 %) machten die Seite breiter als den Bildschirm → alles wirkte verrutscht *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { width: 100%; max-width: 100%; box-sizing: border-box; }\n  .jm-cfg-wrap, .jm-cfg-card { max-width: 100%; }\n  #jm-cfg-card-2 .jm-cfg-card-body { padding-left: 14px; padding-right: 14px; }\n  \/* Schritt 2 mobil: eine Spalte, nichts breiter als die Karte *\/\n  #jm-cfg-card-2, #jm-cfg-card-2 .jm-cfg-card-body { overflow: hidden; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1fr); }\n  .jm-cfg-s2-wrap .engraving-preview-image, .jm-cfg-s2-wrap .engraving-preview-content { min-width: 0; max-width: 100%; }\n  .jm-cfg-s2-wrap .engraving-badge { white-space: normal; }\n  .jm-cfg-s2-wrap .font-group { min-width: 0; }\n  .jm-cfg-s2-wrap .font-group-buttons { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }\n  .jm-cfg-s2-wrap .font-btn { white-space: nowrap; }\n}\n\/* Desktop: Produktdetails als 2 gleich breite Spalten (Flex mit Umbruch hat die 2. Liste unter die 1. geschoben) *\/\n@media (min-width: 769px) {\n  .engraving-product .container2 { width: 100%; box-sizing: border-box; }\n  .engraving-product .engraving-specs { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 48px; align-items: start; }\n  .engraving-product .engraving-specs ul { min-width: 0; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; justify-content: flex-start; margin: 10px 0 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { flex-basis: 100%; text-align: left; font-size: 12px; margin: 0; }\n}\n\/* Mobile: Produktdetails – Theme gibt .engraving-product bereits 30 px Rand → hier keinen zweiten Innenabstand,\n   Liste linksbündig, Größen-Kacheln nebeneinander über die volle Breite *\/\n@media (max-width: 768px) {\n  .engraving-product .container2 { padding-left: 0; padding-right: 0; }\n  .engraving-product .engraving-specs { width: 100%; box-sizing: border-box; padding: 20px 16px; gap: 0; align-items: stretch; margin-left: 0; margin-right: 0; }\n  .engraving-product .engraving-specs ul { width: 100%; text-align: left; }\n  .engraving-product .engraving-specs ul li { flex-wrap: wrap; justify-content: flex-start; text-align: left; min-width: 0; padding: 10px 0; margin-bottom: 0; }\n  .engraving-product .engraving-specs ul li .ring-size-visual { flex: 1 0 100%; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; margin: 8px 0 0; }\n  .engraving-product .engraving-specs ul li .ring-size { width: auto; min-width: 0; height: auto; padding: 8px 4px; }\n  .engraving-product .engraving-specs ul li .ring-size-visual .engraving-preview-note { grid-column: 1 \/ -1; text-align: left; margin: 2px 0 0; font-size: 11px !important; line-height: 1.4; }\n}\n\/* Schritt 1: Spalten dürfen nicht über die Karte hinauswachsen, Bild bleibt beim Scrollen sichtbar *\/\n#jm-cfg-card-1 { max-width: 920px; }\n#jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 36px; align-items: start; }\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-grid { grid-template-columns: minmax(0, 1fr); gap: 18px; } }\n#jm-cfg-card-1 .jm-cfg-s1-left, #jm-cfg-card-1 .jm-cfg-s1-right { min-width: 0; }\n#jm-cfg-card-1 .jm-cfg-s1-left p { margin-bottom: 16px; }\n@media (min-width: 641px) { #jm-cfg-card-1 .jm-cfg-s1-right { position: sticky; top: 20px; } }\n\/* Mobile: Bild zuerst, dann Auswahl *\/\n@media (max-width: 640px) { #jm-cfg-card-1 .jm-cfg-s1-right { order: -1; } #jm-cfg-card-1 .jm-cfg-ring-img-wrap { max-width: 320px; margin: 0 auto; } }\n\/* Farbkarten: Punkt oben, Name + Zusatz darunter – lange Namen brechen sauber um *\/\n.jm-hz-colors .jm-mh-color { flex-direction: column; justify-content: flex-start; text-align: center; gap: 6px; padding: 12px 6px 10px; }\n.jm-hz-colors .jm-mh-color-info { width: 100%; }\n.jm-hz-colors .jm-mh-color-name { font-size: 13.5px; line-height: 1.25; overflow-wrap: anywhere; }\n.jm-hz-colors .jm-mh-color-desc { white-space: normal; overflow: visible; font-size: 11px; line-height: 1.3; margin-top: 2px; }\n\/* Kurzübersicht *\/\n.jm-hz-facts { list-style: none; margin: 4px 0 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; }\n.jm-hz-facts li { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border: 1px solid #ece4d6; border-radius: 10px; background: #faf9f7; min-width: 0; }\n.jm-hz-facts i { width: 28px; height: 28px; flex-shrink: 0; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: rgba(201,168,76,0.12); color: #b39548; font-size: 13px; }\n.jm-hz-facts strong { display: block; font-size: 13px; color: #1a1410; line-height: 1.25; }\n.jm-hz-facts small { display: block; font-size: 11px; color: #9a8a6a; line-height: 1.3; }\n@media (max-width: 380px) { .jm-hz-facts { grid-template-columns: 1fr; } }\n.jm-hz-colors { grid-template-columns: repeat(3, minmax(0, 1fr)); }\n.jm-mh-color-dot.edelstahl { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.rosegold  { background: radial-gradient(circle at 35% 30%, #f7d6c8, #b9786a); }\n@media (max-width: 480px) {\n  .jm-hz-colors .jm-mh-color { flex-direction: column; text-align: center; gap: 6px; padding: 10px 6px; }\n  .jm-hz-colors .jm-mh-color-desc { display: none; }\n}\n#jm-cfg-card-1 .jm-hz-size-wrap { max-width: none; margin: 0 0 18px; }\n#jm-cfg-card-1 .jm-hz-size-title, .jm-hz-color-title { display: block; margin: 0 0 10px; font: 600 1.1rem 'Playfair Display', serif; letter-spacing: 0; text-transform: none; color: #1a1410; }\n.jm-cfg-s3-gravur-side-block + .jm-cfg-s3-gravur-side-block { margin-top: 12px; padding-top: 12px; border-top: 1px dashed rgba(201,168,76,0.25); }\n.jm-cfg-s3-gravur-lines { display: block; line-height: 1.35; }\n.jm-cfg-s3-gravur-lines span { display: block; }\n.jm-cfg-s3-price-fallback { font-family: 'Playfair Display', serif; font-size: 2rem; color: #1a1410; font-weight: 700; }\n.jm-cfg-btn-next:disabled { opacity: .4; cursor: not-allowed; }\n.jm-cfg-s2-wrap .engraving-preview-content .engraving-micro-trust { margin-top: 18px; }\n\/* Schritt 2 (Desktop): großes Bild links, beim Scrollen durch die Optionen rechts mittig im Blick\n   – Karte darf nicht „overflow: hidden“ haben, sonst funktioniert sticky nicht *\/\n#jm-cfg-card-2 { overflow: visible; }\n#jm-cfg-card-2 .jm-cfg-card-body { overflow: visible; }\n@media (min-width: 901px) {\n  #jm-cfg-card-2 { max-width: 1180px; }\n  .jm-cfg-s2-wrap .engraving-preview-grid { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); gap: 48px; align-items: start; }\n  .jm-cfg-s2-wrap .engraving-preview-image { max-width: none; width: 100%; position: sticky; top: calc(50vh - min(26vw, 300px)); }\n  .jm-cfg-s2-wrap .engraving-preview-image \u003e img, .jm-cfg-s2-wrap .engraving-preview-image \u003e .jm-st-zoom \u003e img { width: 100%; }\n  \/* Fallback, wenn ein Theme-Container sticky verhindert: Bild wird per JS mitgeführt *\/\n  .jm-cfg-s2-wrap.jm-no-sticky .engraving-preview-image { position: relative; top: auto; will-change: transform; }\n}\n\n\/* =========================\n   HERZANHÄNGER: Größenwahl im Gravur-Studio\n========================= *\/\n.jm-hz-size-wrap { margin: 0 0 14px; max-width: 420px; }\n.jm-hz-size-title { display: block; margin: 0 0 8px; font: 700 10px Inter, sans-serif; letter-spacing: 1.5px; text-transform: uppercase; color: #a89060; }\n.jm-hz-sizes { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 1fr)); gap: 8px; }\n.jm-hz-size { display: flex; flex-direction: column; align-items: center; gap: 2px; min-width: 0; padding: 10px 8px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font: 700 14px Inter, sans-serif; color: #1a1410; transition: all .25s ease; }\n.jm-hz-size small { font-size: 10.5px; font-weight: 500; color: #9a8a6a; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.jm-hz-size em { font-style: normal; font-size: 9px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: #c9a84c; }\n.jm-hz-size:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-hz-size.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-hz-size.unavailable { opacity: .45; }\n@media (max-width: 900px) { .jm-hz-size-wrap { margin-left: auto; margin-right: auto; } }\n\/* Nur 1 Zeile je Seite (Formular ohne Zeile 2\/3): Zeilennummer ausblenden *\/\n.jm-gk-lines-1 .jm-gk-line { grid-template-columns: 1fr; }\n.jm-gk-lines-1 .jm-gk-line-nr { display: none; }\n\n\/* ── BILD-ZOOM (Tweak-Panel „Bild-Zoom“): Bild im Rahmen vergrößern\/verkleinern + Ausschnitt verschieben ──\n   --st-zoom (1 = Originalgröße), --st-px \/ --st-py (Verschiebung in % der Bildgröße) *\/\n.jm-st-zoom { position: relative; overflow: hidden; line-height: 0; background: #000; }\n.jm-st-zoom \u003e img { display: block; transform: translate(var(--st-px, 0%), var(--st-py, 0%)) scale(var(--st-zoom, 1)); transform-origin: center center; }\n\/* ── GRAVUR-STUDIO HERZ: Position für ALLE Varianten (Größe + Farbe) – gleiche Fotos ──\n   Eigene Werte für einzelne Varianten: mit ?jmtweak=1 ermitteln und die ausgegebene Regel\n   ([data-variant][data-side]) zusätzlich einfügen – sie greift automatisch vor diesen Werten. *\/\n.engraving-preview-image[data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n}\n.engraving-preview-image[data-side=\"back\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n}\n@media (max-width: 768px) {\n  .engraving-preview-image[data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 36.5%;\n    --st-rot: 0deg;\n    --st-size: 3.25;\n  }\n  .engraving-preview-image[data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 38.5%;\n    --st-rot: 0deg;\n    --st-size: 3.25;\n  }\n  #engraving-mobile-popup .popup-preview[data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 3;\n  }\n  #engraving-mobile-popup .popup-preview[data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 3;\n  }\n}\n\u003c\/style\u003e\n\n\u003cdiv class=\"engraving-product\"\u003e\n\u003c!-- =========================\n     HERO: Edelstahl Herzanhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n\u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n\u003cdiv class=\"engraving-hero-grid\"\u003e\n\u003c!-- Textbereich --\u003e\n\u003cdiv class=\"engraving-hero-text\"\u003e\n\u003ch1\u003eEdelstahl Herzanhänger mit persönlicher Gravur\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 \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e Live-Vorschau ansehen \u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003eEin zeitloses Herz aus massivem Edelstahl mit funkelndem Zirkonia – individuell graviert, um Gefühle für immer festzuhalten.\u003c\/p\u003e\n\u003c!-- Größen kompakt (Auswahl erfolgt im Produktformular \/ Gravur-Studio) --\u003e\n\u003cdiv class=\"jm-hz-hero-sizes\"\u003e\n\u003cspan class=\"jm-hz-hero-size\"\u003e\u003cstrong\u003e16 × 20 mm\u003c\/strong\u003e klassisch\u003c\/span\u003e\n\u003cspan class=\"jm-hz-hero-size jm-hz-hero-size--new\"\u003e\u003cem\u003eNeu\u003c\/em\u003e\u003cstrong\u003e20 × 25 mm\u003c\/strong\u003e mehr Fläche\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003cdiv class=\"micro-trust-valentine\"\u003eSicher · Persönlich · Handgefertigt\u003c\/div\u003e\n\u003c!-- Trust Icons (max. 4) --\u003e\n\u003cdiv class=\"engraving-trust\"\u003e\n\u003cspan\u003e\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e Edelstahl \u0026amp; Zirkonia\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e 3 Farben\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Vorne \u0026amp; hinten gravierbar\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Ohne Kette\u003c\/span\u003e\n\u003c\/div\u003e\n\u003ca href=\"#jm-produktdetails\" class=\"jm-hz-details-link\"\u003e\u003ci class=\"bi bi-list-check\"\u003e\u003c\/i\u003e Zu den Produktdetails \u003ci class=\"bi bi-arrow-down\"\u003e\u003c\/i\u003e\u003c\/a\u003e\n\u003c\/div\u003e\n\u003c!-- Bildbereich --\u003e\n\u003cdiv class=\"engraving-image\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/UN-0107_rfx8y9b2hs_2026-01-26-18-07-47.jpg?v=1769521881\" alt=\"Edelstahl Herzanhänger mit Gravur\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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 bi-award\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eFamilienunternehmen 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\u003c!-- =========================\n     WHY STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n\u003cdiv class=\"container\"\u003e\n\u003ch2\u003eWarum dieses Herz?\u003c\/h2\u003e\n\u003cp\u003eJedes Herz erzählt seine eigene Geschichte. Massives Edelstahl, fein verarbeitet und mit deiner persönlichen Gravur – ein Symbol für Nähe, Liebe und besondere Momente.\u003c\/p\u003e\n\u003cdiv class=\"engraving-why-grid\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n\u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Herz graviert – vorne und auf Wunsch auch hinten, kostenlos.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n\u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n\u003cp\u003eEin Herz, das Nähe ausdrückt – perfekt für Armbänder, Ketten oder Schlüsselanhänger. Ob Jahrestag, Geburtstag, Valentinstag oder einfach als Zeichen deiner Liebe – dieser Herzanhänger ist ein persönliches Geschenk, das Emotionen trägt.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n\u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n\u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n\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\n\u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n\u003cp\u003eJede Gravur entsteht in unserem Familienbetrieb – \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\u003c\/p\u003e\n\u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"shipping-item\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n\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\u003cp\u003eSollte etwas nicht passen, findest du mit uns unkompliziert eine Lösung.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- FEATURES --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n\u003cdiv class=\"container engraving-hero-text\"\u003e\n\u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n\u003cp class=\"engraving-section-desc\"\u003eDieser Herzanhänger steht für Beständigkeit, Persönlichkeit und zeitlose Eleganz. In 16 × 20 mm klassisch und fein – oder in 20 × 25 mm mit mehr Fläche, damit deine Gravur noch besser zur Geltung kommt.\u003c\/p\u003e\n\u003cdiv class=\"engraving-features\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft – auf Vorder- und Rückseite.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n\u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e\n\u003ch3\u003eZwei Größen\u003c\/h3\u003e\n\u003cp\u003eKlassisch mit 16 × 20 mm oder größer mit 20 × 25 mm – für mehr Sichtbarkeit deiner Gravur.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n\u003ch3\u003eRomantisch \u0026amp; Zeitlos\u003c\/h3\u003e\n\u003cp\u003eGlänzender Herzanhänger mit funkelndem Zirkonia – in Edelstahl, Vergoldet oder Rosegold. Ein Geschenk voller Liebe, das Emotionen transportiert statt nur gut auszusehen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\" id=\"jm-produktdetails\"\u003e\n\u003cdiv class=\"container2 engraving-hero-text\"\u003e\n\u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\u003cdiv class=\"engraving-specs\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eGrößen:\u003c\/strong\u003e\n\u003cdiv class=\"ring-size-visual\"\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eKlassisch\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e16 × 20 mm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003emit Zirkonia · ca. 1,6 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eGrößer · Neu\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e20 × 25 mm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003emit Zirkonia · ca. 2,6 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"engraving-preview-note\"\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Hinweis: Maße können leicht abweichen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-palette\"\u003e\u003c\/i\u003e \u003cstrong\u003eFarben:\u003c\/strong\u003e Edelstahl · Vergoldet · Rosegold\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e \u003cstrong\u003eStein:\u003c\/strong\u003e eingeriebener Zirkonia (beide Größen)\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 1,6 g (16 × 20 mm) · ca. 2,6 g (20 × 25 mm)\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Kette · Armband · Schlüsselanhänger\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e \u003cstrong\u003eLieferumfang:\u003c\/strong\u003e nur Anhänger – ohne Kette\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Dame\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos · Vorder- \u0026amp; Rückseite · je 3 Zeilen\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n========================== --\u003e\n\u003c!-- =========================\n     3-SCHRITT KONFIGURATOR: Schmuckstück → Gravur → Bestätigung\n========================== --\u003e\n\u003cdiv class=\"jm-cfg-wrap\" id=\"jm-cfg-wrap\"\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\"\u003eDein Herz. Deine Worte.\u003c\/h2\u003e\n\u003cp class=\"jm-cfg-subline\"\u003eGestalte in 3 Schritten deinen persönlichen Herzanhänger – Größe \u0026amp; Farbe wählen, Vorder- und Rückseite gravieren, alles prüfen. 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: Größe + Farbe --\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 Herzanhänger\u003c\/h3\u003e\n\u003cp\u003eMassiver Edelstahl mit funkelndem Zirkonia – wähle Größe und Farbe. Die Auswahl wird direkt ins Produktformular übernommen.\u003c\/p\u003e\n\u003c!-- GRÖSSE (wird aus den Varianten erzeugt, synchron zum Produktformular) --\u003e\n\u003cdiv class=\"jm-hz-size-wrap\" id=\"jm-hz-size-wrap\" hidden\u003e\n\u003cspan class=\"jm-hz-size-title\"\u003eWähle deine Größe\u003c\/span\u003e\n\u003cdiv class=\"jm-hz-sizes\" id=\"jm-hz-sizes\" role=\"radiogroup\" aria-label=\"Größe wählen\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FARBE (wird aus den Varianten erzeugt, synchron zum Produktformular) --\u003e\n\u003cdiv id=\"jm-hz-color-wrap\" hidden\u003e\n\u003cspan class=\"jm-hz-color-title\"\u003eWähle deine Farbe\u003c\/span\u003e\n\u003cdiv class=\"jm-mh-colors jm-hz-colors\" id=\"jm-hz-colors\" role=\"radiogroup\" aria-label=\"Farbe wählen\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- KURZÜBERSICHT (kompakt, 2 Spalten) --\u003e\n\u003cul class=\"jm-hz-facts\"\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003e\u003cspan class=\"js-hz-size\"\u003e16 × 20 mm\u003c\/span\u003e\u003c\/strong\u003e\u003csmall\u003e\u003cspan class=\"js-hz-weight\"\u003eca. 1,6 g\u003c\/span\u003e · Hochglanz\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eZirkonia\u003c\/strong\u003e\u003csmall\u003ebei beiden Größen\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eGravur gratis\u003c\/strong\u003e\u003csmall\u003evorne \u0026amp; hinten · je 3 Zeilen\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e\u003cspan\u003e\u003cstrong\u003eNur Anhänger\u003c\/strong\u003e\u003csmall\u003eohne Kette\u003c\/small\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\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=\"hzCfgImg\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2581_-_Kopie.png?v=1769525954\" alt=\"Herz Zirkonia Vorderseite\"\u003e\n\u003cspan class=\"jm-cfg-ring-img-label\" id=\"hzCfgLabel\"\u003eEdelstahl\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"jm-cfg-ring-img-caption\"\u003e\u003cspan class=\"js-hz-size\"\u003e16 × 20 mm\u003c\/span\u003e · \u003cspan class=\"js-hz-color\"\u003eEdelstahl\u003c\/span\u003e\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 type=\"button\" class=\"jm-cfg-btn-back\" hidden\u003e\u003ci class=\"bi bi-arrow-left\"\u003e\u003c\/i\u003e Zurück\u003c\/button\u003e\n\u003cbutton type=\"button\" 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: Gravur-Studio (Vorder-\/Rückseite, je 3 Zeilen) --\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\u003cspan class=\"engraving-badge visible-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003cdiv class=\"engraving-preview-grid\"\u003e\n\u003c!-- IMAGE --\u003e\n\u003cdiv class=\"engraving-preview-image\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2581_-_Kopie.png?v=1769525954\" alt=\"Edelstahl Herzanhänger ohne Gravur\"\u003e\n\u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n\u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e \u003cspan class=\"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\u003cp class=\"engraving-preview-note\"\u003e✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- CONTENT --\u003e\n\u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\u003cspan class=\"engraving-badge hidden-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003ch2\u003eMach dieses Herz einzigartig\u003c\/h2\u003e\n\u003cp\u003eGib deine gewünschte Gravur ein und sieh sofort, wie dein persönlicher Herzanhänger Gestalt annimmt.\u003c\/p\u003e\n\u003c!-- VORDERSEITE \/ RÜCKSEITE --\u003e\n\u003cdiv class=\"jm-gk-sides\" role=\"tablist\" aria-label=\"Gravurseite wählen\"\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side active\" data-side=\"front\" role=\"tab\" aria-selected=\"true\"\u003eVorderseite\u003csmall id=\"jm-gk-side-front\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side\" data-side=\"back\" role=\"tab\" aria-selected=\"false\"\u003eRückseite \u003cem\u003eoptional\u003c\/em\u003e\u003csmall id=\"jm-gk-side-back\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c!-- INPUT --\u003e\n\u003cdiv class=\"engraving-input-wrap\" id=\"jmGkInputWrap\"\u003e\n\u003clabel for=\"engravingInput\" id=\"jmGkInputLabel\"\u003eGravur Vorderseite\u003c\/label\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e1 · oben\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e2 · Mitte\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput2\" maxlength=\"11\" placeholder=\"z. B. Für immer\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e3 · unten\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput3\" maxlength=\"11\" placeholder=\"z. B. 12.06.24\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003csmall id=\"jmGkHint\"\u003eJe Zeile max. 11 Zeichen · Zahlen \u0026amp; Symbole möglich · Zeilen 2 + 3 optional\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\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 \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"∞\"\u003e∞\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"★\"\u003e★\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"✝\"\u003e✝\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"❥\"\u003e❥\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n\u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n\u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e \u003c!-- SERIF --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family: 'Times New Roman';\"\u003e Times New Roman \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family: Georgia;\"\u003e Georgia \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SANS --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family: Arial;\"\u003e Arial \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family: Helvetica;\"\u003e Helvetica \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MONOSPACE --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family: 'Courier New';\"\u003e Courier New \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family: 'Lucida Console';\"\u003e Lucida Console \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SCRIPT --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family: 'Allura';\"\u003e Allura \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family: 'Alex Brush';\"\u003e Alex Brush \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family: 'Kaushan Script';\"\u003e Kaushan Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HANDWRITING --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family: 'Pacifico';\"\u003e Pacifico \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family: 'Indie Flower';\"\u003e Indie Flower \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family: 'Dancing Script';\"\u003e Dancing Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MICRO TRUST --\u003e\n\u003cdiv class=\"engraving-micro-trust\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\u003c\/div\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 type=\"button\" 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 type=\"button\" class=\"jm-cfg-btn-next\" id=\"jm-cfg-next-2\" disabled\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: Bestätigung --\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=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2581_-_Kopie.png?v=1769525954\" alt=\"Herzanhänger mit Gravur\"\u003e\n\u003cdiv\u003e\n\u003cp class=\"jm-cfg-s3-product-name\"\u003eEdelstahl Herzanhänger 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\"\u003eGröße\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-size\"\u003e16 × 20 mm\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003eFarbe\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-color\"\u003eEdelstahl\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003eStein · Gewicht\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-weight\"\u003eZirkonia · ca. 1,6 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-cfg-s3-row\"\u003e\n\u003cspan class=\"jm-cfg-s3-row-label\"\u003eLieferumfang\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\"\u003enur Anhänger – ohne Kette\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\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 js-scroll-to-form jm-cfg-s3-cta\" id=\"jm-cfg-s3-cta-btn\" data-target=\"#product-form\" style=\"width:100%;justify-content:center;font-size:15px;padding:18px 32px;\"\u003e\u003ci class=\"bi bi-bag-check\"\u003e\u003c\/i\u003e Gravur übernehmen \u0026amp; zum Warenkorb \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\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 type=\"button\" 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\u003c\/div\u003e\n\u003c!-- \/jm-cfg-wrap --\u003e\n\u003c!-- End Block --\u003e\n\u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"font-size: 6rem; color: #c0a860;\"\u003e\u003c\/i\u003e\n\u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, 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\u003c\/section\u003e\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n\u003cdiv class=\"popup-preview\" style=\"position: relative; margin-bottom: 10px;\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkPopupSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2579_-_Kopie.jpg?v=1769525954\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width: 100%;\"\u003e\n\u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"popup-preview-text-wrap\"\u003e\n\u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\u003e \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 Zur Bestätigung \u003ci class=\"bi bi-arrow-right\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\/* =========================\n   GRAVURFELDER IM PRODUKTFORMULAR finden (Herzanhänger)\n   Zeile n einer Seite: #gravur_\u003cSeite\u003e_\u003cn\u003e · [data-gravur-seite][data-gravur-zeile]\n   Zeile 1 zusätzlich: #gravurtext_vorderseite \/ #gravurtext_rueckseite (Standard-IDs)\n========================= *\/\nwindow.jmGravurFeld = function (seite, n) {\n  var back = seite === \"Rückseite\";\n  var sels = [\"#gravur_\" + seite + \"_\" + n,\n              '[data-gravur-seite=\"' + seite + '\"][data-gravur-zeile=\"' + n + '\"]'];\n  if (n === 1) sels = sels.concat(back\n    ? [\"#gravurtext_rueckseite\", \"#gravurtext_rückseite\", 'input[data-gravur-seite=\"Rückseite\"]', \"#gravurtext_2\"]\n    : [\"#gravurtext_vorderseite\", \"#gravurtext_oberfläche\", 'input[data-gravur-seite=\"Vorderseite\"]', \"#gravurtext\"]);\n  for (var i = 0; i \u003c sels.length; i++) {\n    try { var el = document.querySelector(sels[i]); if (el \u0026\u0026 !el.closest(\"#engraving-preview\")) return el; } catch (e) {}\n  }\n  return null;\n};\n\/* Herzanhänger: 3 Zeilen je Seite (wie Geldklammer: #gravur_Vorderseite_1..3 \/ #gravur_Rückseite_1..3) *\/\nwindow.jmGravurZeilen = function () { return 3; };\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = window.jmGravurFeld(\"Vorderseite\", 1);\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      \/* Gravur-Studio: Vorder- und Rückseite je 3 Zeilen übernehmen (nur Seiten mit Inhalt) *\/\n      const gkSides = window.jmGkSides;\n      if (gkSides) {\n        gkSides.save \u0026\u0026 gkSides.save();\n        const studioFont = previewText ? window.getComputedStyle(previewText).fontFamily : \"\";\n        [[\"front\", \"Vorderseite\"], [\"back\", \"Rückseite\"]].forEach(([k, seite]) =\u003e {\n          if (!gkSides.has(k)) return;\n          \/* Zeile ohne eigenes Formularfeld → an Zeile 1 anhängen („A + M | Ewig | 2024“), damit nichts verloren geht *\/\n          const extra = [];\n          gkSides[k].forEach((val, n) =\u003e {\n            const f = window.jmGravurFeld(seite, n + 1);\n            if (!f) { if (n \u003e 0 \u0026\u0026 val.trim()) extra.push(val.trim()); return; }\n            f.value = val.trim();\n            if (studioFont) f.style.fontFamily = studioFont;\n            f.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          });\n          const f1 = window.jmGravurFeld(seite, 1);\n          if (f1 \u0026\u0026 extra.length) {\n            f1.value = [f1.value.trim()].concat(extra).filter(Boolean).join(\" | \");\n            f1.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          }\n        });\n      }\n      if (gravurInput \u0026\u0026 previewText \u0026\u0026 !gkSides) {\n        gravurInput.value = previewText.textContent.trim();\n        gravurInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n      }\n      if (gravurInput \u0026\u0026 previewText) {\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n        const back3 = document.querySelector(\"#gravurtext_3\");\n        if (back3) back3.style.fontFamily = fontFamily;\n        const back4 = document.querySelector(\"#gravurtext_4\");\n        if (back4) back4.style.fontFamily = fontFamily;\n        const back5 = document.querySelector(\"#gravurtext_5\");\n        if (back5) back5.style.fontFamily = fontFamily;\n        const back6 = document.querySelector(\"#gravurtext_6\");\n        if (back6) back6.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      const maxLen = input.maxLength \u003e 0 ? input.maxLength : MAX_LENGTH;\n      if (input.value.length + symbol.length \u003e maxLen) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n      const back3 = document.getElementById(\"gravurtext_3\");\n      if (back3) back3.style.fontFamily = font;\n      const back4 = document.getElementById(\"gravurtext_4\");\n      if (back4) back4.style.fontFamily = font;\n      const back5 = document.getElementById(\"gravurtext_5\");\n      if (back5) back5.style.fontFamily = font;\n      const back6 = document.getElementById(\"gravurtext_6\");\n      if (back6) back6.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Hero-Link „Zu den Produktdetails“\n========================= *\/\ndocument.querySelectorAll('.jm-hz-details-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    const t = document.getElementById('jm-produktdetails');\n    if (!t) return;\n    e.preventDefault();\n    t.classList.add('show');   \/* Einblend-Animation sofort auslösen *\/\n    t.scrollIntoView({ behavior: 'smooth', block: 'start' });\n  });\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    if (window.jmCfg) window.jmCfg.go(2, false);\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\u003cscript\u003e\n\/* =========================\n   GRAVUR-STUDIO: VORDERSEITE \/ RÜCKSEITE · je 3 Zeilen (oben \/ Mitte \/ unten)\n   (Ergänzung – nutzt das vorhandene Eingabefeld #engravingInput als Zeile 1)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const lineInputs = [\"engravingInput\", \"engravingInput2\", \"engravingInput3\"].map(id =\u003e document.getElementById(id));\n  const input = lineInputs[0];\n  const tabs  = document.querySelectorAll(\".jm-gk-side\");\n  if (!input || !tabs.length) return;\n\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay     = document.getElementById(\"engravingOverlay\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText   = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-text\");\n  const studioImg   = document.getElementById(\"engravingProductImage\");\n  const popupImg    = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-image\");\n  \/* Zoom-Rahmen um Studio- und Popup-Bild (Bild-Zoom per --st-zoom \/ --st-px \/ --st-py, Tweak-Panel) *\/\n  [studioImg, popupImg].forEach(img =\u003e {\n    if (!img || img.parentElement.classList.contains(\"jm-st-zoom\")) return;\n    const z = document.createElement(\"div\");\n    z.className = \"jm-st-zoom\";\n    z.style.borderRadius = getComputedStyle(img).borderRadius;\n    img.parentNode.insertBefore(z, img);\n    z.appendChild(img);\n  });\n\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n\n  \/* ── Herzanhänger: Zeilen + Zeichen aus dem Produktformular übernehmen ── *\/\n  const LINES = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n  const hasBack = !!(window.jmGravurFeld \u0026\u0026 window.jmGravurFeld(\"Rückseite\", 1));\n  (function setupLines() {\n    const wrap = document.getElementById(\"jmGkInputWrap\");\n    if (wrap) wrap.classList.toggle(\"jm-gk-lines-1\", LINES === 1);\n    lineInputs.forEach((i, n) =\u003e {\n      if (!i) return;\n      const row = i.closest(\".jm-gk-line\");\n      if (row) row.style.display = n \u003c LINES ? \"\" : \"none\";\n      \/* Studio: fest max. 11 Zeichen je Zeile (Formularfelder bitte ebenfalls maxlength=\"11\") *\/\n    });\n    if (LINES === 1) input.placeholder = \"z. B. A ♥ M\";\n    const max = lineInputs[0] \u0026\u0026 lineInputs[0].maxLength \u003e 0 ? lineInputs[0].maxLength : 11;\n    const hint = document.getElementById(\"jmGkHint\");\n    if (hint) hint.innerHTML = (LINES === 1 ? \"Max. \" + max + \" Zeichen\" : \"Je Zeile max. \" + max + \" Zeichen\")\n      + \" · Zahlen \u0026amp; Symbole möglich\" + (LINES \u003e 1 ? \" · Zeile\" + (LINES === 3 ? \"n 2 + 3\" : \" 2\") + \" optional\" : \"\")\n      + (hasBack ? \" · Rückseite optional\" : \"\");\n    const sideTabs = document.querySelector(\".jm-gk-sides\");\n    if (sideTabs \u0026\u0026 !hasBack) sideTabs.style.display = \"none\";\n  })();\n  const S = window.jmGkSides = { front: [\"\", \"\", \"\"], back: [\"\", \"\", \"\"], side: \"front\" };\n  let focused = input;\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"focus\", () =\u003e { focused = i; }));\n\n  S.has  = k =\u003e S[k].some(v =\u003e v.trim());\n  S.save = function () { S[S.side] = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\"); renderTabs(); };\n\n  function renderTabs() {\n    [\"front\", \"back\"].forEach(k =\u003e {\n      const sm = document.getElementById(\"jm-gk-side-\" + k);\n        if (sm) {\n            \/* jede Zeile als eigenes Element → Desktop: „a \/ b \/ c“, Mobile: untereinander *\/\n            const filled = S[k].filter(v =\u003e v.trim());\n            sm.textContent = \"\";\n            if (!filled.length) sm.textContent = \"–\";\n            filled.forEach(v =\u003e {\n                const el = document.createElement(\"span\");\n                el.className = \"jm-gk-sum\";\n                el.textContent = v.trim();\n                sm.appendChild(el);\n            });\n        }\n      const b = document.querySelector('.jm-gk-side[data-side=\"' + k + '\"]');\n      if (b) b.classList.toggle(\"filled\", S.has(k));\n    });\n  }\n\n  \/* Vorschau: Zeile 1 im Text, Zeile 2 + 3 darunter (data-rest) *\/\n  function restOf(l) { return l[2].trim() ? (l[1] + \"\\n\" + l[2]) : l[1]; }\n  function render(openPopup) {\n    const l = S[S.side];\n    const any = l.some(v =\u003e v.trim());\n    [previewText, popupText].forEach(el =\u003e {\n      if (!el) return;\n      if (any) el.textContent = l[0] || \"\\u00A0\";\n      el.setAttribute(\"data-rest\", any ? restOf(l) : \"\");\n    });\n    if (overlay) overlay.classList.toggle(\"active\", any);\n    if (openPopup \u0026\u0026 any \u0026\u0026 mobilePopup \u0026\u0026 window.innerWidth \u003c= 768) mobilePopup.classList.add(\"show\");\n  }\n\n  \/* ── Bilder je Seite + Farbe (Alt-Text „Vorderseite Vergoldet“, „Rückseite Stahl matt“ …) ── *\/\n  const IMG = {};                \/* variantId → { front, back } *\/\n  const TITLES = {};             \/* variantId → slug (vergoldet, schwarz-matt …) *\/\n  const studioBox = document.querySelector(\".engraving-preview-image\");\n  const popupBox  = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview\");\n  function slug(t) {\n    return String(t || \"\").toLowerCase().replace(\/ä\/g, \"ae\").replace(\/ö\/g, \"oe\").replace(\/ü\/g, \"ue\").replace(\/ß\/g, \"ss\")\n      .replace(\/[^a-z0-9]+\/g, \"-\").replace(\/^-|-$\/g, \"\");\n  }\n  \/* Farbe + Seite an Studio-Bild und Popup schreiben → CSS-Regeln je Farbe\/Seite greifen *\/\n  function markStudio() {\n    [studioBox, popupBox].forEach(box =\u003e {\n      if (!box) return;\n      box.dataset.side = S.side;\n      box.dataset.variant = TITLES[currentVariant()] || \"\";\n      const v = getComputedStyle(box).getPropertyValue(\"--st-x\").trim();\n      box.classList.toggle(\"jm-st-pos\", !!v || !!box.style.getPropertyValue(\"--st-x\"));\n    });\n  }\n  const FALLBACK = studioImg ? studioImg.getAttribute(\"src\") : \"\";\n  const FALLBACK_POP = popupImg ? popupImg.getAttribute(\"src\") : \"\";\n  let want = \"\", wantPop = \"\";\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort („vergoldet“) *\/\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, Farbe „Rosé Gold“ → „rosegold“ (+ erstes Wort) *\/\n  function plain(t) { return String(t || \"\").toLowerCase().normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g, \"\").replace(\/ß\/g, \"ss\"); }\n  function optKeys(o) {\n    o = plain(o);\n    const m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + \"x\" + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, \"\"), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  \/* Alt-Text kompakt: „Herz Zirkonia Vorderseite Rose Gold“ → „herzzirkoniavorderseiterosegold“ *\/\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, \"$1x$2\").replace(\/[^a-z0-9]+\/g, \"\"); }\n  function imgUrl(src) {\n    if (!src) return \"\";\n    if (src.indexOf(\"\/\/\") === 0) src = \"https:\" + src;\n    return src + (src.indexOf(\"?\") \u003e -1 ? \"\u0026\" : \"?\") + \"width=900\";\n  }\n  function currentVariant() {\n    const f = document.querySelector('form[action*=\"\/cart\/add\"] [name=\"id\"]');\n    return f ? String(f.value) : \"\";\n  }\n  function applyImage() {\n    markStudio();\n    syncSizes();\n    const m = IMG[currentVariant()] || {};\n    const url = m[S.side] || \"\";\n    \/* Kein Foto mit passendem Alt-Text → bisherige Studio-\/Popup-Bilder *\/\n    want = url || FALLBACK;\n    wantPop = url || FALLBACK_POP;\n    if (studioImg \u0026\u0026 studioImg.getAttribute(\"src\") !== want) studioImg.src = want;\n    if (popupImg \u0026\u0026 popupImg.getAttribute(\"src\") !== wantPop) popupImg.src = wantPop;\n  }\n  function guard(img, pop) {\n    if (!img) return;\n    new MutationObserver(() =\u003e {\n      const w = pop ? wantPop : want;\n      if (w \u0026\u0026 img.getAttribute(\"src\") !== w) img.src = w;\n    }).observe(img, { attributes: true, attributeFilter: [\"src\"] });\n  }\n\n  \/* ── Größe + Farbe (Schritt 1) ──\n     Quelle 1: Auswahlfelder im Produktformular (Debut: .single-option-selector) – funktioniert sofort\n     Quelle 2: Produktdaten (ProductJson \/ .js) – für Verfügbarkeit und als Ersatz *\/\n  let PRODUCT = null, SIZE_IDX = -1, COLOR_IDX = -1;\n  const sizeWrap  = document.getElementById(\"jm-hz-size-wrap\");\n  const sizeBox   = document.getElementById(\"jm-hz-sizes\");\n  const colorWrap = document.getElementById(\"jm-hz-color-wrap\");\n  const colorBox  = document.getElementById(\"jm-hz-colors\");\n  const isSize = o =\u003e \/\\d\\s*[x×]\\s*\\d\/i.test(String(o || \"\"));\n  const optsOf = v =\u003e (v.options || [v.option1, v.option2, v.option3]).filter(o =\u003e o != null).map(String);\n  const COLOR_INFO = { edelstahl: \"silberfarbig\", vergoldet: \"goldfarbig\", rosegold: \"roséfarbig\" };\n  function dotOf(c) { c = plain(c); return \/ros\/.test(c) ? \"rosegold\" : (\/gold\/.test(c) ? \"vergoldet\" : \"edelstahl\"); }\n  function area(o) {\n    const m = String(o).match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    return m ? parseFloat(m[1].replace(\",\", \".\")) * parseFloat(m[2].replace(\",\", \".\")) : 0;\n  }\n  function variantById(id) { return PRODUCT \u0026\u0026 (PRODUCT.variants || []).find(v =\u003e String(v.id) === String(id)); }\n  function cartForm() { return document.querySelector('form[action*=\"\/cart\/add\"]'); }\n\n  \/* Auswahlfelder im Formular: Größe = Werte wie „16 × 20 mm“ oder Label „Größe\/Size“, Farbe = das andere *\/\n  function labelOf(sel) {\n    const l = sel.id \u0026\u0026 document.querySelector('label[for=\"' + sel.id + '\"]');\n    return plain((l \u0026\u0026 l.textContent) || sel.getAttribute(\"data-name\") || sel.getAttribute(\"aria-label\") || sel.name || \"\");\n  }\n  function formSelects() {\n    const f = cartForm();\n    if (!f) return { size: null, color: null };\n    const list = Array.from(f.querySelectorAll(\"select\")).filter(sel =\u003e\n      sel.name !== \"id\" \u0026\u0026 !\/productselect\/i.test(sel.id || \"\") \u0026\u0026 sel.options.length \u003e 1);\n    let size = list.find(sel =\u003e Array.from(sel.options).some(o =\u003e isSize(o.value)) || \/gro|size\/.test(labelOf(sel))) || null;\n    let color = list.find(sel =\u003e sel !== size \u0026\u0026 \/farb|color|colour|material|metall\/.test(labelOf(sel))) ||\n                list.find(sel =\u003e sel !== size) || null;\n    return { size: size, color: color };\n  }\n  function setSelect(sel, val) {\n    if (!sel || sel.value === val) return;\n    sel.value = val;\n    sel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    setTimeout(() =\u003e { lastVariant = currentVariant(); applyImage(); }, 120);\n  }\n\n  \/* aktuelle Werte (Formular hat Vorrang, sonst Variante) *\/\n  function curSize() {\n    const fs = formSelects();\n    if (fs.size) return fs.size.value;\n    const v = variantById(currentVariant());\n    return v ? (SIZE_IDX \u003e -1 ? optsOf(v)[SIZE_IDX] : v.title) : \"\";\n  }\n  function curColor() {\n    const fs = formSelects();\n    if (fs.color) return fs.color.value;\n    const v = variantById(currentVariant());\n    return v \u0026\u0026 COLOR_IDX \u003e -1 ? optsOf(v)[COLOR_IDX] : \"\";\n  }\n  \/* Werteliste + Verfügbarkeit einer Option *\/\n  function valuesFor(kind) {\n    const fs = formSelects();\n    const sel = kind === \"size\" ? fs.size : fs.color;\n    const vs = PRODUCT ? (PRODUCT.variants || []) : [];\n    const idx = kind === \"size\" ? SIZE_IDX : COLOR_IDX;\n    let vals = [];\n    if (sel) vals = Array.from(sel.options).map(o =\u003e o.value).filter(Boolean);\n    else if (vs.length) vs.forEach(v =\u003e {\n      const x = idx \u003e -1 ? optsOf(v)[idx] : (kind === \"size\" ? v.title : null);\n      if (x \u0026\u0026 vals.indexOf(x) === -1) vals.push(x);\n    });\n    return vals.map(x =\u003e ({\n      value: x,\n      avail: !vs.length || idx \u003c 0 ? true : vs.some(v =\u003e optsOf(v)[idx] === x \u0026\u0026 v.available !== false)\n    }));\n  }\n  function chooseSize(val)  { const fs = formSelects(); if (fs.size)  setSelect(fs.size, val);  else selectOpt(SIZE_IDX, val); }\n  function chooseColor(val) { const fs = formSelects(); if (fs.color) setSelect(fs.color, val); else selectOpt(COLOR_IDX, val); }\n\n  function buildSizes() {\n    if (!sizeBox || !sizeWrap) return;\n    const sizes = valuesFor(\"size\");\n    if (sizes.length \u003c 2) { sizeWrap.hidden = true; return; }\n    const maxA = Math.max.apply(null, sizes.map(x =\u003e area(x.value)));\n    sizeBox.innerHTML = \"\";\n    sizes.forEach(x =\u003e {\n      const big = maxA \u003e 0 \u0026\u0026 area(x.value) === maxA;\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-hz-size\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.size = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = (big ? \"\u003cem\u003eNeu · größer\u003c\/em\u003e\" : \"\") + \"\u003cspan\u003e\u003c\/span\u003e\u003csmall\u003e\u003c\/small\u003e\";\n      b.querySelector(\"span\").textContent = x.value;\n      b.querySelector(\"small\").textContent = !x.avail ? \"ausverkauft\" : (big ? \"mehr Sichtbarkeit\" : (maxA \u003e 0 ? \"klassisch\" : \"\"));\n      b.addEventListener(\"click\", () =\u003e chooseSize(x.value));\n      sizeBox.appendChild(b);\n    });\n    sizeWrap.hidden = false;\n  }\n  function buildColors() {\n    if (!colorBox || !colorWrap) return;\n    const colors = valuesFor(\"color\");\n    if (colors.length \u003c 2) { colorWrap.hidden = true; return; }\n    colorBox.innerHTML = \"\";\n    colors.forEach(x =\u003e {\n      const b = document.createElement(\"button\");\n      b.type = \"button\";\n      b.className = \"jm-mh-color\" + (x.avail ? \"\" : \" unavailable\");\n      b.dataset.color = x.value;\n      b.setAttribute(\"role\", \"radio\");\n      b.innerHTML = '\u003cspan class=\"jm-mh-color-dot ' + dotOf(x.value) + '\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-info\"\u003e\u003cspan class=\"jm-mh-color-name\"\u003e\u003c\/span\u003e\u003cspan class=\"jm-mh-color-desc\"\u003e\u003c\/span\u003e\u003c\/span\u003e';\n      const m = String(x.value).match(\/^(.*?)\\s*\\((.*)\\)\\s*$\/);   \/* „Roségold (vergoldet)“ *\/\n      b.querySelector(\".jm-mh-color-name\").textContent = m ? m[1] : x.value;\n      b.querySelector(\".jm-mh-color-desc\").textContent = !x.avail ? \"ausverkauft\"\n        : [m ? m[2] : \"\", COLOR_INFO[dotOf(x.value)] || \"\"].filter(Boolean).join(\" · \");\n      b.title = x.value;\n      b.addEventListener(\"click\", () =\u003e chooseColor(x.value));\n      colorBox.appendChild(b);\n    });\n    colorWrap.hidden = false;\n  }\n  function buildChoices() {\n    if (PRODUCT) {\n      const first = (PRODUCT.variants || [])[0] ? optsOf(PRODUCT.variants[0]) : [];\n      SIZE_IDX = first.findIndex(isSize);\n      COLOR_IDX = first.findIndex((o, i) =\u003e i !== SIZE_IDX);\n    }\n    buildSizes();\n    buildColors();\n    syncSizes();\n    if (sizeWrap \u0026\u0026 colorWrap \u0026\u0026 sizeWrap.hidden \u0026\u0026 colorWrap.hidden) {\n      const fs = formSelects();\n      console.warn(\"[JM Herz] Schritt 1: keine Größen\/Farben gefunden\",\n        { formular: !!cartForm(), auswahlfelder: [fs.size, fs.color], produktdaten: !!PRODUCT,\n          varianten: PRODUCT ? PRODUCT.variants.map(v =\u003e v.title) : null });\n    }\n  }\n\n  \/* Gewicht je Größe *\/\n  const WEIGHT = { \"16x20\": \"ca. 1,6 g\", \"20x25\": \"ca. 2,6 g\" };\n  function info() {\n    const v = variantById(currentVariant());\n    const size  = curSize() || \"16 × 20 mm\";\n    const color = curColor() || \"Edelstahl\";\n    return { variant: v, size: size, color: color, weight: WEIGHT[optKeys(size)[0]] || \"\",\n             front: (IMG[currentVariant()] || {}).front || FALLBACK };\n  }\n  \/* Schritt-1-Karte + Texte (Größe, Farbe, Gewicht, Bild) *\/\n  function syncCard() {\n    const i = info();\n    document.querySelectorAll(\".js-hz-size\").forEach(el =\u003e { el.textContent = i.size; });\n    document.querySelectorAll(\".js-hz-color\").forEach(el =\u003e { el.textContent = i.color; });\n    document.querySelectorAll(\".js-hz-weight\").forEach(el =\u003e { el.textContent = i.weight || \"Hochglanz\"; });\n    const lb = document.getElementById(\"hzCfgLabel\");\n    if (lb) lb.textContent = i.color;\n    const im = document.getElementById(\"hzCfgImg\");\n    if (im \u0026\u0026 i.front \u0026\u0026 im.getAttribute(\"src\") !== i.front) { im.src = i.front; im.alt = \"Herz Zirkonia Vorderseite \" + i.color; }\n  }\n  function syncSizes() {\n    const s = curSize(), c = curColor();\n    if (sizeBox) sizeBox.querySelectorAll(\".jm-hz-size\").forEach(b =\u003e {\n      const on = b.dataset.size === s;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    if (colorBox) colorBox.querySelectorAll(\".jm-mh-color\").forEach(b =\u003e {\n      const on = b.dataset.color === c;\n      b.classList.toggle(\"active\", on);\n      b.setAttribute(\"aria-checked\", on ? \"true\" : \"false\");\n    });\n    syncCard();\n  }\n  \/* Formularauswahl geändert (auch direkt oben im Produktformular) → Karten nachziehen *\/\n  document.addEventListener(\"change\", e =\u003e {\n    if (e.target \u0026\u0026 e.target.tagName === \"SELECT\" \u0026\u0026 e.target.closest('form[action*=\"\/cart\/add\"]')) setTimeout(() =\u003e { syncSizes(); applyImage(); }, 150);\n  });\n  \/* sofort aus dem Formular aufbauen – nicht erst auf die Produktdaten warten *\/\n  setTimeout(buildChoices, 0);\n\n  function selectSize(s) { chooseSize(s); }\n  \/* Ersatz ohne Auswahlfelder: Variante über Produktdaten wählen (übrige Optionen beibehalten) *\/\n  function selectOpt(idx, s) {\n    if (!PRODUCT) return;\n    const form = cartForm();\n    if (!form) return;\n    const cur = variantById(currentVariant());\n    const curOpts = cur ? optsOf(cur) : [];\n    const list = (PRODUCT.variants || []).filter(v =\u003e (idx \u003e -1 ? optsOf(v)[idx] : v.title) === s);\n    const score = v =\u003e optsOf(v).filter((o, i) =\u003e i !== idx \u0026\u0026 o === curOpts[i]).length * 2 + (v.available !== false ? 1 : 0);\n    const v = list.sort((a, b) =\u003e score(b) - score(a))[0];\n    if (!v) return;\n    const vals = optsOf(v);\n    form.querySelectorAll('input[type=\"radio\"]').forEach(r =\u003e {\n      if (vals.indexOf(r.value) \u003e -1 \u0026\u0026 !r.checked) {\n        r.checked = true;\n        r.dispatchEvent(new Event(\"change\", { bubbles: true }));\n        const lab = r.id \u0026\u0026 form.querySelector('label[for=\"' + r.id + '\"]');\n        if (lab) lab.click();\n      }\n    });\n    const idSel = form.querySelector('select[name=\"id\"], input[name=\"id\"]');\n    if (idSel \u0026\u0026 String(idSel.value) !== String(v.id)) {\n      idSel.value = v.id;\n      idSel.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    }\n    lastVariant = currentVariant();\n    applyImage();\n  }\n  (function loadProduct() {\n    const el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    const get = el ? Promise.resolve(JSON.parse(el.textContent))\n                   : fetch(location.pathname.replace(\/\\\/$\/, \"\") + \".js\").then(r =\u003e r.json());\n    get.then(p =\u003e {\n      const media = (p.media || []).map(m =\u003e ({ alt: String(m.alt || \"\").toLowerCase(), src: m.src || (m.preview_image \u0026\u0026 m.preview_image.src) }));\n      const pick = (side, opts) =\u003e {\n        const sideKeys = side === \"front\" ? [\"vorderseite\"] : [\"rückseite\", \"rueckseite\"];\n        const list = media.filter(m =\u003e sideKeys.some(k =\u003e m.alt.indexOf(k) \u003e -1));\n        let hit = list.find(m =\u003e opts.some(o =\u003e optKeys(o).some(k =\u003e altNorm(m.alt).indexOf(k) \u003e -1)));\n        if (!hit \u0026\u0026 list.length === 1) hit = list[0];\n        return hit ? imgUrl(hit.src) : \"\";\n      };\n      p.variants.forEach(v =\u003e {\n        const opts = v.options || [v.option1, v.option2, v.option3];\n        const fr = pick(\"front\", opts);\n        IMG[String(v.id)] = { front: fr, back: pick(\"back\", opts) || fr };\n        \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n        TITLES[String(v.id)] = slug(String(v.title).replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, \" \"));\n      });\n      PRODUCT = p;\n      buildChoices();\n      applyImage();\n    }).catch(err =\u003e { console.warn(\"[JM Herz] Produktdaten nicht geladen\", err); buildChoices(); });\n  })();\n  guard(studioImg, false); guard(popupImg, true);\n  let lastVariant = currentVariant();\n  setInterval(() =\u003e { const v = currentVariant(); if (v !== lastVariant) { lastVariant = v; applyImage(); } }, 400);\n\n  \/* ── Seite wechseln ── *\/\n  function setSide(k) {\n    if (!LABEL[k] || (k === \"back\" \u0026\u0026 !hasBack)) return;\n    S.save();\n    S.side = k;\n    tabs.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(\"jmGkInputLabel\");\n    if (lb) lb.textContent = \"Gravur \" + LABEL[k] + (k === \"back\" ? \" (optional)\" : \"\");\n    [\"jmGkSideLabel\", \"jmGkPopupSideLabel\"].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (el) el.textContent = LABEL[k];\n    });\n    lineInputs.forEach((i, n) =\u003e { if (i) i.value = S[k][n]; });\n    applyImage();\n    \/* vorhandene Vorschau-Logik (Effekte, Mobile-Popup) auslösen *\/\n    input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    render(true);\n    (lineInputs.find(i =\u003e i \u0026\u0026 !i.value) || input).focus();\n  }\n  tabs.forEach(b =\u003e b.addEventListener(\"click\", () =\u003e setSide(b.dataset.side)));\n\n  \/* ── Eingaben ── *\/\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"input\", () =\u003e { S.save(); render(true); }));\n\n  \/* Symbole: in die zuletzt gewählte Zeile einfügen (Zeile 1 übernimmt die vorhandene Logik) *\/\n  document.addEventListener(\"click\", function (e) {\n    const btn = e.target.closest \u0026\u0026 e.target.closest(\"#engraving-preview .symbol-btn\");\n    if (!btn) return;\n    if (focused === input) { setTimeout(() =\u003e { S.save(); render(true); }, 30); return; }\n    e.stopImmediatePropagation();\n    const sym = btn.dataset.symbol || btn.textContent.trim();\n    const max = focused.maxLength \u003e 0 ? focused.maxLength : 11;\n    if (Array.from(focused.value + sym).length \u003e max) return;\n    const st = focused.selectionStart != null ? focused.selectionStart : focused.value.length;\n    const en = focused.selectionEnd != null ? focused.selectionEnd : focused.value.length;\n    focused.value = focused.value.substring(0, st) + sym + focused.value.substring(en);\n    focused.focus();\n    focused.selectionStart = focused.selectionEnd = st + sym.length;\n    S.save(); render(true);\n  }, true);\n\n  \/* Schriftart: vorhandene Logik setzt nur Zeile 1 → danach komplett neu zeichnen *\/\n  document.querySelectorAll(\"#engraving-preview .font-btn\").forEach(b =\u003e\n    b.addEventListener(\"click\", () =\u003e setTimeout(() =\u003e render(true), 30)));\n\n  \/* Werte, die per Skript gesetzt werden → regelmäßig übernehmen *\/\n  setInterval(() =\u003e {\n    const now = lineInputs.map((i, n) =\u003e (i \u0026\u0026 n \u003c LINES) ? i.value : \"\");\n    if (now.join(\"|\") !== S[S.side].join(\"|\")) { S.save(); render(false); }\n  }, 200);\n\n  \/* Schnittstelle für das Tweak-Panel *\/\n  window.jmGkStudio = { setSide: setSide, mark: markStudio, box: () =\u003e (window.innerWidth \u003c= 768 ? popupBox : studioBox),\n                        studioBox: studioBox, popupBox: popupBox, side: () =\u003e S.side, render: render,\n                        info: info, lines: () =\u003e LINES };\n  markStudio();\n  renderTabs();\n});\n\u003c\/script\u003e\n\u003cscript\u003e\n\/* =========================\n   3-SCHRITT KONFIGURATOR: 1 Schmuckstück → 2 Gravur → 3 Bestätigung\n   (nutzt window.jmGkSides \/ window.jmGkStudio aus dem Gravur-Studio)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const wrap = document.getElementById(\"jm-cfg-wrap\");\n  if (!wrap) return;\n  const TOTAL = 3;\n  let step = 1;\n  const next2 = document.getElementById(\"jm-cfg-next-2\");\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n  const sides = () =\u003e window.jmGkSides || { front: [], back: [], has: () =\u003e false };\n  const hasAny = () =\u003e sides().has(\"front\") || sides().has(\"back\");\n  const esc = t =\u003e String(t).replace(\/[\u0026\u003c\u003e\"]\/g, c =\u003e ({ \"\u0026\": \"\u0026amp;\", \"\u003c\": \"\u0026lt;\", \"\u003e\": \"\u0026gt;\", '\"': \"\u0026quot;\" }[c]));\n\n  function updNext2() {\n    if (!next2) return;\n    next2.disabled = !hasAny();\n    next2.title = next2.disabled ? \"Bitte zuerst eine Gravur eingeben\" : \"\";\n  }\n  function hidePopup() {\n    const p = document.getElementById(\"engraving-mobile-popup\");\n    if (p) p.classList.remove(\"show\");\n  }\n\n  function go(n, scroll) {\n    step = n;\n    for (let i = 1; i \u003c= TOTAL; i++) {\n      const card = document.getElementById(\"jm-cfg-card-\" + i);\n      if (card) card.classList.toggle(\"active\", i === n);\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 === 2) { updNext2(); if (window.jmGkStudio) { window.jmGkStudio.mark(); window.jmGkStudio.render(false); } }\n    if (n === 3) fillSummary();\n    if (scroll) wrap.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n  }\n\n  function fillSummary() {\n    const st = window.jmGkStudio;\n    const i = st \u0026\u0026 st.info ? st.info() : {};\n    const S = sides();\n    if (S.save) S.save();\n    const set = (id, v) =\u003e { const el = document.getElementById(id); if (el \u0026\u0026 v != null) el.textContent = v; };\n    set(\"jm-cfg-s3-size\", i.size);\n    set(\"jm-cfg-s3-color\", i.color);\n    set(\"jm-cfg-s3-weight\", \"Zirkonia\" + (i.weight ? \" · \" + i.weight : \"\"));\n    const thumb = document.getElementById(\"jm-cfg-s3-thumb\");\n    if (thumb \u0026\u0026 i.front) thumb.src = i.front;\n\n    const pv = document.getElementById(\"engravingPreviewText\");\n    const font = pv ? getComputedStyle(pv).fontFamily : \"Playfair Display\";\n    const fontName = font.replace(\/['\"]\/g, \"\").split(\",\")[0].trim();\n    const used = [\"front\", \"back\"].filter(k =\u003e S.has(k));\n    const box = document.getElementById(\"jm-cfg-s3-gravur-text\");\n    if (box) {\n      box.innerHTML = used.length ? used.map(k =\u003e\n        '\u003cdiv class=\"jm-cfg-s3-gravur-side-block\"\u003e\u003cspan class=\"jm-cfg-s3-gravur-side\"\u003e' + LABEL[k] + '\u003c\/span\u003e' +\n        '\u003cspan class=\"jm-cfg-s3-gravur-lines\" style=\"font-family:' + esc(font) + '\"\u003e' +\n        S[k].filter(v =\u003e v.trim()).map(v =\u003e \"\u003cspan\u003e\" + esc(v.trim()) + \"\u003c\/span\u003e\").join(\"\") + \"\u003c\/span\u003e\u003c\/div\u003e\").join(\"\") : \"–\";\n    }\n    set(\"jm-cfg-s3-sides\", (used.length ? used.map(k =\u003e LABEL[k]).join(\" \u0026 \") : \"Keine\") + \" · kostenlos\");\n    set(\"jm-cfg-s3-gravur-meta\", \"Schriftart: \" + fontName + \" · je Seite 3 Zeilen à max. 11 Zeichen\");\n\n    \/* Preis: aus dem Theme übernehmen, sonst aus der Variante *\/\n    const target = document.getElementById(\"jm-cfg-s3-price\");\n    if (target) {\n      const src = document.querySelector(\".price__pricing-group\");\n      if (src) target.innerHTML = src.innerHTML;\n      else if (i.variant \u0026\u0026 i.variant.price != null) {\n        const p = Number(i.variant.price);\n        const eur = (p \u003e 999 || String(i.variant.price).indexOf(\".\") === -1 ? p \/ 100 : p);\n        target.innerHTML = '\u003cspan class=\"jm-cfg-s3-price-fallback\"\u003e' + eur.toFixed(2).replace(\".\", \",\") + \" €\u003c\/span\u003e\";\n      }\n    }\n  }\n\n  const on = (id, fn) =\u003e { const el = document.getElementById(id); if (el) el.addEventListener(\"click\", fn); };\n  on(\"jm-cfg-next-1\", () =\u003e go(2, true));\n  on(\"jm-cfg-back-2\", () =\u003e go(1, true));\n  on(\"jm-cfg-next-2\", () =\u003e { if (hasAny()) go(3, true); });\n  on(\"jm-cfg-back-3\", () =\u003e go(2, true));\n  on(\"jm-cfg-popup-next\", e =\u003e {\n    e.preventDefault(); e.stopPropagation();\n    hidePopup();\n    if (step === 2 \u0026\u0026 hasAny()) go(3, true);\n  });\n\n  \/* Weiter-Button erst aktiv, wenn eine Seite befüllt ist *\/\n  setInterval(() =\u003e { if (step === 2) updNext2(); }, 300);\n\n  \/* sticky geht nicht, wenn ein Elterncontainer overflow hidden\/auto hat → Bild stattdessen mittig *\/\n  (function checkSticky() {\n    const s2 = wrap.querySelector(\".jm-cfg-s2-wrap\");\n    if (!s2) return;\n    let el = s2.parentElement, blocked = false;\n    while (el \u0026\u0026 el !== document.body) {\n      const o = getComputedStyle(el);\n      if (\/(hidden|auto|scroll|clip)\/.test(o.overflow + o.overflowY + o.overflowX)) { blocked = true; break; }\n      el = el.parentElement;\n    }\n    s2.classList.toggle(\"jm-no-sticky\", blocked);\n    if (!blocked) return;\n    \/* Bild mitführen: bleibt mittig im Fenster, aber innerhalb der Gravur-Spalte *\/\n    const grid = s2.querySelector(\".engraving-preview-grid\");\n    const img  = s2.querySelector(\".engraving-preview-image\");\n    if (!grid || !img) return;\n    let raf = 0;\n    function follow() {\n      raf = 0;\n      if (window.innerWidth \u003c= 900 || step !== 2) { img.style.transform = \"\"; return; }\n      const g = grid.getBoundingClientRect();\n      const h = img.offsetHeight;\n      const want = (window.innerHeight - h) \/ 2 - g.top;\n      const y = Math.max(0, Math.min(want, g.height - h));\n      img.style.transform = y ? \"translateY(\" + Math.round(y) + \"px)\" : \"\";\n    }\n    const req = () =\u003e { if (!raf) raf = requestAnimationFrame(follow); };\n    window.addEventListener(\"scroll\", req, { passive: true });\n    window.addEventListener(\"resize\", req);\n    wrap.addEventListener(\"click\", () =\u003e setTimeout(req, 50));\n    setInterval(req, 500);\n  })();\n\n  window.jmCfg = { go: go, step: () =\u003e step };\n  go(1, false);\n});\n\u003c\/script\u003e\n\n  \u003cstyle\u003e\n.jm-lv-stage {\n  \/* ── Gravur-Position (mit ?jmtweak=1 einstellen) ── *\/\n  --lv-x: 50%;\n  --lv-y: 50%;\n  --lv-rot: 0deg;\n  --lv-size: 6;\n  --lv-tx: -50%;     \/* Anker: Zeile 1 mittig auf x\/y *\/\n  --lv-ty: -50%;\n  --lv-color: rgba(205,205,205,0.92);\n  \/* Feinjustierung (mit ?jmtweak=1 einstellbar) *\/\n  --lv-lh: 1.15;     \/* Zeilenabstand Zeile 2 + 3 *\/\n  --lv-gap: 0em;     \/* Abstand Zeile 1 → Zeile 2 *\/\n  --lv-ls: 0.06em;   \/* Zeichenabstand *\/\n  --lv-op: 1;        \/* Deckkraft der Gravur *\/\n  --lv-rdx: 0em;     \/* Versatz Zeile 2 + 3 seitlich *\/\n  position: relative;\n  container-type: inline-size;\n  border-radius: 14px;\n  overflow: hidden;\n}\n.jm-lv-img {\n  width: 100%;\n  display: block;\n  border-radius: 14px;\n  transition: opacity 0.3s ease;\n}\n\/* Bild-Zoom (Tweak-Panel): --lv-zoom (1 = Original), --lv-px \/ --lv-py (Verschiebung in %) – Bühne schneidet ab *\/\n.jm-lv-stage { background: #000; }\n.jm-lv-stage .jm-lv-img, .jm-lv-stage .jm-lv-img-back {\n  transform: translate(var(--lv-px, 0%), var(--lv-py, 0%)) scale(var(--lv-zoom, 1));\n  transform-origin: center center;\n}\n.jm-lv-text {\n  position: absolute;\n  left: var(--lv-x);\n  top: var(--lv-y);\n  transform: translate(var(--lv-tx, -50%), var(--lv-ty, -190%)) rotate(var(--lv-rot));\n  font-size: calc(var(--lv-size) * 1cqw);\n  font-family: 'Playfair Display', serif;\n  color: var(--lv-color);\n  letter-spacing: var(--lv-ls, 0.06em);\n  opacity: var(--lv-op, 1);\n  white-space: nowrap;\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  pointer-events: none;\n}\n.jm-lv-text.is-empty { opacity: 0.65; }\n\/* Zeile 2 + 3 unter Zeile 1 (Zeile 1 bleibt an der eingestellten Position) *\/\n.jm-lv-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% + var(--lv-gap, 0em)); transform: translateX(calc(-50% + var(--lv-rdx, 0em)));\n  white-space: pre; text-align: center; font: inherit; line-height: var(--lv-lh, 1.15); color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n    @keyframes jmLvShake {\n  0%, 100% { transform: translateX(0); }\n  20%, 60% { transform: translateX(-5px); }\n  40%, 80% { transform: translateX(5px); }\n}\n.jm-lv-shake { animation: jmLvShake 0.35s ease; }\n.jm-lv-label {\n  display: block;\n  text-align: center;\n  margin-top: 10px;\n  font-size: 9px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: #c9a84c;\n  font-weight: 700;\n}\n.jm-lv-close {\n  position: absolute;\n  top: 8px;\n  right: 10px;\n  background: none;\n  border: none;\n  color: #c9a84c;\n  font-size: 20px;\n  line-height: 1;\n  cursor: pointer;\n  padding: 4px;\n  z-index: 10;\n  opacity: 0.7;\n  transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.jm-lv-close:hover { opacity: 1; transform: scale(1.15); }\n\n\/* Desktop-Panel *\/\n#jm-lv-desktop {\n  display: none;\n  position: fixed;\n  left: 25vh;\n  top: 50vh;\n  transform: translateY(-50%);\n  z-index: 8888;\n  width: 460px;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 20px;\n  padding: 16px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n}\n\/* ── Desktop: Werte je Größe + Seite (mit ?jmtweak=1 ermitteln, Regel hier einfügen) ──\n   Beispiel: #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage { --lv-x: 50%; --lv-y: 48%; --lv-rot: 0deg; --lv-size: 7; }\n             #jm-lv-desktop[data-variant=\"20-25-mm\"] .jm-lv-stage.jm-lv-stage--back { … }\n   Gravur-Studio: .engraving-preview-image[data-variant=\"20-25-mm\"][data-side=\"front\"] { --st-x: …; } *\/\n\n#jm-lv-desktop.show { display: block; animation: jmLvIn 0.3s ease; }\n@keyframes jmLvIn {\n  from { opacity: 0; transform: translateY(-50%) translateX(-12px); }\n  to   { opacity: 1; transform: translateY(-50%) translateX(0); }\n}\n\n\/* Mobile-Popup *\/\n#jm-lv-mobile {\n  position: fixed;\n  left: 50%;\n  bottom: 110px;\n  width: calc(100% - 24px);\n  max-width: 380px;\n  z-index: 9998;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 18px;\n  padding: 12px;\n  box-shadow: 0 -10px 40px rgba(0,0,0,0.35);\n  opacity: 0;\n  pointer-events: none;\n  transform: translate(-50%, 20px);\n  transition: opacity 0.3s ease, transform 0.3s ease;\n}\n#jm-lv-mobile.show { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }\n\n@media (max-width: 768px) {\n  #jm-lv-desktop { display: none !important; }\n\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 50%;\n    --lv-rot: 0deg;\n    --lv-size: 6;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-color: rgba(205, 205, 205, 0.92);\n    position: relative;\n    container-type: inline-size;\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n  \/* ── Mobile: Werte je Größe + Seite (mit ?jmtweak=1 am Handy ermitteln) ──\n     Beispiel: #jm-lv-mobile[data-variant=\"20-25-mm\"] .jm-lv-stage { … } *\/\n}\n@media (min-width: 769px) { #jm-lv-mobile { display: none !important; } }\n\n\/* Vorder- + Rückseite nebeneinander *\/\n.jm-lv-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr 1fr; }\n.jm-lv-side { display: none; }\n.jm-lv-side.on { display: block; }\n.jm-lv-side-label { display: block; text-align: center; margin-top: 6px; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #8a7055; font-weight: 700; }\n\/* Vorder- + Rückseite befüllt: immer EIN großes Bild – Umschalter Vorderseite \/ Rückseite\n   (Panel bleibt so schmal wie bisher und verdeckt das Produktformular nicht) *\/\n.jm-lv-tabs { display: none; gap: 6px; margin-bottom: 8px; padding-right: 26px; }\n.jm-lv-both .jm-lv-tabs { display: flex; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr; }\n.jm-lv-tabs button { flex: 1; padding: 6px 8px; border-radius: 999px; border: 1px solid rgba(201,168,76,0.45); background: transparent; color: #e6d3a3; font: 700 10px Inter, sans-serif; letter-spacing: 1.2px; text-transform: uppercase; cursor: pointer; }\n.jm-lv-tabs button.active { background: #c9a84c; color: #1a1410; }\n\/* ── RÜCKSEITE: eigene Werte je Größe (mit ?jmtweak=1 → Seite „Rückseite“ ermitteln) ──\n   Höhere Spezifität (.jm-lv-stage.jm-lv-stage--back) → greift immer vor den Vorderseiten-Werten. *\/\n\n\/* ── LIVE-VORSCHAU OBEN: Position für ALLE Varianten (Größe + Farbe) – gleiche Fotos ──\n   Variantenregeln aus ?jmtweak=1 ([data-variant]) greifen weiterhin vor diesen Werten. *\/\n#jm-lv-desktop .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 53.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n}\n#jm-lv-desktop .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 50%;\n  --lv-y: 52.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n}\n@media (max-width: 768px) {\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 50%;\n    --lv-y: 53%;\n    --lv-rot: 0deg;\n    --lv-size: 3.25;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-gap: -0.15em;\n  }\n  #jm-lv-mobile .jm-lv-stage.jm-lv-stage--back {\n    --lv-x: 50%;\n    --lv-y: 54%;\n    --lv-rot: 0deg;\n    --lv-size: 3.25;\n    --lv-tx: -50%;\n    --lv-ty: -50%;\n    --lv-gap: 0.05em;\n  }\n}\n\n\/* ── WERTE JE FARBE (gelten für 16 × 20 UND 20 × 25 mm – gleiche Fotos) ──\n   data-variant = Farbe ohne Größe: „edelstahl“, „vergoldet“, „ros-gold-vergoldet“ (Roségold (vergoldet)) *\/\n#jm-lv-desktop[data-variant=\"ros-gold-vergoldet\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 53.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.5;\n  --lv-py: -7%;\n}\n\n#jm-lv-desktop[data-variant=\"ros-gold-vergoldet\"] .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 50%;\n  --lv-y: 52.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.46;\n  --lv-py: -9%;\n}\n\n#jm-lv-desktop[data-variant=\"edelstahl\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 53.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.57;\n}\n#jm-lv-desktop[data-variant=\"edelstahl\"] .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 50%;\n  --lv-y: 52.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.37;\n}\n\n#jm-lv-desktop[data-variant=\"vergoldet\"] .jm-lv-stage {\n  --lv-x: 50%;\n  --lv-y: 53.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.32;\n}\n\n#jm-lv-desktop[data-variant=\"vergoldet\"] .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 50%;\n  --lv-y: 52.5%;\n  --lv-rot: 0deg;\n  --lv-size: 3.25;\n  --lv-ty: -50%;\n  --lv-lh: 1.35;\n  --lv-zoom: 1.28;\n}\n\n.engraving-preview-image[data-variant=\"ros-gold-vergoldet\"][data-side=\"back\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n  --st-zoom: 1.31;\n  --st-py: -8%;\n}\n\n.engraving-preview-image[data-variant=\"ros-gold-vergoldet\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n  --st-zoom: 1.26;\n  --st-py: -6.5%;\n}\n\n.engraving-preview-image[data-variant=\"edelstahl\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n  --st-zoom: 1.23;\n}\n\n.engraving-preview-image[data-variant=\"edelstahl\"][data-side=\"back\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n  --st-zoom: 1.26;\n  --st-py: -2%;\n}\n\n.engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"back\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n}\n\n.engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] {\n  --st-x: 50%;\n  --st-y: 45.5%;\n  --st-rot: 0deg;\n  --st-size: 3;\n  --st-gap: -0.1em;\n}\n\n@media (max-width: 768px) {\n  #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 3;\n    --st-zoom: 1.21;\n  }\n}\n\n@media (max-width: 768px) {\n  #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 54%;\n    --st-rot: 0deg;\n    --st-size: 3;\n    --st-zoom: 1.21;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 38.5%;\n    --st-rot: 0deg;\n    --st-size: 3.75;\n    --st-gap: -0.1em;\n    --st-zoom: 1.32;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 38.5%;\n    --st-rot: 0deg;\n    --st-size: 3.75;\n    --st-gap: -0.1em;\n    --st-zoom: 1.32;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"edelstahl\"][data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 38.5%;\n    --st-rot: 0deg;\n    --st-size: 4;\n    --st-gap: -0.1em;\n    --st-zoom: 1.54;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"edelstahl\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 38.5%;\n    --st-rot: 0deg;\n    --st-size: 4;\n    --st-gap: -0.1em;\n    --st-zoom: 1.67;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"ros-gold-vergoldet\"][data-side=\"front\"] {\n    --st-x: 50%;\n    --st-y: 36.5%;\n    --st-rot: 0deg;\n    --st-size: 4.25;\n    --st-gap: -0.1em;\n    --st-zoom: 1.99;\n    --st-py: -15%;\n  }\n}\n\n@media (max-width: 768px) {\n  .engraving-preview-image[data-variant=\"ros-gold-vergoldet\"][data-side=\"back\"] {\n    --st-x: 50%;\n    --st-y: 36.5%;\n    --st-rot: 0deg;\n    --st-size: 4;\n    --st-gap: -0.1em;\n    --st-zoom: 1.99;\n    --st-py: -15%;\n  }\n}\n\n\/* Tweak-Panel *\/\n#jm-lv-tweak {\n  position: fixed;\n  right: 20px;\n  top: 120px;\n  z-index: 99999;\n  width: 240px;\n  background: #111;\n  color: #eee;\n  border: 1px solid #c9a84c;\n  border-radius: 12px;\n  padding: 12px;\n  font: 12px\/1.4 Inter, sans-serif;\n  cursor: move;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.4);\n}\n#jm-lv-tweak label { display: flex; justify-content: space-between; margin-top: 8px; }\n#jm-lv-tweak input[type=range] { width: 100%; cursor: pointer; }\n#jm-lv-tweak code { display: block; margin-top: 10px; padding: 6px; background: #222; border-radius: 6px; font-size: 11px; white-space: pre-wrap; cursor: text; }\n#jm-lv-tweak button { margin-top: 8px; width: 100%; padding: 6px; background: #c9a84c; color: #111; border: 0; border-radius: 6px; cursor: pointer; font-weight: 600; }\n#jm-lv-tweak select { width: 100%; margin-top: 8px; padding: 5px; border-radius: 6px; border: 0; font: inherit; }\n#jm-lv-tweak { max-height: 85vh; overflow: auto; }\n#jm-lv-tweak strong { display: block; touch-action: none; user-select: none; }\n@media (max-width: 768px) { #jm-lv-tweak { top: 10px; right: 8px; width: 220px; max-height: 45vh; overflow: auto; background: rgba(17,17,17,.88); } }\n\u003c\/style\u003e\n\n\u003c!-- JM LIVE-VORSCHAU: Desktop-Panel + Mobile-Popup --\u003e\n\u003cdiv id=\"jm-lv-desktop\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cdiv id=\"jm-lv-mobile\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* Optional: eigene Vorschaubilder pro Farbe (Name wie in der Variante, klein geschrieben).\n   Leer lassen = Variantenbild aus Shopify wird genutzt. *\/\nvar JM_LV_BILDER = {\n  \/\/ 'gold':    'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'schwarz': 'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'silber':  'https:\/\/cdn.shopify.com\/...'\n};\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  var form    = document.querySelector('form[action*=\"\/cart\/add\"]');\n  var desktop = document.getElementById('jm-lv-desktop');\n  var mobile  = document.getElementById('jm-lv-mobile');\n  if (!form || !desktop || !mobile) return;\n\n  \/* Panels an den body hängen → nie im Formular, X löst kein Add-to-Cart aus *\/\n  document.body.appendChild(desktop);\n  document.body.appendChild(mobile);\n\n  var stages = document.querySelectorAll('.jm-lv-stage');\n  var texts  = document.querySelectorAll('.jm-lv-text:not(.jm-lv-text--back)');\n  var imgs   = document.querySelectorAll('.jm-lv-img');\n  \/* Rückseite *\/\n  var backTexts = document.querySelectorAll('.jm-lv-text--back');\n  var backImgs  = document.querySelectorAll('.jm-lv-img-back');\n  var colors = document.querySelectorAll('.jm-lv-color');\n  var variants = {};\n  var currentId = null;\n\n  \/* ── Produktdaten: erst Theme-JSON, sonst \/products\/handle.js ── *\/\n  function loadProduct() {\n    var el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    if (el) {\n      try { return Promise.resolve(JSON.parse(el.textContent)); } catch (e) {}\n    }\n    var path = location.pathname.replace(\/\\\/$\/, '');\n    return fetch(path + '.js').then(function (r) { return r.json(); });\n  }\n\n  function imgUrl(src) {\n    if (!src) return '';\n    if (src.indexOf('\/\/') === 0) src = 'https:' + src;\n    return src + (src.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=900';\n  }\n\n  \/* Schlüssel einer Option: Größe „16 × 20 mm“ → „16x20“, sonst erstes Wort *\/\n  function plain(t) { return String(t || '').toLowerCase().normalize('NFD').replace(\/[\\u0300-\\u036f]\/g, '').replace(\/ß\/g, 'ss'); }\n  function optKeys(o) {\n    o = plain(o);\n    var m = o.match(\/(\\d+(?:[.,]\\d+)?)\\s*[x×]\\s*(\\d+(?:[.,]\\d+)?)\/);\n    if (m) return [m[1] + 'x' + m[2]];\n    return [o.replace(\/[^a-z0-9]+\/g, ''), o.split(\/[\\s-]+\/)[0]].filter(Boolean);\n  }\n  function altNorm(a) { return plain(a).replace(\/(\\d)\\s*[x×]\\s*(\\d)\/g, '$1x$2').replace(\/[^a-z0-9]+\/g, ''); }\n\n  loadProduct().then(function (p) {\n    var fallback = p.featured_image || (p.images \u0026\u0026 p.images[0]) || '';\n    if (typeof fallback === 'object') fallback = fallback.src;\n    \/* Rückseiten-Fotos: Alt-Text mit „Rückseite“ + Farbe (z. B. „Rückseite Vergoldet“) *\/\n    var backMedia = (p.media || []).filter(function (m) {\n      var a = String(m.alt || '').toLowerCase();\n      return a.indexOf('rückseite') \u003e -1 || a.indexOf('rueckseite') \u003e -1;\n    });\n    p.variants.forEach(function (v) {\n      var src = v.featured_image ? v.featured_image.src : fallback;\n      var own = null;\n      var opts = (v.options || [v.option1, v.option2, v.option3]);\n      opts.forEach(function (o) {\n        if (o \u0026\u0026 JM_LV_BILDER[String(o).toLowerCase()]) own = JM_LV_BILDER[String(o).toLowerCase()];\n      });\n      var back = null;\n      backMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!back \u0026\u0026 hitK) back = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!back \u0026\u0026 backMedia.length === 1) back = backMedia[0].src || (backMedia[0].preview_image \u0026\u0026 backMedia[0].preview_image.src);\n      \/* Vorderseiten-Foto: Alt-Text mit „Vorderseite“ + Farbe *\/\n      var frontMedia = (p.media || []).filter(function (m) { return String(m.alt || '').toLowerCase().indexOf('vorderseite') \u003e -1; });\n      var frontOwn = null;\n      frontMedia.forEach(function (m) {\n        var a = altNorm(m.alt);\n        opts.forEach(function (o) {\n          var hitK = optKeys(o).some(function (k) { return a.indexOf(k) \u003e -1; });\n          if (!frontOwn \u0026\u0026 hitK) frontOwn = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!frontOwn \u0026\u0026 frontMedia.length === 1) frontOwn = frontMedia[0].src || (frontMedia[0].preview_image \u0026\u0026 frontMedia[0].preview_image.src);\n      var front = own || (frontOwn ? imgUrl(frontOwn) : imgUrl(src));\n      variants[String(v.id)] = { img: front, back: back ? imgUrl(back) : front, title: v.title };\n    });\n    checkVariant();\n  });\n\n  function getInput() {\n    return (window.jmGravurFeld \u0026\u0026 window.jmGravurFeld('Vorderseite', 1)) ||\n           form.querySelector('.gravurText, input[type=\"text\"][name*=\"ravur\"]');\n  }\n  \/* Rückseite (Zeile 1) im Produktformular *\/\n  function getBackInput() {\n    return window.jmGravurFeld ? window.jmGravurFeld('Rückseite', 1)\n      : form.querySelector('#gravur_Rückseite_1, #gravurtext_rueckseite, #gravurtext_rückseite, input[data-gravur-seite=\"Rückseite\"]');\n  }\n  var ZEILEN = window.jmGravurZeilen ? window.jmGravurZeilen() : 3;\n\n  function getFont(input) {\n    var f = form.querySelector('#gravur_schriftart_input, input[name*=\"Schriftart\"], select[name*=\"Schriftart\"]');\n    if (f \u0026\u0026 f.value) return f.value;\n    return input ? getComputedStyle(input).fontFamily : 'Playfair Display';\n  }\n\n  \/* Zeilen 1–3 einer Seite (Zeile 1 = Feld der Seite, 2 + 3 per ID) *\/\n  function sideLines(seite, first) {\n    var l = [first ? first.value : ''];\n    for (var n = 2; n \u003c= 3; n++) {\n      var f = n \u003c= ZEILEN \u0026\u0026 window.jmGravurFeld ? window.jmGravurFeld(seite, n) : null;\n      l.push(f ? f.value : '');\n    }\n    return l.map(function (v) { return v.trim(); });\n  }\n  function restOf(l) { return l[2] ? (l[1] + '\\n' + l[2]) : l[1]; }\n\n  function updateText() {\n    var input = getInput();\n    var fl    = sideLines('Vorderseite', input);\n    if (lvSample \u0026\u0026 !fl.join('')) fl = ['A + M', 'Für immer', '12.06.24'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var val   = fl.join('');\n    var font  = getFont(input);\n    var bl    = sideLines('Rückseite', getBackInput());\n    if (lvSample \u0026\u0026 !bl.join('')) bl = ['♥', 'In Liebe', '2024'].map(function (v, i) { return i \u003c ZEILEN ? v : ''; });\n    var bVal  = bl.join('');\n    texts.forEach(function (t) {\n      t.textContent = fl[0] || (val ? '\\u00A0' : 'Deine Gravur');\n      t.setAttribute('data-rest', val ? restOf(fl) : '');\n      t.classList.toggle('is-empty', !val);\n      t.style.fontFamily = font + ', serif';\n    });\n    backTexts.forEach(function (t) {\n      t.textContent = bl[0] || (bVal ? '\\u00A0' : '');\n      t.setAttribute('data-rest', bVal ? restOf(bl) : '');\n      t.style.fontFamily = font + ', serif';\n    });\n    \/* Vorderseite zeigen, wenn befüllt oder keine Rückseite – Rückseite nur wenn befüllt *\/\n    \/* Beide Seiten befüllt: zuletzt bearbeitete Seite groß zeigen (Tweak: gewählte Seite) *\/\n    var fKey = fl.join('|'), bKey = bl.join('|');\n    if (bKey !== lastBKey \u0026\u0026 bVal) mSide = 'back';\n    if (fKey !== lastFKey \u0026\u0026 val)  mSide = 'front';\n    lastFKey = fKey; lastBKey = bKey;\n    if (tweakActive) mSide = tweakSide;\n    [desktop, mobile].forEach(function (panel) {\n      var f = panel.querySelector('.jm-lv-side[data-side=\"front\"]');\n      var b = panel.querySelector('.jm-lv-side[data-side=\"back\"]');\n      var both = (!!val || tweakSide === 'back') \u0026\u0026 (!!bVal || tweakSide === 'back');\n      var fOn = !!val || !bVal, bOn = !!bVal || tweakSide === 'back';\n      if (both) { fOn = mSide === 'front'; bOn = mSide === 'back'; }\n      if (f) f.classList.toggle('on', fOn);\n      if (b) b.classList.toggle('on', bOn);\n      panel.classList.toggle('jm-lv-both', both);\n    });\n    document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n      t.classList.toggle('active', t.dataset.side === mSide);\n    });\n  }\n  var tweakSide = 'front';\n  var lvSample = false;   \/* Tweak: Beispieltext mit 3 Zeilen *\/\n  var mSide = 'front', lastFKey = '', lastBKey = '', tweakActive = false;\n  \/* Umschalter Vorderseite \/ Rückseite (Desktop + Mobile) *\/\n  document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n    t.addEventListener('click', function (e) {\n      e.preventDefault(); e.stopPropagation();\n      mSide = t.dataset.side;\n      if (tweakActive) { tweakSide = mSide; var sel = document.getElementById('jm-lv-side'); if (sel) { sel.value = mSide; sel.dispatchEvent(new Event('change')); } }\n      updateText();\n    });\n  });\n\n  function show() {\n    updateText();\n    if (window.innerWidth \u003e 768) desktop.classList.add('show');\n    else mobile.classList.add('show');\n  }\n\n  \/* X schließt nur das Panel *\/\n  document.querySelectorAll('.jm-lv-close').forEach(function (btn) {\n    btn.addEventListener('click', function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      btn.parentElement.classList.remove('show');\n    });\n  });\n\n  \/* Tippen → öffnen *\/\n  function isGravurField(el) {\n    if (!el) return false;\n    if (el === getInput() || el === getBackInput()) return true;\n    for (var n = 2; n \u003c= ZEILEN; n++) {\n      if (window.jmGravurFeld \u0026\u0026 (el === window.jmGravurFeld('Vorderseite', n) || el === window.jmGravurFeld('Rückseite', n))) return true;\n    }\n    return !!(el.id \u0026\u0026 \/^gravur_(Vorderseite|Rückseite)_[123]$\/.test(el.id));\n  }\n  form.addEventListener('input', function (e) {\n    if (isGravurField(e.target)) show();\n  });\n\n  \/* Schriftart → öffnen *\/\n  form.addEventListener('click', function (e) {\n    if (e.target.closest('.font-btn')) setTimeout(show, 60);\n  });\n  form.addEventListener('change', function (e) {\n    if (e.target.name \u0026\u0026 e.target.name.indexOf('Schriftart') \u003e -1) show();\n  });\n\n  \/* Symbole → wie Buchstaben einfügen + öffnen *\/\n  var SYM_SEL = '.symbol-btn, .symbol-btn-2, .symbol-button';\n  var valBefore = null;\n\n  \/* Zu welchem Feld gehört der Symbol-Button? (nächstes Gravurfeld im selben Block) *\/\n  function inputForSymbol(btn) {\n    var el = btn.parentElement;\n    while (el \u0026\u0026 el !== form) {\n      var i = el.querySelector('input[type=\"text\"][name*=\"ravur\"], .gravurText');\n      if (i) return i;\n      el = el.parentElement;\n    }\n    return getInput();\n  }\n\n  function isFormSymbol(el) {\n    var btn = el.closest(SYM_SEL);\n    if (!btn || btn.closest('#engraving-preview')) return null; \/* Vorschau-Block in der Beschreibung ignorieren *\/\n    return btn;\n  }\n\n  function shake(input) {\n    input.classList.remove('jm-lv-shake', 'jm-shake');\n    void input.offsetWidth;\n    input.classList.add('jm-lv-shake', 'jm-shake');\n  }\n\n  document.addEventListener('pointerdown', function (e) {\n    var b = isFormSymbol(e.target);\n    var input = b ? inputForSymbol(b) : null;\n    if (input) valBefore = input.value;\n  }, true);\n\n  document.addEventListener('click', function (e) {\n    var btn = isFormSymbol(e.target);\n    var input = btn ? inputForSymbol(btn) : null;\n    if (!btn || !input) return;\n    e.preventDefault();\n    var before = valBefore;\n    valBefore = null;\n    setTimeout(function () {\n      \/* Hat das Gravur-Snippet das Symbol schon eingefügt? Dann nur anzeigen. *\/\n      if (before === null || input.value !== before) { show(); return; }\n      var sym = (btn.dataset.symbol || btn.textContent).trim();\n      var max = input.maxLength \u003e 0 ? input.maxLength : Infinity;\n      if (input.value.length + sym.length \u003e max) { shake(input); show(); return; }\n      input.value += sym;\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      show();\n    }, 40);\n  });\n\n  \/* Jede Wertänderung (auch per Script eingefügt) → Vorschau öffnen *\/\n  function bothVals() {\n    return sideLines('Vorderseite', getInput()).join('|') + '||' + sideLines('Rückseite', getBackInput()).join('|');\n  }\n  var lastVal = bothVals();\n  setInterval(function () {\n    var now = bothVals();\n    if (now !== lastVal) { lastVal = now; show(); }\n  }, 200);\n\n  \/* ── Farbe \/ Variante → Bild wechseln ── *\/\n  function setBackImage(url) {\n    backImgs.forEach(function (img) { if (url) img.src = url; });\n  }\n\n  function setImage(url) {\n    var pre = new Image();\n    pre.onload = function () {\n      imgs.forEach(function (img) {\n        if (!img.getAttribute('src')) { img.src = url; return; }\n        img.style.opacity = 0;\n        setTimeout(function () { img.src = url; img.style.opacity = 1; }, 150);\n      });\n    };\n    pre.src = url;\n  }\n\n  var onVariant = null;\n\n  function checkVariant() {\n    var idField = form.querySelector('[name=\"id\"]');\n    var id = idField ? String(idField.value) : null;\n    if (!id || id === currentId || !variants[id]) return;\n    currentId = id;\n    \/* Größe aus dem Namen entfernen → Regeln gelten je Farbe für 16 × 20 UND 20 × 25 mm (gleiche Fotos) *\/\n    var slug = variants[id].title.replace(\/\\d+(?:[.,]\\d+)?\\s*[x×]\\s*\\d+(?:[.,]\\d+)?\\s*(?:mm|cm)?\/gi, ' ').toLowerCase()\n      .replace(\/ä\/g, 'ae').replace(\/ö\/g, 'oe').replace(\/ü\/g, 'ue').replace(\/ß\/g, 'ss')\n      .replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '');\n    desktop.dataset.variant = slug;\n    mobile.dataset.variant  = slug;\n    setImage(variants[id].img);\n    setBackImage(variants[id].back);\n    colors.forEach(function (c) { c.textContent = variants[id].title; });\n    if (onVariant) onVariant();\n  }\n\n  form.addEventListener('change', function () { setTimeout(checkVariant, 50); });\n  form.addEventListener('click',  function () { setTimeout(checkVariant, 80); });\n  setInterval(checkVariant, 400);\n  updateText();\n\n  \/* ── Tweak-Panel: URL mit ?jmtweak=1 aufrufen ── *\/\n  if (location.search.indexOf('jmtweak') === -1) return;\n\n  var ranges = { x: [0, 100, 0.5], y: [0, 100, 0.5], rot: [-90, 90, 1], size: [2, 20, 0.25],\n                 tx: [-150, 50, 1], ty: [-400, 100, 1],\n                 lh: [0.6, 2.5, 0.05], gap: [-1.5, 2, 0.05], ls: [-0.1, 0.5, 0.01], rdx: [-3, 3, 0.05], op: [0.2, 1, 0.05],\n                 zoom: [0.5, 3, 0.01], px: [-50, 50, 0.5], py: [-50, 50, 0.5] };\n  var names  = { x: 'Horizontal %', y: 'Vertikal %', rot: 'Drehung °', size: 'Größe',\n                 tx: 'Anker horizontal %', ty: 'Anker vertikal %',\n                 lh: 'Zeilenabstand (Z. 2+3)', gap: 'Abstand Zeile 1 → 2', ls: 'Zeichenabstand', rdx: 'Versatz Z. 2+3 seitlich', op: 'Deckkraft',\n                 zoom: 'Bild-Zoom ×', px: 'Bild horizontal %', py: 'Bild vertikal %' };\n  \/* Variable, Einheit, Standardwert *\/\n  var PROPS  = { x: ['--lv-x', '%', 50], y: ['--lv-y', '%', 50], rot: ['--lv-rot', 'deg', 0], size: ['--lv-size', '', 5],\n                 tx: ['--lv-tx', '%', -50], ty: ['--lv-ty', '%', -190],\n                 lh: ['--lv-lh', '', 1.15], gap: ['--lv-gap', 'em', 0], ls: ['--lv-ls', 'em', 0.06], rdx: ['--lv-rdx', 'em', 0], op: ['--lv-op', '', 1],\n                 zoom: ['--lv-zoom', '', 1], px: ['--lv-px', '%', 0], py: ['--lv-py', '%', 0] };\n  var vals   = {};\n  \/* Gravur-Studio unten: eigene Variablen (ohne Anker) *\/\n  var PROPS_ST = { x: ['--st-x', '%', 50], y: ['--st-y', '%', 50], rot: ['--st-rot', 'deg', 0], size: ['--st-size', '', 8],\n                   lh: ['--st-lh', '', 1.15], gap: ['--st-gap', 'em', 0], ls: ['--st-ls', 'em', 0.08], rdx: ['--st-rdx', 'em', 0], op: ['--st-op', '', 1],\n                   zoom: ['--st-zoom', '', 1], px: ['--st-px', '%', 0], py: ['--st-py', '%', 0] };\n  var area = 'top';   \/* top | studio | studiopop *\/\n  function curProps() { return area === 'top' ? PROPS : PROPS_ST; }\n  function studioTarget() {\n    var st = window.jmGkStudio;\n    if (!st) return null;\n    return area === 'studiopop' ? st.popupBox : st.studioBox;\n  }\n  function tTargets() {\n    if (area === 'top') return Array.prototype.slice.call(sideStages());\n    var t = studioTarget();\n    return t ? [t] : [];\n  }\n\n  function activePanel() { return window.innerWidth \u003e 768 ? desktop : mobile; }\n\n  \/* Stages der gewählten Seite (Vorderseite \/ Rückseite) *\/\n  var SIDE_SEL = { front: '.jm-lv-stage:not(.jm-lv-stage--back)', back: '.jm-lv-stage--back' };\n  function sideStages() { return document.querySelectorAll(SIDE_SEL[tweakSide]); }\n\n  function readVals() {\n    if (area !== 'top') {\n      var st = window.jmGkStudio, tg = studioTarget();\n      if (st \u0026\u0026 st.side() !== tweakSide) st.setSide(tweakSide);\n      if (st) st.mark();\n      if (tg) {\n        Object.keys(PROPS_ST).forEach(function (k) { tg.style.removeProperty(PROPS_ST[k][0]); });\n        if (st) st.mark();\n        var cst = getComputedStyle(tg);\n        Object.keys(PROPS_ST).forEach(function (k) {\n          var v = parseFloat(cst.getPropertyValue(PROPS_ST[k][0]));\n          vals[k] = isNaN(v) ? PROPS_ST[k][2] : v;\n        });\n      }\n      return;\n    }\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.removeProperty(PROPS[k][0]); });\n    });\n    var cs = getComputedStyle(activePanel().querySelector(SIDE_SEL[tweakSide]));\n    \/* Anker-Standard je Ansicht (Desktop: -50 \/ -190 · Mobile: -9 \/ -239 bzw. 0 \/ -239) *\/\n    var mob = activePanel() === mobile;\n    var hasVar = \/translate\\(-9%\/.test(getComputedStyle(activePanel().querySelector('.jm-lv-text')).transform) || !!activePanel().dataset.variant;\n    PROPS.tx[2] = mob ? (hasVar ? -9 : 0) : -50;\n    PROPS.ty[2] = mob ? -239 : -190;\n    Object.keys(PROPS).forEach(function (k) {\n      var v = parseFloat(cs.getPropertyValue(PROPS[k][0]));\n      vals[k] = isNaN(v) ? PROPS[k][2] : v;\n    });\n  }\n  readVals();\n\n  var tw = document.createElement('div');\n  tw.id = 'jm-lv-tweak';\n  tweakActive = true;\n  var html = '\u003cstrong style=\"color:#c9a84c;display:flex;justify-content:space-between;align-items:center\"\u003e⠿ Gravur-Position · \u003cspan id=\"jm-lv-view\"\u003e\u003c\/span\u003e'\n           + '\u003cbutton type=\"button\" id=\"jm-lv-min\" title=\"einklappen\" style=\"width:auto;margin:0;padding:2px 10px;background:#333;color:#eee\"\u003e–\u003c\/button\u003e\u003c\/strong\u003e'\n           + '\u003cselect id=\"jm-lv-area\"\u003e\u003coption value=\"top\"\u003eBereich: Live-Vorschau oben\u003c\/option\u003e'\n           + '\u003coption value=\"studio\"\u003eBereich: Gravur-Studio (Bild)\u003c\/option\u003e'\n           + '\u003coption value=\"studiopop\"\u003eBereich: Gravur-Studio Mobile-Popup\u003c\/option\u003e\u003c\/select\u003e'\n           + '\u003cselect id=\"jm-lv-side\"\u003e\u003coption value=\"front\"\u003eVorderseite\u003c\/option\u003e\u003coption value=\"back\"\u003eRückseite\u003c\/option\u003e\u003c\/select\u003e';\n  Object.keys(vals).forEach(function (k) {\n    if (k === 'tx') html += '\u003cdiv data-row=\"tx\" style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eAnker (Feinposition des Textblocks)\u003c\/div\u003e';\n    if (k === 'lh') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eZeilen \u0026amp; Schrift\u003c\/div\u003e';\n    if (k === 'zoom') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eBild-Zoom \u0026amp; Ausschnitt\u003c\/div\u003e';\n    html += '\u003cdiv data-row=\"' + k + '\"\u003e\u003clabel\u003e' + names[k] + ' \u003cspan id=\"jm-lv-v-' + k + '\"\u003e' + vals[k] + '\u003c\/span\u003e\u003c\/label\u003e' +\n            '\u003cinput type=\"range\" data-k=\"' + k + '\" min=\"' + ranges[k][0] + '\" max=\"' + ranges[k][1] +\n            '\" step=\"' + ranges[k][2] + '\" value=\"' + vals[k] + '\"\u003e\u003c\/div\u003e';\n  });\n  html += '\u003cbutton type=\"button\" id=\"jm-lv-sample\" style=\"background:#333;color:#eee\"\u003eBeispieltext: aus\u003c\/button\u003e'\n        + '\u003cbutton type=\"button\" id=\"jm-lv-reset\" style=\"background:#333;color:#eee\"\u003eSeite zurücksetzen\u003c\/button\u003e'\n        + '\u003ccode id=\"jm-lv-out\"\u003e\u003c\/code\u003e\u003cbutton type=\"button\" id=\"jm-lv-copy\"\u003eWerte kopieren\u003c\/button\u003e';\n  tw.innerHTML = html;\n  document.body.appendChild(tw);\n\n  function apply() {\n    if (area !== 'top') return applyStudio();\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.setProperty(PROPS[k][0], vals[k] + PROPS[k][1]); });\n    });\n    var panel = activePanel();\n    \/* Ausgabe: Position immer, Feinjustierung nur wenn vom Standard abweichend *\/\n    var lines = Object.keys(PROPS).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS[k][2];\n    }).map(function (k) { return '  ' + PROPS[k][0] + ': ' + vals[k] + PROPS[k][1] + ';'; });\n    var rule = '#' + panel.id + '[data-variant=\"' + (panel.dataset.variant || '') + '\"] .jm-lv-stage' + (tweakSide === 'back' ? '.jm-lv-stage--back' : '') + ' {\\n' +\n      lines.join('\\n') + '\\n}';\n    document.getElementById('jm-lv-out').textContent = panel === mobile\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Gravur-Studio: Werte anwenden + CSS-Regel ausgeben *\/\n  function applyStudio() {\n    var tg = studioTarget(), st = window.jmGkStudio;\n    if (!tg) { document.getElementById('jm-lv-out').textContent = '⚠ Bereich nicht gefunden'; return; }\n    Object.keys(PROPS_ST).forEach(function (k) { tg.style.setProperty(PROPS_ST[k][0], vals[k] + PROPS_ST[k][1]); });\n    tg.classList.add('jm-st-pos');\n    \/* Beispieltext im Studio, solange die Seite leer ist *\/\n    if (lvSample \u0026\u0026 st \u0026\u0026 !window.jmGkSides.has(tweakSide)) {\n      tg.querySelectorAll('#engravingPreviewText, .popup-preview-text').forEach(function (el) {\n        el.textContent = 'A + M';\n        el.setAttribute('data-rest', ZEILEN \u003e= 3 ? 'Für immer\\n12.06.24' : (ZEILEN === 2 ? 'Für immer' : ''));\n      });\n      var ov = tg.querySelector('.engraving-overlay');\n      if (ov) ov.classList.add('active');\n    }\n    if (area === 'studiopop') {\n      var pop = document.getElementById('engraving-mobile-popup');\n      if (pop) setTimeout(function () { pop.classList.add('show'); }, 30);\n    }\n    var lines = Object.keys(PROPS_ST).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS_ST[k][2];\n    }).map(function (k) { return '  ' + PROPS_ST[k][0] + ': ' + vals[k] + PROPS_ST[k][1] + ';'; });\n    var sel = (area === 'studiopop' ? '#engraving-mobile-popup .popup-preview' : '.engraving-preview-image')\n            + '[data-variant=\"' + (tg.dataset.variant || '') + '\"][data-side=\"' + tweakSide + '\"]';\n    var rule = sel + ' {\\n' + lines.join('\\n') + '\\n}';\n    \/* Mobile-Werte nur für Mobile, Desktop-Werte gelten als Basis für alle Größen *\/\n    document.getElementById('jm-lv-out').textContent = (area === 'studiopop' || activePanel() === mobile)\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Bereich wechseln: Regler-Zeilen anpassen, Bereich sichtbar machen *\/\n  function syncRows() {\n    ['tx', 'ty'].forEach(function (k) {\n      tw.querySelectorAll('[data-row=\"' + k + '\"]').forEach(function (r) { r.style.display = area === 'top' ? '' : 'none'; });\n    });\n    var opt = tw.querySelector('#jm-lv-area option[value=\"studiopop\"]');\n    if (opt) opt.disabled = activePanel() !== mobile;\n  }\n  function focusArea() {\n    if (area === 'top') { show(); return; }\n    desktop.classList.remove('show'); mobile.classList.remove('show');\n    \/* Gravur-Studio liegt in Schritt 2 des Konfigurators → Schritt öffnen *\/\n    if (window.jmCfg \u0026\u0026 window.jmCfg.step() !== 2) window.jmCfg.go(2, false);\n    var tg = studioTarget();\n    if (area === 'studio' \u0026\u0026 tg) tg.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    if (area === 'studiopop') {\n      var sec = document.getElementById('engraving-preview');\n      if (sec) sec.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  function viewLabel() {\n    var v = document.getElementById('jm-lv-view');\n    if (v) v.textContent = activePanel() === mobile ? 'Mobile' : 'Desktop';\n  }\n  \/* Ansicht gewechselt (Fenster schmaler\/breiter, Handy gedreht) → Werte der neuen Ansicht laden *\/\n  var lastView = activePanel();\n  window.addEventListener('resize', function () {\n    if (activePanel() !== lastView) { lastView = activePanel(); onVariant(); show(); }\n  });\n\n  \/* Variante gewechselt → Regler auf die Werte dieser Variante setzen *\/\n  onVariant = function () {\n    viewLabel();\n    syncRows();\n    readVals();\n    Object.keys(vals).forEach(function (k) {\n      tw.querySelector('[data-k=\"' + k + '\"]').value = vals[k];\n      document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    });\n    apply();\n  };\n\n  \/* Seite wechseln → Regler auf die Werte dieser Seite setzen, Rückseite sichtbar machen *\/\n  document.getElementById('jm-lv-side').addEventListener('change', function () {\n    tweakSide = this.value;\n    onVariant();\n    if (area === 'top') show(); else focusArea();\n  });\n  document.getElementById('jm-lv-area').addEventListener('change', function () {\n    area = this.value;\n    onVariant();\n    focusArea();\n  });\n\n  tw.addEventListener('input', function (e) {\n    var k = e.target.dataset.k;\n    if (!k) return;\n    vals[k] = parseFloat(e.target.value);\n    document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    apply();\n    if (area === 'top') show();\n  });\n\n  \/* Beispieltext: zeigt 3 Zeilen auf beiden Seiten (nur Vorschau, Formular bleibt leer) *\/\n  document.getElementById('jm-lv-sample').addEventListener('click', function () {\n    lvSample = !lvSample;\n    this.textContent = 'Beispieltext: ' + (lvSample ? 'an' : 'aus');\n    if (area === 'top') show();\n    else { if (!lvSample \u0026\u0026 window.jmGkStudio) window.jmGkStudio.render(false); apply(); }\n  });\n  \/* Zurücksetzen: Live-Werte der gewählten Seite verwerfen → Werte aus dem CSS *\/\n  document.getElementById('jm-lv-reset').addEventListener('click', function () {\n    onVariant();\n    if (area === 'top') show();\n  });\n\n  document.getElementById('jm-lv-copy').addEventListener('click', function () {\n    if (navigator.clipboard) navigator.clipboard.writeText(document.getElementById('jm-lv-out').textContent);\n    var b = this; b.textContent = 'Kopiert ✓';\n    setTimeout(function () { b.textContent = 'Werte kopieren'; }, 1500);\n  });\n\n  \/* Draggable ohne Sprung *\/\n  var drag = false, ox = 0, oy = 0;\n  \/* Touch (Mobile): über die Überschrift verschieben *\/\n  var head = tw.querySelector('strong');\n  \/* Einklappen: nur die Kopfzeile bleibt sichtbar → Vorschau frei *\/\n  document.getElementById('jm-lv-min').addEventListener('click', function (e) {\n    e.stopPropagation();\n    var min = tw.classList.toggle('jm-lv-min');\n    Array.prototype.forEach.call(tw.children, function (c) { if (c !== head) c.style.display = min ? 'none' : ''; });\n    if (!min) syncRows();\n    this.textContent = min ? '+' : '–';\n  });\n  head.addEventListener('touchstart', function (e) {\n    if (e.target.closest \u0026\u0026 e.target.closest('button')) return;\n    var t = e.touches[0], r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = t.clientX - r.left; oy = t.clientY - r.top;\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchmove', function (e) {\n    if (!drag) return;\n    var t = e.touches[0];\n    tw.style.left = Math.min(Math.max(t.clientX - ox, 0), window.innerWidth - 60) + 'px';\n    tw.style.top  = Math.min(Math.max(t.clientY - oy, 0), window.innerHeight - 40) + 'px';\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchend', function () { drag = false; });\n\n  tw.addEventListener('mousedown', function (e) {\n    if (['INPUT', 'BUTTON', 'CODE', 'SELECT', 'OPTION'].indexOf(e.target.tagName) \u003e -1) return;\n    var r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = e.clientX - r.left; oy = e.clientY - r.top;\n    e.preventDefault();\n  });\n  document.addEventListener('mousemove', function (e) {\n    if (!drag) return;\n    tw.style.left = (e.clientX - ox) + 'px';\n    tw.style.top  = (e.clientY - oy) + 'px';\n  });\n  document.addEventListener('mouseup', function () { drag = false; });\n\n  apply();\n  show();\n});\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet \/ 16 x 20 mm","offer_id":56782182449417,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 20 x 25 mm","offer_id":57455140241673,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 16 x 20 mm","offer_id":56782182416649,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 20 x 25 mm","offer_id":57455140274441,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet) \/ 16 x 20 mm","offer_id":56782182482185,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet) \/ 20 x 25 mm","offer_id":57455140307209,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/UN-0107_rfx8y9b2hs_2026-01-26-18-07-47.jpg?v=1769524700"},{"product_id":"individuelles-baby-armband-herz-gravur-edelstahl","title":"Individuelles Baby-Armband mit Herzanhänger – personalisierte Gravur aus Edelstahl","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003ctitle\u003eIndividuelles Baby-Armband mit Herz | Personalisierte Gravur aus Edelstahl\u003c\/title\u003e\n\n  \u003c!-- SEO --\u003e\n  \u003cmeta name=\"description\" content=\"Individuelles Baby-Armband für Mädchen mit Herzanhänger aus Edelstahl. Verstellbar von 12–17 cm, personalisierte Gravur auf 6x29 mm Platte. Liebevolles Geschenk zur Geburt, Taufe oder zum Geburtstag.\"\u003e\n\n\n  \u003cmeta name=\"keywords\" content=\"Baby Armband Gravur, personalisiertes Babyarmband, Herz Anhänger Baby, Baby Schmuck Edelstahl, Taufgeschenk Mädchen, Geschenk zur Geburt personalisiert, Baby Armband Herz\"\u003e\n\n\n\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n  \u003c!-- Fonts --\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n  \u003c!-- Bootstrap Icons --\u003e\n  \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n  \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n    \n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  \n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n  \n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n   \n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.5rem;\n  letter-spacing: 0.08em;\n   \n  color: rgb(186 186 186 \/ 94%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n  \n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(0px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n  \n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n \n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  \n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n     \n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/    \n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/ \n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n} \n    \n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\/*Desktop Vorschau*\/\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n       top: 29px;\n    right: 7px;\n    transform: rotate(4deg);\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n    \n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n    \n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n    \n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n   \n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n \n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n   \n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 235px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: 14px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n} \n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.4rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(0px);\n}\n}\n\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n                  top: -5px;\n        right: -3px;\n    \n}\n  .popup-preview-text-wrap {\n      position: absolute;\n        top: 68%;\n        left: 40%;\n        white-space: nowrap;\n        display: block;\n        transform: rotate(5deg);\n        \n}  \n      \n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n  \u003c\/style\u003e\n\n\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n  \u003c!-- =========================\n     HERO: Edelstahl Herz Anhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n  \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n    \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n      \u003c!-- Textbereich --\u003e\n      \u003cdiv class=\"engraving-hero-text\"\u003e\n        \n\n        \u003ch1\u003eIndividuelles Baby-Armband mit Herz | Personalisierte Gravur aus Edelstahl\u003c\/h1\u003e\n        \u003cdiv class=\"hero-subline\"\u003e\n  \u003cspan class=\"engraving-badge\"\u003e\n    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n  \u003c\/span\u003e\n\n  \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n     \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n     Live-Vorschau ansehen\n  \u003c\/a\u003e\n\u003c\/div\u003e\n\n        \u003cp\u003e\n         Zartes Baby-Armband mit Herzanhänger aus hochwertigem Edelstahl – liebevoll personalisierbar mit individueller Gravur. Ein zeitloses Erinnerungsstück für Mädchen.\n        \u003c\/p\u003e\n\n        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n          Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"micro-trust-valentine\"\u003e\n          Sicher · Persönlich · Handgefertigt\n        \u003c\/div\u003e\n\n        \u003c!-- Trust Icons --\u003e\n        \u003cdiv class=\"engraving-trust\"\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 6 × 29 mm \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e Mädchen\u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003c!-- \u003cdiv class=\"micro-trust-valentine\" style=\"\n    text-align: left;\n\"\u003e\n          Angeboten wird der Anhänger ohne Kette.\n        \u003c\/div\u003e--\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Bildbereich --\u003e\n      \u003cdiv class=\"engraving-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2613.jpg?v=1769606604\" alt=\"Edelstahl Babyarmband mit Herz mit Gravur\"\u003e\n       \n      \u003c\/div\u003e\n  \n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     WHY HEART STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ch2\u003eWarum dieses Baby-Armband?\u003c\/h2\u003e\n    \u003cp\u003e\n      Ein kleines Herz für große Gefühle. Dieses filigrane Baby-Armband aus hochwertigem Edelstahl steht für Geborgenheit, Liebe und einen ganz besonderen Anfang. Mit einer persönlichen Gravur wird es zu einem einzigartigen Erinnerungsstück – perfekt zur Geburt, Taufe oder als liebevolles Geschenk für ein Mädchen.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"engraving-why-grid\"\u003e\n      \n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n        \u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Armband graviert, kostenlos.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n        \u003cp\u003eEin Herz, das Nähe ausdrückt – perfekt für Armbänder, Ketten oder Schlüsselanhänger. Ob Jahrestag, Geburtstag, Taufe oder einfach als Zeichen deiner Liebe –\ndieses Baby-Armband ist ein persönliches Geschenk, das Emotionen trägt, für die Ewigkeit.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n        \u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n  \n  \u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n        \u003cp\u003e\n          Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e  \n          nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n        \u003cp\u003e\n          Jede Gravur entsteht in unserem Familienbetrieb –  \n          \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n        \u003c\/p\u003e\n         \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n        \u003cp\u003e\n          Sichere Zahlung, persönlicher Support  \n          und höchste Qualitätskontrolle vor dem Versand.\n        \u003c\/p\u003e\n         \u003cp\u003eSollte etwas nicht passen, findest du mit uns\n        unkompliziert eine Lösung.  \u003c\/p\u003e\n        \n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"engraving-section engraving-fade\"\u003e\n    \u003cdiv class=\"container engraving-hero-text\"\u003e\n      \u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n      \u003cp class=\"engraving-section-desc\"\u003e\n        Dieser Herzanhänger steht für Beständigkeit, Persönlichkeit und zeitlose Eleganz.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"engraving-features\"\u003e\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n          \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n          \u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – \n    entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n         \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n  \u003cp\u003e\n    Zeitloses Design, persönliche Gravur – \n    ein Schmuckstück, das Emotionen transportiert statt nur gut auszusehen.\n  \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n  \u003ch3\u003eZart \u0026amp; Bedeutungsvoll\u003c\/h3\u003e\n  \u003cp\u003ePoliertes Gravurarmband mit vollem Herz – ein zeitloses Schmuckstück als Zeichen von Liebe und Verbundenheit.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\n\n    \n  \u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n  \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n    \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n    \u003cdiv class=\"engraving-specs\"\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eArmbandlänge:\u003c\/strong\u003e verstellbar 12-17cm\n        \u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eGröße:\u003c\/strong\u003e 6 × 29mm\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca.5 g\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n      \u003c\/ul\u003e\n\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003eArmband \u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Mädchen\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n  \u003cspan class=\"engraving-badge visible-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n  \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n    \u003c!-- IMAGE --\u003e\n    \u003cdiv class=\"engraving-preview-image\"\u003e\n      \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Babyarmband_26_rosegold.png?v=1769606457\" alt=\"Edelstahl Babyarmband mit Gravur\"\u003e\n\n      \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n       \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n  \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n  \u003cspan class=\"preview-check\"\u003e\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;font-size: 2.5rem;position: relative;\n    top: 35px;\n    left: 65px;\"\u003e\u003c\/i\u003e\u003c\/span\u003e\n\u003c\/div\u003e  \n      \u003c\/div\u003e\n      \u003cp class=\"engraving-preview-note\"\u003e\n  ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n\u003c\/p\u003e\n\n      \n    \u003c\/div\u003e\n\n    \u003c!-- CONTENT --\u003e\n    \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n      \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n\n      \u003ch2\u003eMach dieses Herz einzigartig\u003c\/h2\u003e\n      \u003cp\u003e\n        Gib deine gewünschte Gravur ein und sieh sofort,\n        wie dein persönlicher Herzanhänger Gestalt annimmt.\n      \u003c\/p\u003e\n\n      \u003c!-- INPUT --\u003e\n      \u003cdiv class=\"engraving-input-wrap\"\u003e\n        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n      \u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\u003e\n\u003cdiv class=\"engraving-symbol-picker\"\u003e\n  \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n      \u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n  \n\n  \u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n  \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n \n    \n  \u003c!-- SERIF --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n     \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n      Times New Roman\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n      Georgia\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n  \u003c!-- SANS --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n      Arial\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n      Helvetica\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- MONOSPACE --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n      Courier New\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n      Lucida Console\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- SCRIPT --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n      Allura\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n      Alex Brush\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n      Kaushan Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HANDWRITING --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n      Pacifico\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n      Indie Flower\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n      Dancing Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n  \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n      \u003c!-- CTA --\u003e\n      \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n      \u003c\/button\u003e\n\n      \u003c!-- MICRO TRUST --\u003e\n      \u003cdiv class=\"engraving-micro-trust\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n    \n\u003c!-- End Block --\u003e\n  \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n    \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n    \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n   \u003cp\u003e Handarbeit 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 \n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n  \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Babyarmband_26_rosegold.png?v=1769606457\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n   \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n     \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\u003e\n    \u003cspan class=\"popup-preview-check\"\u003e\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;font-size: 2.5rem;\"\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n    \n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n  const gravurInput = document.querySelector(\"#gravurtext_vorderseite\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet","offer_id":56783379890441,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl","offer_id":56783379923209,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet)","offer_id":56783379955977,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Babyarmband_26_vergoldet_2.png?v=1769604946"},{"product_id":"damenring-herzform-gravur","title":"Damenring aus Edelstahl in Herzform – individuell gravierbar","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003ctitle\u003eEleganter Damenring aus Edelstahl in Herzform – mit persönlicher Gravur\u003c\/title\u003e\n\n  \u003c!-- SEO --\u003e\n  \n\u003cmeta name=\"description\" content=\"Eleganter Damenring aus Edelstahl in Herzform – individuell gravierbar. Zwei Ringvarianten, zeitlos und persönlich. Perfekt als Geschenk.\"\u003e\n\n\u003cmeta name=\"keywords\" content=\"Damenring Herzform, gravierbarer Damenring, Edelstahl Ring gravur, Herz Ring personalisiert, Damenring Edelstahl, Geschenk für sie, personalisierter Ring\"\u003e\n\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n  \u003c!-- Fonts --\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n  \u003c!-- Bootstrap Icons --\u003e\n  \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n  \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n    \n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  \n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n  \n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n   \n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\/*Desktop*\/\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.4rem;\n  letter-spacing: 0.08em;\n   \n  color: rgb(186 186 186 \/ 94%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n  \n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n  \n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n \n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  \n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n     \n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/    \n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/ \n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n} \n    \n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\/*Desktop*\/\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 42px;\n    left: 23px;\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n    \n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n    \n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n    \n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n   \n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n \n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n   \n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: -15px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n} \n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.4rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n}\n\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n        bottom: 59px;\n        right: 24px;\n    \n}\n  .popup-preview-text-wrap {\n       position: absolute;\n                top: 49%;\n        left: 49%;\n         \n  white-space: nowrap;\n  display: block;\n        \n}  \n      \n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n  \u003c\/style\u003e\n\n\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n  \u003c!-- =========================\n     HERO: Edelstahl Herz Anhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n  \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n    \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n      \u003c!-- Textbereich --\u003e\n      \u003cdiv class=\"engraving-hero-text\"\u003e\n        \n\n        \u003ch1\u003eGravierbarer Damenring aus Edelstahl in Herzform\u003c\/h1\u003e\n        \u003cdiv class=\"hero-subline\"\u003e\n  \u003cspan class=\"engraving-badge\"\u003e\n    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n  \u003c\/span\u003e\n\n  \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n     \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n     Live-Vorschau ansehen\n  \u003c\/a\u003e\n\u003c\/div\u003e\n\n        \u003cp\u003e\n          Zwei elegante Damenringe in Herzform aus poliertem Edelstahl – individuell gravierbar.\nWähle zwischen Ring A oder B und verewige Namen, Initialen oder ein Datum mit Bedeutung.\n        \u003c\/p\u003e\n\n        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n          Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"micro-trust-valentine\"\u003e\n          Sicher · Persönlich · Handgefertigt\n        \u003c\/div\u003e\n\n        \u003c!-- Trust Icons --\u003e\n        \u003cdiv class=\"engraving-trust\"\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Hochwertiger Edelstahl \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e 12 × 19 mm \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e Herzvariante A oder B\u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e10 x 13 mm oder 8 x 10 mm \u003c\/span\u003e\n         \n\n        \u003c\/div\u003e\n      \u003c!--  \u003cdiv class=\"micro-trust-valentine\" style=\" text-align: left; \"\u003e\n          Angeboten wird der Anhänger ohne Kette.\n        \u003c\/div\u003e--\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Bildbereich --\u003e\n      \u003cdiv class=\"engraving-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2669.jpg?v=1769788677\" alt=\"Damenring in Herzform mit Gravur\"\u003e\n       \n      \u003c\/div\u003e\n  \n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     WHY STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ch2\u003eWarum dieses Herzmotiv? Erinnerungen am Ring\u003c\/h2\u003e\n    \u003cp\u003e\n      Ein Herz ist mehr als eine Form – es ist ein Versprechen.  \n  Dieser fein gearbeitete Damenring aus poliertem Edelstahl steht für Liebe, Verbundenheit und bleibende Erinnerungen.\n\u003c\/p\u003e\n   \n \n\n    \u003cdiv class=\"engraving-why-grid\"\u003e\n      \n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n        \u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Motiv graviert, kostenlos.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n        \u003cp\u003e\n  Zwei elegante Varianten, individuell gravierbar, machen ihn zu einem\n  persönlichen Schmuckstück, das Gefühle sichtbar macht – dezent, stilvoll\n  und zeitlos.\n\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n        \u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n  \n  \u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n        \u003cp\u003e\n          Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e  \n          nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n        \u003cp\u003e\n          Jede Gravur entsteht in unserem Familienbetrieb –  \n          \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n        \u003c\/p\u003e\n         \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n        \u003cp\u003e\n          Sichere Zahlung, persönlicher Support  \n          und höchste Qualitätskontrolle vor dem Versand.\n        \u003c\/p\u003e\n         \u003cp\u003eSollte etwas nicht passen, findest du mit uns\n        unkompliziert eine Lösung.  \u003c\/p\u003e\n        \n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"engraving-section engraving-fade\"\u003e\n    \u003cdiv class=\"container engraving-hero-text\"\u003e\n      \u003ch1\u003eMehr als nur ein Damenring\u003c\/h1\u003e\n      \u003cp class=\"engraving-section-desc\"\u003e\n       Dieses elegante Damenring aus Edelstahl steht für Persönlichkeit,\n  Verbundenheit und stilvolle Details – ein täglicher Begleiter mit Bedeutung für echte Liebe.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"engraving-features\"\u003e\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n          \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n          \u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – \n    entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n         \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n  \u003cp\u003e\n    Zeitloses Design, persönliche Gravur – \n    ein Schmuckstück, das Emotionen transportiert statt nur gut auszusehen.\n  \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n  \u003ch3\u003ePersonalisierbar \u0026amp; Zeitlos\u003c\/h3\u003e\n\u003cp\u003eHochwertiger Edelstahl-Ring mit Herzform – wähle deine Initialen für ein einzigartiges, stilvolles Schmuckstück voller Persönlichkeit und Liebe.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\n\n    \n  \u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n  \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n    \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n    \u003cdiv class=\"engraving-specs\"\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eRing Umfang:\u003c\/strong\u003e 52 mm (6), 54 mm (7), 57 mm (8), 59 mm (9)\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e \u003cstrong\u003eHerz Variante:\u003c\/strong\u003e Ring A | Ring B\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eRing Größe:\u003c\/strong\u003e 12 x 19mm\u003c\/li\u003e\n        \n\u003cli\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e \u003cstrong\u003eMotiv:\u003c\/strong\u003e Herz \u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-arrows-angle-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravurfläche:\u003c\/strong\u003e 10 x 13 mm oder 8 x 10 mm\u003c\/li\u003e\n        \n        \n      \u003c\/ul\u003e\n\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Ring\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Damen\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e Ring B max. 8,5 g | Ring A max 5,5 g \u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n  \u003cspan class=\"engraving-badge visible-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n  \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n    \u003c!-- IMAGE --\u003e\n    \u003cdiv class=\"engraving-preview-image\"\u003e\n      \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2670.jpg?v=1769788415\" alt=\"Edelstahl Damenring mit Gravur\"\u003e\n\n      \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n       \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n  \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n  \u003cspan class=\"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      \u003cp class=\"engraving-preview-note\"\u003e\n  ✦ Diese Darstellung dient als Vorschau für Ring B (groß). Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n\u003c\/p\u003e\n\n      \n    \u003c\/div\u003e\n\n    \u003c!-- CONTENT --\u003e\n    \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n      \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n\n      \u003ch2\u003eMach diesen Damenring einzigartig\u003c\/h2\u003e\n      \u003cp\u003e\n        Gib deine gewünschte Gravur ein und sieh sofort,\n        wie der Damenring Persönlichkeit in Gestalt annimmt.\n      \u003c\/p\u003e\n\n      \u003c!-- INPUT --\u003e\n      \u003cdiv class=\"engraving-input-wrap\"\u003e\n        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"6\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n        \u003csmall\u003eMax. 6 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n      \u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\u003e\n\u003cdiv class=\"engraving-symbol-picker\"\u003e\n  \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n      \u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n  \n\n  \u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n  \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n \n    \n  \u003c!-- SERIF --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n     \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n      Times New Roman\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n      Georgia\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n  \u003c!-- SANS --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n      Arial\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n      Helvetica\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- MONOSPACE --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n      Courier New\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n      Lucida Console\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- SCRIPT --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n      Allura\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n      Alex Brush\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n      Kaushan Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HANDWRITING --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n      Pacifico\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n      Indie Flower\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n      Dancing Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n  \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n      \u003c!-- CTA --\u003e\n      \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n      \u003c\/button\u003e\n\n      \u003c!-- MICRO TRUST --\u003e\n      \u003cdiv class=\"engraving-micro-trust\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n    \n\u003c!-- End Block --\u003e\n  \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n    \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n    \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n   \u003cp\u003e Handarbeit 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 \n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n  \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2670.jpg?v=1769788415\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n   \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n     \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n    \n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravurtext_oberfläche\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n        const back3 = document.querySelector(\"#gravurtext_3\");\n        if (back3) back3.style.fontFamily = fontFamily;\n        const back4 = document.querySelector(\"#gravurtext_4\");\n        if (back4) back4.style.fontFamily = fontFamily;\n        const back5 = document.querySelector(\"#gravurtext_5\");\n        if (back5) back5.style.fontFamily = fontFamily;\n        const back6 = document.querySelector(\"#gravurtext_6\");\n        if (back6) back6.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 6;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n      const back3 = document.getElementById(\"gravurtext_3\");\n      if (back3) back3.style.fontFamily = font;\n      const back4 = document.getElementById(\"gravurtext_4\");\n      if (back4) back4.style.fontFamily = font;\n      const back5 = document.getElementById(\"gravurtext_5\");\n      if (back5) back5.style.fontFamily = font;\n      const back6 = document.getElementById(\"gravurtext_6\");\n      if (back6) back6.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet \/ 52 (6) \/ Ring A - schmall","offer_id":56790624502025,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 52 (6) \/ Ring B - groß","offer_id":56790728933641,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 54 (7) \/ Ring A - schmall","offer_id":56790718808329,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 54 (7) \/ Ring B - groß","offer_id":56790728966409,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 57 (8) \/ Ring A - schmall","offer_id":56790718841097,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 57 (8) \/ Ring B - groß","offer_id":56790728999177,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 59 (9) \/ Ring A - schmall","offer_id":56790718873865,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 59 (9) \/ Ring B - groß","offer_id":56790729031945,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 52 (6) \/ Ring A - schmall","offer_id":56790624534793,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 52 (6) \/ Ring B - groß","offer_id":56790729064713,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 54 (7) \/ Ring A - schmall","offer_id":56790718906633,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 54 (7) \/ Ring B - groß","offer_id":56790729097481,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 57 (8) \/ Ring A - schmall","offer_id":56790718939401,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 57 (8) \/ Ring B - groß","offer_id":56790729130249,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 59 (9) \/ Ring A - schmall","offer_id":56790718972169,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl \/ 59 (9) \/ Ring B - groß","offer_id":56790729163017,"sku":null,"price":39.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/IMG_2669.jpg?v=1769788677"},{"product_id":"herzanhanger-edelstahl-mit-kette-befuellbar-gravur","title":"Edler Herzanhänger aus Edelstahl mit Kette \u0026 Füllset  – Gedenkschmuck mit Gravur","description":"\u003cbody\u003e\n\n\n  \u003cmeta charset=\"UTF-8\"\u003e\n  \u003ctitle\u003eHerzanhänger aus Edelstahl mit Kette \u0026amp; Füllset - persönlich gravierbar\u003c\/title\u003e\n\n  \u003c!-- SEO --\u003e\n  \u003cmeta name=\"description\" content=\"Ein befüllbarer Herzanhänger aus hochwertigem Edelstahl. Mit Kette \u0026amp; Füllset. Persönliches Geschenk mit Gravur voller Bedeutung für besondere Momente.\"\u003e\n\n  \u003cmeta name=\"keywords\" content=\"Herzanhänger Edelstahl, befüllbarer Herzanhänger, Schmuck Geschenk Liebe, Edelstahl Herz Kette, Andenken Schmuck, Erinnerungsschmuck, Geschenk Valentinstag, gravierbarer Herzanhänger\"\u003e\n\n\n  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n  \u003c!-- Fonts --\u003e\n  \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n  \u003c!-- Bootstrap Icons --\u003e\n  \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n  \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n    \n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  \n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n  \n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n   \n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.7rem;\n  letter-spacing: 0.08em;\n   \n  color: rgb(186 186 186 \/ 94%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n  \n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n  \n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n \n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  \n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n     \n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/    \n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/ \n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n} \n    \n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n      bottom:30px;\n      left:26px;\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n    \n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n    \n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n    \n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n   \n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n \n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n   \n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 235px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: -15px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n} \n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.4rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n}\n\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n         bottom: 50px;\n    right: 24px;\n    \n}\n  .popup-preview-text-wrap {\n       position: absolute;\n                top: 49%;\n        left: 49%;\n         \n  white-space: nowrap;\n  display: block;\n        \n}  \n      \n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n  \u003c\/style\u003e\n\n\n\n\n\u003cdiv class=\"engraving-product\"\u003e\n\n  \u003c!-- =========================\n     HERO: Edelstahl Herz Anhänger\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n  \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n    \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n      \u003c!-- Textbereich --\u003e\n      \u003cdiv class=\"engraving-hero-text\"\u003e\n        \n\n        \u003ch1\u003eMehr als ein Schmuckstück – ein Urnen Herz voller Erinnerung mit persönlicher Gravur\u003c\/h1\u003e\n        \u003cdiv class=\"hero-subline\"\u003e\n  \u003cspan class=\"engraving-badge\"\u003e\n    \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n  \u003c\/span\u003e\n\n  \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n     \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n     Live-Vorschau ansehen\n  \u003c\/a\u003e\n\u003c\/div\u003e\n\n        \u003cp\u003e\n          Ein zeitloses Herz aus massivem Edelstahl – individuell graviert und geschaffen, um Gefühle für immer festzuhalten.\n        \u003c\/p\u003e\n\n        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n          Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n\n        \u003cdiv class=\"micro-trust-valentine\"\u003e\n          Sicher · Persönlich · Handgefertigt\n        \u003c\/div\u003e\n\n        \u003c!-- Trust Icons --\u003e\n        \u003cdiv class=\"engraving-trust\"\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e 316L Edelstahl \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 26 × 20 mm\u003c\/span\u003e\n          \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e ca. 15 g \u003c\/span\u003e\n           \u003cspan\u003e\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e Befüllbar \u003c\/span\u003e\n          \u003cspan\u003e \u003ci class=\"bi bi-box-seam\"\u003e\u003c\/i\u003e\u003cstrong\u003eLieferumfang:\u003c\/strong\u003e Herzanhänger, Kette \u0026amp; Füllset \u003c\/span\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"micro-trust-valentine\" style=\"\n    text-align: left; \"\u003e\n          Angeboten wird der Anhänger mit Kette und Füllwerkzeug.\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003c!-- Bildbereich --\u003e\n      \u003cdiv class=\"engraving-image\"\u003e\n        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/herz_urne_26.png?v=1770045625\" alt=\"Edelstahl Herzanhänger und Füllwerkzeug mit Gravur\"\u003e\n       \n      \u003c\/div\u003e\n  \n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     WHY HEART STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n  \u003cdiv class=\"container\"\u003e\n    \u003ch2\u003eWarum dieses Herz?\u003c\/h2\u003e\n    \u003cp\u003e\n      Dieser Herzanhänger ist mehr als ein Accessoire. Gefertigt aus langlebigem 316L Edelstahl, befüllbar mit einem persönlichen Inhalt\nund begleitet von einer passenden Kette – ein Symbol für Liebe, Erinnerung und Verbundenheit.\n    \u003c\/p\u003e\n\n    \u003cdiv class=\"engraving-why-grid\"\u003e\n      \n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n        \u003cp\u003eEdles Herzdesign aus poliertem 316L Stainless Steel. Robust, langlebig und angenehm zu tragen \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n        \u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Herz graviert, kostenlos.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n        \u003cp\u003eEin Herz, das Gefühle bewahrt. Ob als Erinnerung an einen geliebten Menschen, als Symbol tiefer Verbundenheit\noder als liebevolles Geschenk – dieser Herzanhänger trägt deine Geschichte ganz nah am Herzen.\n\u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n        \u003cp\u003eFein poliert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n  \n  \u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n        \u003cp\u003e\n          Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e  \n          nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n        \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n        \u003cp\u003e\n          Jede Gravur entsteht in unserem Familienbetrieb –  \n          \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n        \u003c\/p\u003e\n         \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"shipping-item\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n        \u003cp\u003e\n          Sichere Zahlung, persönlicher Support  \n          und höchste Qualitätskontrolle vor dem Versand.\n        \u003c\/p\u003e\n         \u003cp\u003eSollte etwas nicht passen, findest du mit uns\n        unkompliziert eine Lösung.  \u003c\/p\u003e\n        \n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\n  \u003c!-- FEATURES --\u003e\n  \u003csection class=\"engraving-section engraving-fade\"\u003e\n    \u003cdiv class=\"container engraving-hero-text\"\u003e\n      \u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n      \u003cp class=\"engraving-section-desc\"\u003e\n       Ein zeitloser Urnen Herzanhänger aus hochwertigem 316L Edelstahl – befüllbar, bedeutungsvoll und gemacht für besondere Momente.\n      \u003c\/p\u003e\n\n      \u003cdiv class=\"engraving-features\"\u003e\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n          \u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n          \u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n          \u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – \n    entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n          \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n         \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n  \u003cp\u003e\n    Zeitloses Design, persönliche Gravur – ein Schmuckstück, das Emotionen transportiert statt nur gut auszusehen.Ideal für Valentinstag, Jahrestag, Geburtstag oder als stille Erinnerung. \n  \u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"engraving-feature\"\u003e\n        \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n  \u003ch3\u003eWürde \u0026amp; Erinnerung\u003c\/h3\u003e\n  \u003cp\u003eEin hochwertiges Herz aus Edelstahl – dezent, gravierbar und dafür gemacht, emotionale Erinnerungen stilvoll und dauerhaft bei sich zu tragen.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n\n\n    \n  \u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n  \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n    \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n    \u003cdiv class=\"engraving-specs\"\u003e\n      \u003cul\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e 316L Edelstahl\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eInhalt:\u003c\/strong\u003e Befüllbar\u003c\/li\u003e\n   \u003cli\u003e   \u003ci class=\"bi bi-box-seam\"\u003e\u003c\/i\u003e\u003cstrong\u003eLieferumfang:\u003c\/strong\u003e Herzanhänger, Kette \u0026amp; Füllset   \u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 15 g\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eGröße:\u003c\/strong\u003e 26 × 20 mm\u003c\/li\u003e\n        \n       \n      \u003c\/ul\u003e\n\n      \u003cul\u003e\n         \u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Kette \u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-gender-female\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Dame\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n        \u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich \u0026amp; emotional\u003c\/li\u003e\n      \u003c\/ul\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n  \u003cspan class=\"engraving-badge visible-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n  \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n    \u003c!-- IMAGE --\u003e\n    \u003cdiv class=\"engraving-preview-image\"\u003e\n      \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/herz_urne_26_vergolet.png?v=1770046163\" alt=\"Edelstahl Herzanhänger mit Gravur\"\u003e\n\n      \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n       \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n  \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n  \u003cspan class=\"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      \u003cp class=\"engraving-preview-note\"\u003e\n  ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n\u003c\/p\u003e\n\n      \n    \u003c\/div\u003e\n\n    \u003c!-- CONTENT --\u003e\n    \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n      \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n      \u003c\/span\u003e\n\n      \u003ch2\u003eMach dieses Herz einzigartig\u003c\/h2\u003e\n      \u003cp\u003e\n        Gib deine gewünschte Gravur ein und sieh sofort,\n        wie dein persönlicher Herzanhänger Gestalt annimmt.\n      \u003c\/p\u003e\n\n      \u003c!-- INPUT --\u003e\n      \u003cdiv class=\"engraving-input-wrap\"\u003e\n        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n      \u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\u003e\n\u003cdiv class=\"engraving-symbol-picker\"\u003e\n  \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n      \u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n  \n\n  \u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n  \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n \n    \n  \u003c!-- SERIF --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n     \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n      Times New Roman\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n      Georgia\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n  \u003c!-- SANS --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n      Arial\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n      Helvetica\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- MONOSPACE --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n      Courier New\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n      Lucida Console\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- SCRIPT --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n      Allura\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n      Alex Brush\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n      Kaushan Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HANDWRITING --\u003e\n  \u003cdiv class=\"font-group\"\u003e\n    \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n    \u003cdiv class=\"font-group-buttons\"\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n      Pacifico\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n      Indie Flower\n    \u003c\/button\u003e\n    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n      Dancing Script\n    \u003c\/button\u003e\n  \u003c\/div\u003e \u003c\/div\u003e\n\n  \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n  \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n      \u003c!-- CTA --\u003e\n      \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n      \u003c\/button\u003e\n\n      \u003c!-- MICRO TRUST --\u003e\n      \u003cdiv class=\"engraving-micro-trust\"\u003e\n        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/section\u003e\n    \n\u003c!-- End Block --\u003e\n  \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n    \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n    \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n   \u003cp\u003e Handarbeit 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 \n  \u003c\/section\u003e\n\n\u003c\/div\u003e\n\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n  \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n    \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/herz_urne_26_vergolet.png?v=1770046163\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n   \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n     \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n    Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n  \u003c\/button\u003e\n\u003c\/div\u003e\n\n    \n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravur_Vorderseite_1\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\u003c\/script\u003e\n\n\n\n\n\n\n\n\n\n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet","offer_id":56794255851785,"sku":null,"price":69.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl","offer_id":56794255884553,"sku":null,"price":69.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/herz_urne_26_8d93306c-0e3a-42cf-9f4c-e05cf9f0fa30.png?v=1770045086"},{"product_id":"geldklammer-gravur-edelstahl","title":"Hochwertige Geldklammer aus Edelstahl inkl. kostenloser Gravur","description":"\u003cp\u003e \u003c\/p\u003e\n\u003c!-- SEO --\u003e\n\u003cp\u003e  \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\u003c\/p\u003e\n\u003c!-- Fonts --\u003e\n\u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n\u003c!-- Bootstrap Icons --\u003e\n\u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n\u003cstyle\u003e\n\/* ==============================\n   SCOPED PRODUCT STYLES\n   ============================== *\/\n.engraving-product {\n  font-family: 'Inter', sans-serif;\n  color: #111;\n}\n.engraving-product .container {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n.engraving-product .container2 {\n  max-width: 1200px;\n  width: 110%;\n  margin: 0 auto;\n  padding: 0 20px;\n}\n\n\/* HERO *\/\n.engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start;\n}\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n.engraving-badge i { font-size: 1.2rem; }\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n  line-height: 1.2;\n  margin-bottom: 20px;\n  color: #222;\n  font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n.engraving-cta {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  padding: 16px 40px;\n  background: #111;\n  color: #fff;\n  border-radius: 40px;\n  font-weight: 500;\n  transition: all .3s ease;\n}\n.engraving-cta:hover {\n  transform: translateY(-2px);\n  box-shadow: 0 20px 40px rgba(0,0,0,.2);\n}\n.engraving-trust {\n  margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n  color: #777;\n}\n.engraving-trust span {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n}\n.engraving-image {\n  display: flex;\n  align-items: flex-start;\n  justify-content: center;\n}\n.engraving-image img {\n  width: 140%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n}\n\n\/* HERO BILD MIT HOVER-WECHSEL (watch-image) *\/\n.engraving-product .watch-image {\n  position: relative;\n  display: flex;\n  justify-content: center;\n  align-items: flex-start;\n}\n.engraving-product .watch-image img {\n  width: 100%;\n  max-width: 550px;\n  object-fit: contain;\n  border-radius: 30px;\n  box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n  transition: opacity 0.4s ease;\n}\n.engraving-product .watch-image .watch-img-hover {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n  opacity: 0;\n}\n.engraving-product .watch-image:hover .watch-img-hover { opacity: 1; }\n.engraving-product .watch-image:hover .watch-img-primary { opacity: 0; }\n\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image { justify-content: center; }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n    margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n\/* SECTIONS *\/\n.engraving-section { padding: 40px 0; }\n.engraving-section h2 {\n  font-family: 'Playfair Display', serif;\n  font-size: 38px;\n  margin-bottom: 20px;\n}\n.engraving-section-desc {\n  max-width: 720px;\n  color: #666;\n  margin-bottom: 60px;\n}\n\n\/* FEATURES *\/\n.engraving-features {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n  gap: 40px;\n}\n\n\/* SPECS *\/\n.engraving-specs {\n  background: #fff;\n  border-radius: 30px;\n  padding: 50px;\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 40px;\n  box-shadow: 0 20px 50px rgba(0,0,0,.05);\n}\n.engraving-specs ul { list-style: none; padding: 0; }\n.engraving-specs li {\n  padding: 12px 0;\n  border-bottom: 1px solid #eee;\n  font-size: 15px;\n  display: flex;\n  gap: 10px;\n  align-items: center;\n}\n.engraving-specs i { color: #b6a573; }\n\n\/* CTA STRIP *\/\n.engraving-cta-strip {\n  background: linear-gradient(135deg, #111, #1c1c1c);\n  color: #fff;\n  padding: 80px 20px;\n  text-align: center;\n}\n.engraving-cta-strip h2 { color: #fff; margin-bottom: 20px; }\n.engraving-cta-strip p { color: #ccc; margin-bottom: 30px; }\n\n\/* ANIMATION *\/\n.engraving-fade {\n  opacity: 0;\n  transform: translateY(30px);\n  transition: 1s ease;\n}\n.engraving-fade.show {\n  opacity: 1;\n  transform: none;\n}\n\n@media (max-width: 900px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n}\n\n.engraving-collection-btn {\n  position: relative;\n  padding: 14px 28px;\n  background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n  color: rgb(255, 255, 255);\n  font-weight: 400;\n  font-size: 13px;\n  border-radius: 999px;\n  letter-spacing: .5px;\n  border: 1px solid rgba(220, 184, 75, 0.6);\n  cursor: pointer;\n  overflow: hidden;\n  box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n  transition: all .35s ease;\n}\n.engraving-collection-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n  color: #ffdd7a;\n}\n.engraving-collection-btn::before {\n  content: '';\n  position: absolute;\n  inset: -1px;\n  border-radius: inherit;\n  background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n  opacity: .45;\n  pointer-events: none;\n  animation: idleGlow 4.5s ease-in-out infinite;\n}\n.engraving-collection-btn::after {\n  content: '';\n  position: absolute;\n  inset: -120%;\n  background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n  opacity: 0;\n  transform: scale(.2);\n  pointer-events: none;\n}\n.engraving-collection-btn:hover::after {\n  animation: pulseGlow 1.1s ease-out forwards;\n}\n.engraving-collection-btn i { margin-left: 8px; }\n\n.micro-trust-valentine {\n  margin-top: 1.5rem;\n  font-size: 1.3rem;\n  color: #746742;\n  font-weight: 600;\n}\n\n\/* SPECS (Flex-Layout) *\/\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px;\n  flex-wrap: wrap;\n  margin-top: 30px;\n}\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  color: #555;\n  margin-bottom: 12px;\n}\n.engraving-specs ul li i {\n  color: #bfac79;\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n.engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    padding: 31px;\n  }\n  .engraving-specs ul { text-align: center; }\n}\n\n\/* SHIPPING \u0026 TRUST BLOCK *\/\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n  text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79;\n  margin-bottom: 18px;\n}\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n  .shipping-item { padding: 32px 22px; }\n}\n\n\/* WHY HEART STORY BLOCK *\/\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79;\n  margin-bottom: 16px;\n  display: inline-block;\n}\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n  margin-top: 10px;\n}\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n  .engraving-why-heart p { margin-bottom: 40px; }\n}\n\n\/* GRAVUR LIVE PREVIEW *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\/* Gravur-Studio: Vorderseite \/ Rückseite *\/\n    .jm-gk-sides {\n        display: grid;\n        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);\n        gap: 8px;\n        margin: 0 0 16px;\n        max-width: 420px;\n    }\n.jm-gk-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-gk-side em { font-style: normal; font-weight: 500; font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: #a89060; }\n.jm-gk-side small { font-size: 13px; font-weight: 600; color: #9a8a6a; min-height: 18px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n    .jm-gk-side {\n        min-width: 0;\n    }\n\n    .jm-gk-sum + .jm-gk-sum::before {\n        content: \" \/ \";\n    }\n\n    @media (max-width: 768px) {\n        \/* Mobile: Zeilen untereinander statt nebeneinander → nichts wird seitlich geschoben *\/\n        .jm-gk-side small {\n            white-space: normal;\n            text-overflow: clip;\n        }\n\n        .jm-gk-sum {\n            display: block;\n            overflow: hidden;\n            text-overflow: ellipsis;\n            white-space: nowrap;\n            line-height: 1.35;\n        }\n\n            .jm-gk-sum + .jm-gk-sum::before {\n                content: none;\n            }\n    }\n.jm-gk-side:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-gk-side.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-gk-side.filled small { color: #1a1410; }\n.jm-gk-side-label { position: absolute; top: 12px; left: 12px; z-index: 3; 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; pointer-events: none; }\n@media (max-width: 900px) { .jm-gk-sides { margin-left: auto; margin-right: auto; } }\n\/* 3 Zeilen je Seite *\/\n.jm-gk-line { display: grid; grid-template-columns: 78px 1fr; align-items: center; gap: 10px; max-width: 420px; margin-bottom: 8px; }\n.jm-gk-line-nr { font: 700 10px Inter, sans-serif; letter-spacing: 1px; text-transform: uppercase; color: #a89060; text-align: left; }\n.engraving-input-wrap .jm-gk-line input { width: 100%; }\n@media (max-width: 900px) { .jm-gk-line { margin-left: auto; margin-right: auto; } }\n\/* Zeile 2 + 3 unter Zeile 1 – Zeile 1 bleibt an ihrer Position *\/\n#engravingPreviewText { position: relative; display: inline-block; }\n#engravingPreviewText::after, .popup-preview-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% - 8px); transform: translateX(-50%);\n  white-space: pre; text-align: center; line-height: 1.15; font: inherit; color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n\/* ── GRAVUR-STUDIO: Position je Farbe + Seite (mit ?jmtweak=1 → Bereich „Gravur-Studio“ ermitteln) ──\n   Greift nur, wenn für die aktuelle Farbe\/Seite Werte gesetzt sind – sonst bleibt das bisherige Layout.\n   Beispiel:\n   .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] { --st-x: 50%; --st-y: 55%; --st-rot: 0deg; --st-size: 8; }\n   Mobile-Popup:\n   @media (max-width: 768px) { #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] { … } } *\/\n.engraving-preview-image.jm-st-pos, #engraving-mobile-popup .popup-preview.jm-st-pos { container-type: inline-size; }\n.engraving-preview-image.jm-st-pos { width: 100%; }\n    \/* Häkchen aus dem Textfluss nehmen → Zeile 1 springt nicht, wenn es erscheint *\/\n    .engraving-preview-text-wrap .preview-check {\n        position: absolute;\n        left: 100%;\n        top: 50%;\n        margin: 0 0 0 6px;\n        transform: translateY(-50%) scale(0.6);\n        transform-origin: left center;\n    }\n\n        .engraving-preview-text-wrap .preview-check.show {\n            transform: translateY(-50%) scale(1);\n        }\n.jm-st-pos .engraving-overlay { display: block; padding: 0; }\n.engraving-preview-image.jm-st-pos .engraving-preview-text-wrap,\n#engraving-mobile-popup .popup-preview.jm-st-pos .popup-preview-text-wrap {\n  position: absolute; left: var(--st-x, 50%); top: var(--st-y, 50%); right: auto; bottom: auto; margin: 0;\n  transform: translate(-50%, -50%) rotate(var(--st-rot, 0deg)); display: block; white-space: nowrap;\n}\n.jm-st-pos #engravingPreviewText, .jm-st-pos .popup-preview-text {\n  position: relative; top: auto; left: auto; transform: none; padding: 0 !important;\n  font-size: calc(var(--st-size, 8) * 1cqw) !important; letter-spacing: var(--st-ls, 0.08em); opacity: var(--st-op, 1);\n}\n.jm-st-pos #engravingPreviewText::after, .jm-st-pos .popup-preview-text::after {\n  top: calc(100% + var(--st-gap, 0em)); line-height: var(--st-lh, 1.15); transform: translateX(calc(-50% + var(--st-rdx, 0em)));\n}\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n}\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 3rem;\n  letter-spacing: 0.08em;\n  color: rgb(186 186 186 \/ 94%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(1px);\n}\n.engraving-preview-content h2 {\n  font-size: 2.1rem;\n  margin-bottom: 12px;\n  color: #4b2f2f;\n  font-weight: 600;\n  margin-top: 25px;\n}\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select { margin-bottom: 18px; }\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n.engraving-input-wrap input {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n.engraving-input-wrap input:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n  .engraving-preview-image { margin: 0 auto; }\n}\n\n\/* SYMBOL PICKER *\/\n.engraving-symbol-picker { margin-bottom: 22px; }\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n.symbol-btn:active {\n  transform: scale(1.05);\n  background: #d7bf78;\n}\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n\/* FONT PICKER *\/\n.engraving-font-select { margin-bottom: 22px; }\n.engraving-font-picker { margin-bottom: 28px; }\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n}\n.font-group { margin-bottom: 16px; }\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem;\n  transition: all 0.25s ease;\n}\n.font-btn.script { font-size: 1.2rem; }\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\n@media (max-width: 640px) {\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n    padding-bottom: 12px;\n  }\n  .font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 8px;\n  }\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    white-space: nowrap;\n    line-height: 1;\n  }\n  .font-btn.script { font-size: 1rem; }\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr);\n    gap: 10px;\n  }\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    border-radius: 10px;\n  }\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px;\n  }\n}\n\n\/* LIVE PREVIEW LINK *\/\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n\/* LUXURY SHINE BUTTON *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n  margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  padding: 5px 12px;\n  border-radius: 999px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  color: #e6d3a3;\n  background: linear-gradient(180deg, #141414, #0d0d0d);\n  border: 1px solid rgba(201,168,92,0.45);\n  overflow: hidden;\n  isolation: isolate;\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow: 0 8px 20px rgba(0,0,0,0.35), 0 0 0 1px rgba(201,168,92,0.35);\n}\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n  width: 60%;\n  height: 220%;\n  background: linear-gradient(120deg, transparent 0%, rgba(255,255,255,0.0) 35%, rgba(255,214,130,0.65) 50%, rgba(255,255,255,0.0) 65%, transparent 100%);\n  transform: skewX(-20deg);\n  opacity: 0.9;\n  animation: goldLaser 3s ease-in-out infinite;\n}\n@keyframes goldLaser {\n  0% { left: -120%; }\n  55% { left: 140%; }\n  100% { left: 140%; }\n}\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(circle at center, rgba(255,215,160,0.35), transparent 70%);\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n.luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n.luxury-rose::before {\n  background: linear-gradient(120deg, transparent 0%, rgba(255,220,210,0.0) 35%, rgba(255,190,170,0.7) 50%, rgba(255,220,210,0.0) 65%, transparent 100%);\n}\n.luxury-rose i {\n  color: #e0a88c;\n  font-size: 1.1em;\n}\n@media (max-width: 768px) {\n  .luxury-shine-btn::before { animation-duration: 2.4s; }\n}\n\n\/* PREVIEW EFFEKTE *\/\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n.engraving-preview-image.pulse { animation: engravingPulse 0.6s ease-out; }\n\n.engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  bottom: 64px;\n  left: 27px;\n \n}\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n.engrave-fade { animation: engraveFade 0.9s ease-out; }\n@keyframes engraveFade {\n  0% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n  40% { text-shadow: 0 0 6px rgba(191, 172, 121, 0.45), 0 0 14px rgba(191, 172, 121, 0.25); }\n  100% { text-shadow: 0 0 0 rgba(191, 172, 121, 0); }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n  animation: fadeInSoft 0.6s ease-out both;\n}\n@keyframes fadeInSoft {\n  from { opacity: 0; transform: translateY(-2px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\/* MOBILE POPUP *\/\n#engraving-mobile-popup {\n  display: block;\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n.popup-preview-check {\n  position: absolute;\n  top: -15px;\n  left: 65px;\n  font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n.popup-preview-check.show { opacity: 1; }\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n@media (max-width: 769px) {\n  .engraving-overlay {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n  }\n  .engraving-overlay span {\n    font-family: \"Playfair Display\", serif;\n    font-size: 1.8rem;\n    letter-spacing: 0.08em;\n    color: rgb(217 217 217 \/ 71%);\n    text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n  }\n  .engraving-preview-text-wrap {\n    position: relative;\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    bottom: 80px;\n    right: 24px;\n  }\n  .popup-preview-text-wrap {\n    position: absolute;\n    top: 42%;\n    left: 50%;\n    white-space: nowrap;\n    display: block;\n    \n  }\n}\n\n\/* HERO SUBLINE *\/\n.hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline { justify-content: center; }\n  .luxury-shine-btn { margin-top: 6px; }\n}\n\n\/* MASSE JE VARIANTE *\/\n.ring-size-visual {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  flex-wrap: wrap;\n  margin: 24px 0;\n}\n.ring-size {\n  width: 150px;\n  height: 72px;\n  border: 2px solid #2c2c2c;\n  border-radius: 10px;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  font-family: Helvetica, Arial, sans-serif;\n  background: #fff;\n  text-align: center;\n  box-shadow: 0 6px 14px rgba(0,0,0,0.08);\n}\n.ring-size .size {\n  font-size: 14px;\n  font-weight: 700;\n  margin-bottom: 2px;\n}\n.ring-size .diameter {\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.1;\n}\n.ring-size .circumference {\n  font-size: 11px;\n  color: #666;\n  margin-top: 3px;\n}\n@media (max-width: 768px) {\n  .ring-size-visual {\n    gap: 10px;\n    margin: 5px 0;\n  }\n  .ring-size {\n    width: 130px;\n    height: 68px;\n    border-width: 1.5px;\n    box-shadow: 0 4px 10px rgba(0,0,0,0.07);\n  }\n  .ring-size .size { font-size: 13px; margin-bottom: 1px; }\n  .ring-size .diameter { font-size: 11.5px; line-height: 1.1; }\n  .ring-size .circumference { font-size: 10px; margin-top: 2px; margin-bottom: 7px; }\n}\n\n\/* VORHER \/ NACHHER SLIDER *\/\n.before-after-image--container {\n  display: block;\n  position: relative;\n  width: 80%;\n  max-width: 450px;\n  margin: 20px auto;\n  border-radius: 10px;\n  overflow: hidden;\n  box-shadow: 0 8px 20px rgb(0 0 0 \/ 72%);\n  transition: transform 0.3s ease;\n}\n.before-after-image--container:hover { transform: scale(1.02); }\n@media screen and (max-width: 767px) {\n  .before-after-image--image { height: auto !important; }\n}\n.slider-hint {\n  position: absolute;\n  top: 75px;\n  left: 50%;\n  transform: translateX(-50%);\n  background: rgba(255,255,255,0.95);\n  padding: 6px 14px;\n  border-radius: 20px;\n  font-size: 1.2rem;\n  font-weight: 500;\n  color: #111;\n  letter-spacing: 0.02em;\n  pointer-events: none;\n  z-index: 10;\n  animation: pulse 1.5s infinite;\n  transition: opacity 0.3s ease;\n}\n@keyframes pulse {\n  0% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n  50% { transform: translate(-50%, -150%) scale(1.1); opacity: 0.6; }\n  100% { transform: translate(-50%, -150%) scale(1); opacity: 1; }\n}\n.before-after-image--media {\n  display: block;\n  position: relative;\n  overflow: hidden;\n}\n.before-after-image--image img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n.before-after-image--2 {\n  clip-path: inset(0px 0px 0px var(--percent));\n  position: absolute;\n  z-index: 3;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n}\n.before-after-image--slider {\n  position: absolute;\n  top: 50%;\n  width: 100%;\n  left: 0;\n  z-index: 40;\n  transform: translateY(-50%);\n  opacity: 0;\n  height: 54px;\n  cursor: pointer;\n  margin-top: 10px;\n}\n.before-after-image--divider {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 10;\n  width: 2px;\n  left: calc(var(--percent) - 1px);\n  background: var(--color-line, --bg-body);\n  box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25);\n}\n.before-after-image--divider svg {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate3d(-50%, -50%, 0);\n  z-index: 20;\n  border-radius: 20px;\n  box-shadow: 0px 1px 6px rgba(0, 0, 0, 0.1);\n  cursor: pointer;\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\u003c\/style\u003e\n\n\u003cdiv class=\"engraving-product\"\u003e\n\u003c!-- =========================\n     HERO: Edelstahl Geldklammer\n========================== --\u003e\n\u003csection class=\"engraving-hero engraving-fade show\"\u003e\n\u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n\u003cdiv class=\"engraving-hero-grid\"\u003e\n\u003c!-- Textbereich --\u003e\n\u003cdiv class=\"engraving-hero-text\"\u003e\n\u003ch1\u003eHochwertige Geldklammer aus Edelstahl inkl. kostenloser Gravur\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 \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e Live-Vorschau ansehen \u003c\/a\u003e\n\u003c\/div\u003e\n\u003cp\u003eElegante Geldklammer aus hochwertigem Edelstahl …Schlicht. Stark. Stilvoll – in deiner Farbe.\u003c\/p\u003e\n\u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003cdiv class=\"micro-trust-valentine\"\u003eSicher · Persönlich · Handgefertigt\u003c\/div\u003e\n\u003c!-- Trust Icons --\u003e\n\u003cdiv class=\"engraving-trust\"\u003e\n\u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Hochwertiger Edelstahl \u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e fein mattiert\u003c\/span\u003e \u003cspan\u003e \u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eDicke:\u003c\/strong\u003e ca. 0,6 – 1,0 mm\u003c\/span\u003e \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e 3 Farbvarianten erhältlich\u003c\/span\u003e\n\u003cdiv class=\"\" style=\"margin-top: 25px;\"\u003e\n\u003ch2 style=\"font-size: 1.8rem; font-weight: bold; margin-bottom: 16px; color: #1f2a2a;\"\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003eMaße je Variante:\u003c\/h2\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size-visual\"\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eVergoldet\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e5,20 × 2,00 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: 0,8 cm · ca. 12,7 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eSchwarz matt\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e6,5 × 3,0 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: 1,0 cm · ca. 19,5 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eStahl matt\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e5,0 × 2,0 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: ca. 0,6cm · ca. 11,9g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"engraving-preview-note\"\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Hinweis: Maße können je Variante leicht abweichen.\u003c\/p\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  \n\u003c!-- Bildbereich --\u003e\n\u003cdiv class=\"watch-image\"\u003e\n\u003cimg class=\"watch-img-primary\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Geldklammer_gesamt.png?v=1770224865\" alt=\"Edelstahl Geldklammer mit Gravur\"\u003e \u003cimg class=\"watch-img-hover\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Geldklammer_Edelstahl_cde4e552-6b52-4990-81de-806c738911ac.png?v=1770225723\" alt=\"Edelstahl Geldklammer mit Gravur\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\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 bi-award\"\u003e\u003c\/i\u003e\n                \u003cspan\u003eFamilienunternehmen 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\u003c!-- =========================\n     WHY STORY BLOCK\n========================== --\u003e\n\u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n\u003cdiv class=\"container\"\u003e\n\u003ch2\u003eWarum dieser Geldklammer? Erinnerungen in der Hand.\u003c\/h2\u003e\n\u003cp\u003eVeredle deinen Geldklammer mit Initialen, einem Namen oder einer kurzen Botschaft – ein einzigartiges Accessoire oder das perfekte Geschenk für besondere Menschen.\u003c\/p\u003e\n\u003cdiv class=\"engraving-why-grid\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n\u003cp\u003eEdelstahl, der robust, glänzend und hypoallergen ist – für ein Leben lang.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eDeine Botschaft, Initialen oder ein Datum – direkt auf das Motiv graviert, kostenlos.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n\u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n\u003cp\u003eWeniger ist mehr. Diese hochwertige Geldklammer aus Edelstahl steht für Klarheit, Stil und Persönlichkeit. Mit einer individuellen Gravur wird sie zu einem täglichen Begleiter – diskret, bedeutungsvoll und perfekt als Geschenk für Menschen, die Wert auf Qualität und Ausdruck legen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n\u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n\u003cp\u003eFein mattiert, klare Linien, elegante Optik – ein echtes Premium-Schmuckstück.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SHIPPING \u0026 TRUST BLOCK\n========================== --\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\n\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\n\u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n\u003cp\u003eJede Gravur entsteht in unserem Familienbetrieb – \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\u003c\/p\u003e\n\u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"shipping-item\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n\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\u003cp\u003eSollte etwas nicht passen, findest du mit uns unkompliziert eine Lösung.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003cdiv class=\"before-after-image section-spacing\" style=\"--percent: 46.8%; --color-line: #dcbc5a;\"\u003e\n\u003cdiv class=\"row full-width-row\"\u003e\n\u003cdiv class=\"small-12 columns\"\u003e\n\u003cdiv class=\"section-header section-header-left--false\"\u003e\n\u003cdiv class=\"section-header--content\"\u003e\u003ccenter\u003e\n\u003ch2 class=\"h3\" style=\"font-weight: 600;\"\u003eDeine Vision. Unser Handwerk. 3D Gravuren\u003c\/h2\u003e\n\u003c\/center\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ccenter\u003e\n\u003cdiv class=\"responsive before-after-image--container\"\u003e\n\u003c!-- Vorher --\u003e\n\u003cdiv class=\"before-after-image--media before-after-image--1\" style=\"--color-body: #151515; --overlay-opacity: 0.0;\"\u003e\n\u003cdiv class=\"before-after-image--image mobile-height-450 desktop-height-550\" style=\"--image-aspect: 1.0;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Fotogravur_before.jpg?v=1699821284\" alt=\"Fotogravur Vorher\" style=\"object-position: 50% 50%; position: relative;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Nachher --\u003e\n\u003cdiv class=\"before-after-image--media before-after-image--2\" style=\"--color-body: #151515; --overlay-opacity: 0.0;\"\u003e\n\u003cdiv class=\"before-after-image--image mobile-height-450 desktop-height-550\" style=\"--image-aspect: 1.0;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Fotogravur_after.jpg?v=1699821284\" alt=\"Fotogravur Nachher\" style=\"object-position: 50% 50%; position: relative;\"\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- Divider \/ Linie --\u003e\n\u003cdiv class=\"before-after-image--divider\"\u003e\u003csvg width=\"40\" height=\"54\" viewbox=\"0 0 40 54\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\u003e\n              \u003crect width=\"40\" height=\"54\" rx=\"20\" fill=\"var(--color-line, --bg-body)\"\u003e\u003c\/rect\u003e\n              \u003crect x=\"14\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n              \u003crect x=\"19.2173\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n              \u003crect x=\"24.4348\" y=\"20\" width=\"1.56522\" height=\"14\" rx=\"0.782609\" fill=\"var(--color-accent)\"\u003e\u003c\/rect\u003e\n            \u003c\/svg\u003e\u003c\/div\u003e\n\u003c!-- Slider --\u003e \u003cinput type=\"range\" min=\"0\" max=\"100\" value=\"46.8\" class=\"before-after-image--slider\" id=\"beforeAfterSlider\"\u003e\n\u003cdiv id=\"sliderHint\" class=\"slider-hint\"\u003e\n\u003cspan class=\"bi bi-arrow-left-circle\"\u003e\u003c\/span\u003e Swipe \u003cspan class=\"bi bi-arrow-right-circle\"\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/center\u003e\n\u003cdiv class=\"section-header section-header-left--false\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FEATURES --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n\u003cdiv class=\"container engraving-hero-text\"\u003e\n\u003ch1\u003eMehr als eine Geldklammer\u003c\/h1\u003e\n\u003cp class=\"engraving-section-desc\"\u003eDiese elegante Geldklammer aus hochwertigem Edelstahl steht für Stil, Ordnung und Persönlichkeit. Kompakt, robust und mit individueller Gravur wird sie zu einem täglichen Begleiter mit Bedeutung – für Menschen, die Wert auf klare Linien und Qualität legen.\u003c\/p\u003e\n\u003cdiv class=\"engraving-features\"\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n\u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n\u003cp\u003eKostenlose Personalisierung mit Initialen, Datum oder Botschaft.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n\u003ch3\u003eHochwertiges Edelstahl\u003c\/h3\u003e\n\u003cp\u003eHochwertig verarbeitet, langlebig und formstabil – entwickelt für Gravuren, die ein Leben lang halten.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n\u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n\u003cp\u003eZeitloses Design, persönliche Gravur – Stilvolles Geschenk für Männer \u0026amp; Frauen\u003c\/p\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"engraving-feature\"\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n\u003ch3\u003eElegant \u0026amp; Zeitlos\u003c\/h3\u003e\n\u003cp\u003eSchlichtes Design aus hochwertigem Edelstahl – ein klares Statement für Stil, Charakter und zeitlose Eleganz im Alltag.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     SPECS SECTION\n========================== --\u003e\n\u003csection class=\"engraving-section engraving-fade\"\u003e\n\u003cdiv class=\"container2 engraving-hero-text\"\u003e\n\u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\u003cdiv class=\"engraving-specs\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaße je Variante:\u003c\/strong\u003e\n\u003cdiv class=\"ring-size-visual\"\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eVergoldet\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e5,20 × 2,07 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: 0,8 cm · ca. 12,7 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eSchwarz matt\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e6,5 × 3,0 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: 1,0 cm · ca. 19,5 g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"ring-size\"\u003e\n\u003cspan class=\"size\"\u003eStahl matt\u003c\/span\u003e \u003cspan class=\"diameter\"\u003e5,0 × 2,0 cm\u003c\/span\u003e \u003cspan class=\"circumference\"\u003eHöhe: ca. 0,6cm · ca. 11,9g\u003c\/span\u003e\n\u003c\/div\u003e\n\u003cp class=\"engraving-preview-note\"\u003e\u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e Hinweis: Maße können je Variante leicht abweichen.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e \u003cstrong\u003eFinish:\u003c\/strong\u003e Vergoldet · Schwarz matt · Stahl matt\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e \u003cstrong\u003eDesign:\u003c\/strong\u003e Schlichte Geldklammer mit Gravur\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Unisex\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eText-Gravur:\u003c\/strong\u003e Kostenlos\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Stilvoll \u0026amp; persönlich\u003c\/li\u003e\n\u003cli\u003e\n\u003ci class=\"bi bi-arrows-expand\"\u003e\u003c\/i\u003e \u003cstrong\u003eDicke:\u003c\/strong\u003e ca. 0,6 – 1,0 mm\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- =========================\n     GRAVUR LIVE PREVIEW\n========================== --\u003e\n\u003csection class=\"engraving-preview-section engraving-fade\"\u003e\u003cspan class=\"engraving-badge visible-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003cdiv class=\"engraving-preview-grid\"\u003e\n\u003c!-- IMAGE --\u003e\n\u003cdiv class=\"engraving-preview-image\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/geldklammer_vergoldet_13661027-0fba-48fc-8fb3-cf6453be971c.png?v=1770226234\" alt=\"Edelstahl Geldklammer ohne Gravur\"\u003e\n\u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n\u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e \u003cspan class=\"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\u003cp class=\"engraving-preview-note\"\u003e✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c!-- CONTENT --\u003e\n\u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\u003cspan class=\"engraving-badge hidden-xs\"\u003e \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau \u003c\/span\u003e\n\u003ch2\u003eMach diesen Geldklammer einzigartig\u003c\/h2\u003e\n\u003cp\u003eGib deine gewünschte Gravur ein und sieh sofort, wie dein persönlicher Geldklammer Gestalt annimmt.\u003c\/p\u003e\n\u003c!-- VORDERSEITE \/ RÜCKSEITE --\u003e\n\u003cdiv class=\"jm-gk-sides\" role=\"tablist\" aria-label=\"Gravurseite wählen\"\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side active\" data-side=\"front\" role=\"tab\" aria-selected=\"true\"\u003eVorderseite\u003csmall id=\"jm-gk-side-front\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003cbutton type=\"button\" class=\"jm-gk-side\" data-side=\"back\" role=\"tab\" aria-selected=\"false\"\u003eRückseite \u003cem\u003eoptional\u003c\/em\u003e\u003csmall id=\"jm-gk-side-back\"\u003e–\u003c\/small\u003e\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c!-- INPUT --\u003e\n\u003cdiv class=\"engraving-input-wrap\"\u003e\n\u003clabel for=\"engravingInput\" id=\"jmGkInputLabel\"\u003eGravur Vorderseite\u003c\/label\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e1 · oben\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e2 · Mitte\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput2\" maxlength=\"11\" placeholder=\"z. B. Für immer\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"jm-gk-line\"\u003e\n\u003cspan class=\"jm-gk-line-nr\"\u003e3 · unten\u003c\/span\u003e\u003cinput type=\"text\" id=\"engravingInput3\" maxlength=\"11\" placeholder=\"z. B. 12.06.24\" autocomplete=\"off\"\u003e\n\u003c\/div\u003e\n\u003csmall\u003eJe Zeile max. 11 Zeichen · Zahlen \u0026amp; Symbole möglich · Zeilen 2 + 3 optional\u003c\/small\u003e\n\u003c\/div\u003e\n\u003c!-- SYMBOL PICKER --\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 \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"∞\"\u003e∞\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"★\"\u003e★\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"✝\"\u003e✝\u003c\/button\u003e \u003cbutton type=\"button\" class=\"symbol-btn\" data-symbol=\"❥\"\u003e❥\u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- FONT SELECT --\u003e\n\u003cdiv class=\"engraving-font-select\"\u003e\n\u003c!-- =========================\n     FONT PICKER (BUTTONS)\n========================== --\u003e\n\u003cdiv class=\"engraving-font-picker\"\u003e\n\u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e \u003c!-- SERIF --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family: 'Times New Roman';\"\u003e Times New Roman \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family: Georgia;\"\u003e Georgia \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SANS --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family: Arial;\"\u003e Arial \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family: Helvetica;\"\u003e Helvetica \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- MONOSPACE --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family: 'Courier New';\"\u003e Courier New \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family: 'Lucida Console';\"\u003e Lucida Console \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- SCRIPT --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family: 'Allura';\"\u003e Allura \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family: 'Alex Brush';\"\u003e Alex Brush \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family: 'Kaushan Script';\"\u003e Kaushan Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HANDWRITING --\u003e\n\u003cdiv class=\"font-group\"\u003e\n\u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n\u003cdiv class=\"font-group-buttons\"\u003e\n\u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family: 'Pacifico';\"\u003e Pacifico \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family: 'Indie Flower';\"\u003e Indie Flower \u003c\/button\u003e \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family: 'Dancing Script';\"\u003e Dancing Script \u003c\/button\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!-- CTA --\u003e \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e \u003c!-- MICRO TRUST --\u003e\n\u003cdiv class=\"engraving-micro-trust\"\u003e\n\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/section\u003e\n\u003c!-- End Block --\u003e\n\u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\u003ci class=\"bi bi-stars\" style=\"font-size: 6rem; color: #c0a860;\"\u003e\u003c\/i\u003e\n\u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n\u003cp\u003eEin Schmuckstück, 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\u003c\/section\u003e\n\u003c!-- Mobile Popup Vorschau --\u003e\n\u003cdiv id=\"engraving-mobile-popup\"\u003e\n\u003cdiv class=\"popup-preview\" style=\"position: relative; margin-bottom: 10px;\"\u003e\n\u003cspan class=\"jm-gk-side-label\" id=\"jmGkPopupSideLabel\"\u003eVorderseite\u003c\/span\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/geldklammer_vergoldet_13661027-0fba-48fc-8fb3-cf6453be971c.png?v=1770226234\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width: 100%;\"\u003e\n\u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n\u003cdiv class=\"popup-preview-text-wrap\"\u003e\n\u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\u003e \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 js-scroll-to-form\" data-target=\"#product-form\"\u003e Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e \u003c\/button\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravur_Vorderseite_1\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      \/* Gravur-Studio: Vorder- und Rückseite je 3 Zeilen übernehmen (nur Seiten mit Inhalt) *\/\n      const gkSides = window.jmGkSides;\n      if (gkSides) {\n        gkSides.save \u0026\u0026 gkSides.save();\n        const studioFont = previewText ? window.getComputedStyle(previewText).fontFamily : \"\";\n        [[\"front\", \"Vorderseite\"], [\"back\", \"Rückseite\"]].forEach(([k, seite]) =\u003e {\n          if (!gkSides.has(k)) return;\n          gkSides[k].forEach((val, n) =\u003e {\n            const f = document.getElementById(\"gravur_\" + seite + \"_\" + (n + 1));\n            if (!f) return;\n            f.value = val.trim();\n            if (studioFont) f.style.fontFamily = studioFont;\n            f.dispatchEvent(new Event(\"input\", { bubbles: true }));\n          });\n        });\n      }\n      if (gravurInput \u0026\u0026 previewText \u0026\u0026 !gkSides) {\n        gravurInput.value = previewText.textContent.trim();\n        gravurInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n      }\n      if (gravurInput \u0026\u0026 previewText) {\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n        const back3 = document.querySelector(\"#gravurtext_3\");\n        if (back3) back3.style.fontFamily = fontFamily;\n        const back4 = document.querySelector(\"#gravurtext_4\");\n        if (back4) back4.style.fontFamily = fontFamily;\n        const back5 = document.querySelector(\"#gravurtext_5\");\n        if (back5) back5.style.fontFamily = fontFamily;\n        const back6 = document.querySelector(\"#gravurtext_6\");\n        if (back6) back6.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n      const back3 = document.getElementById(\"gravurtext_3\");\n      if (back3) back3.style.fontFamily = font;\n      const back4 = document.getElementById(\"gravurtext_4\");\n      if (back4) back4.style.fontFamily = font;\n      const back5 = document.getElementById(\"gravurtext_5\");\n      if (back5) back5.style.fontFamily = font;\n      const back6 = document.getElementById(\"gravurtext_6\");\n      if (back6) back6.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n}); \n\n     const slider = document.getElementById('beforeAfterSlider');\nconst after = document.querySelector('.before-after-image--2');\nconst divider = document.querySelector('.before-after-image--divider');\nconst hint = document.getElementById('sliderHint');\nconst section = document.querySelector('.before-after-image');\nlet hintTimeout;\n\nconst START_PERCENT = 46.8; \/\/ initialer Wert\nconst RANGE = slider.max - slider.min;\n\n\/\/ Initialwert setzen\nslider.value = START_PERCENT;\n\n\/\/ Funktion: aktualisiert Nachher-Clip, Divider und Hint\nfunction updateBeforeAfter() {\n  const percent = slider.value;\n  \n  \/\/ Nachher-Bild clip\n  after.style.clipPath = `inset(0% 0% 0% ${percent}%)`;\n  \n  \/\/ Divider Position\n  divider.style.left = `calc(${percent}% - ${divider.offsetWidth\/2}px)`;\n  \n  \/\/ Sliderhint Position\n  const sliderRect = slider.getBoundingClientRect();\n  const handlePosition = ((percent - slider.min) \/ RANGE) * sliderRect.width;\n  hint.style.left = `${handlePosition}px`;\n}\n\n\/\/ Slider Event\nslider.addEventListener('input', () =\u003e {\n  updateBeforeAfter();\n  \n  \/\/ Hint ein- und ausblenden\n  hint.style.opacity = '0';\n  clearTimeout(hintTimeout);\n  hintTimeout = setTimeout(() =\u003e { hint.style.opacity = '1'; }, 5000);\n});\n\n\/\/ Scroll-to-Swipe (optional)\nwindow.addEventListener('scroll', () =\u003e {\n  const rect = section.getBoundingClientRect();\n  const windowHeight = window.innerHeight;\n\n  if (rect.top \u003c windowHeight \u0026\u0026 rect.bottom \u003e 0) {\n    const scrollProgress = Math.min(Math.max(0, 1 - rect.bottom \/ (rect.height + windowHeight)), 1);\n    const newValue = START_PERCENT * (1 - scrollProgress);\n    slider.value = newValue;\n    updateBeforeAfter();\n  }\n});\n\n\/\/ Initial\nupdateBeforeAfter();\nhint.style.opacity = '1';\n\u003c\/script\u003e\n\n\u003cscript\u003e\n\/* =========================\n   GRAVUR-STUDIO: VORDERSEITE \/ RÜCKSEITE · je 3 Zeilen (oben \/ Mitte \/ unten)\n   (Ergänzung – nutzt das vorhandene Eingabefeld #engravingInput als Zeile 1)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const lineInputs = [\"engravingInput\", \"engravingInput2\", \"engravingInput3\"].map(id =\u003e document.getElementById(id));\n  const input = lineInputs[0];\n  const tabs  = document.querySelectorAll(\".jm-gk-side\");\n  if (!input || !tabs.length) return;\n\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay     = document.getElementById(\"engravingOverlay\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText   = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-text\");\n  const studioImg   = document.getElementById(\"engravingProductImage\");\n  const popupImg    = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview-image\");\n\n  const LABEL = { front: \"Vorderseite\", back: \"Rückseite\" };\n  const S = window.jmGkSides = { front: [\"\", \"\", \"\"], back: [\"\", \"\", \"\"], side: \"front\" };\n  let focused = input;\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"focus\", () =\u003e { focused = i; }));\n\n  S.has  = k =\u003e S[k].some(v =\u003e v.trim());\n  S.save = function () { S[S.side] = lineInputs.map(i =\u003e i ? i.value : \"\"); renderTabs(); };\n\n  function renderTabs() {\n    [\"front\", \"back\"].forEach(k =\u003e {\n      const sm = document.getElementById(\"jm-gk-side-\" + k);\n        if (sm) {\n            \/* jede Zeile als eigenes Element → Desktop: „a \/ b \/ c“, Mobile: untereinander *\/\n            const filled = S[k].filter(v =\u003e v.trim());\n            sm.textContent = \"\";\n            if (!filled.length) sm.textContent = \"–\";\n            filled.forEach(v =\u003e {\n                const el = document.createElement(\"span\");\n                el.className = \"jm-gk-sum\";\n                el.textContent = v.trim();\n                sm.appendChild(el);\n            });\n        }\n      const b = document.querySelector('.jm-gk-side[data-side=\"' + k + '\"]');\n      if (b) b.classList.toggle(\"filled\", S.has(k));\n    });\n  }\n\n  \/* Vorschau: Zeile 1 im Text, Zeile 2 + 3 darunter (data-rest) *\/\n  function restOf(l) { return l[2].trim() ? (l[1] + \"\\n\" + l[2]) : l[1]; }\n  function render(openPopup) {\n    const l = S[S.side];\n    const any = l.some(v =\u003e v.trim());\n    [previewText, popupText].forEach(el =\u003e {\n      if (!el) return;\n      if (any) el.textContent = l[0] || \"\\u00A0\";\n      el.setAttribute(\"data-rest\", any ? restOf(l) : \"\");\n    });\n    if (overlay) overlay.classList.toggle(\"active\", any);\n    if (openPopup \u0026\u0026 any \u0026\u0026 mobilePopup \u0026\u0026 window.innerWidth \u003c= 768) mobilePopup.classList.add(\"show\");\n  }\n\n  \/* ── Bilder je Seite + Farbe (Alt-Text „Vorderseite Vergoldet“, „Rückseite Stahl matt“ …) ── *\/\n  const IMG = {};                \/* variantId → { front, back } *\/\n  const TITLES = {};             \/* variantId → slug (vergoldet, schwarz-matt …) *\/\n  const studioBox = document.querySelector(\".engraving-preview-image\");\n  const popupBox  = mobilePopup \u0026\u0026 mobilePopup.querySelector(\".popup-preview\");\n  function slug(t) {\n    return String(t || \"\").toLowerCase().replace(\/ä\/g, \"ae\").replace(\/ö\/g, \"oe\").replace(\/ü\/g, \"ue\").replace(\/ß\/g, \"ss\")\n      .replace(\/[^a-z0-9]+\/g, \"-\").replace(\/^-|-$\/g, \"\");\n  }\n  \/* Farbe + Seite an Studio-Bild und Popup schreiben → CSS-Regeln je Farbe\/Seite greifen *\/\n  function markStudio() {\n    [studioBox, popupBox].forEach(box =\u003e {\n      if (!box) return;\n      box.dataset.side = S.side;\n      box.dataset.variant = TITLES[currentVariant()] || \"\";\n      const v = getComputedStyle(box).getPropertyValue(\"--st-x\").trim();\n      box.classList.toggle(\"jm-st-pos\", !!v || !!box.style.getPropertyValue(\"--st-x\"));\n    });\n  }\n  const FALLBACK = studioImg ? studioImg.getAttribute(\"src\") : \"\";\n  let want = \"\";\n  function imgUrl(src) {\n    if (!src) return \"\";\n    if (src.indexOf(\"\/\/\") === 0) src = \"https:\" + src;\n    return src + (src.indexOf(\"?\") \u003e -1 ? \"\u0026\" : \"?\") + \"width=900\";\n  }\n  function currentVariant() {\n    const f = document.querySelector('form[action*=\"\/cart\/add\"] [name=\"id\"]');\n    return f ? String(f.value) : \"\";\n  }\n  function applyImage() {\n    markStudio();\n    const m = IMG[currentVariant()] || {};\n    const url = m[S.side] || (S.side === \"back\" ? FALLBACK : \"\") || \"\";\n    if (!url) return;\n    want = url;\n    [studioImg, popupImg].forEach(img =\u003e { if (img \u0026\u0026 img.getAttribute(\"src\") !== url) img.src = url; });\n  }\n  function guard(img) {\n    if (!img) return;\n    new MutationObserver(() =\u003e {\n      if (want \u0026\u0026 img.getAttribute(\"src\") !== want) img.src = want;\n    }).observe(img, { attributes: true, attributeFilter: [\"src\"] });\n  }\n  (function loadProduct() {\n    const el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    const get = el ? Promise.resolve(JSON.parse(el.textContent))\n                   : fetch(location.pathname.replace(\/\\\/$\/, \"\") + \".js\").then(r =\u003e r.json());\n    get.then(p =\u003e {\n      const media = (p.media || []).map(m =\u003e ({ alt: String(m.alt || \"\").toLowerCase(), src: m.src || (m.preview_image \u0026\u0026 m.preview_image.src) }));\n      const pick = (side, opts) =\u003e {\n        const sideKeys = side === \"front\" ? [\"vorderseite\"] : [\"rückseite\", \"rueckseite\"];\n        const list = media.filter(m =\u003e sideKeys.some(k =\u003e m.alt.indexOf(k) \u003e -1));\n        let hit = list.find(m =\u003e opts.some(o =\u003e { const k = String(o || \"\").toLowerCase().split(\/[\\s-]+\/)[0]; return k \u0026\u0026 m.alt.indexOf(k) \u003e -1; }));\n        if (!hit \u0026\u0026 list.length === 1) hit = list[0];\n        return hit ? imgUrl(hit.src) : \"\";\n      };\n      p.variants.forEach(v =\u003e {\n        const opts = v.options || [v.option1, v.option2, v.option3];\n        IMG[String(v.id)] = { front: pick(\"front\", opts), back: pick(\"back\", opts) };\n        TITLES[String(v.id)] = slug(v.title);\n      });\n      applyImage();\n    }).catch(() =\u003e {});\n  })();\n  guard(studioImg); guard(popupImg);\n  let lastVariant = currentVariant();\n  setInterval(() =\u003e { const v = currentVariant(); if (v !== lastVariant) { lastVariant = v; applyImage(); } }, 400);\n\n  \/* ── Seite wechseln ── *\/\n  function setSide(k) {\n    if (!LABEL[k]) return;\n    S.save();\n    S.side = k;\n    tabs.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(\"jmGkInputLabel\");\n    if (lb) lb.textContent = \"Gravur \" + LABEL[k] + (k === \"back\" ? \" (optional)\" : \"\");\n    [\"jmGkSideLabel\", \"jmGkPopupSideLabel\"].forEach(id =\u003e {\n      const el = document.getElementById(id);\n      if (el) el.textContent = LABEL[k];\n    });\n    lineInputs.forEach((i, n) =\u003e { if (i) i.value = S[k][n]; });\n    applyImage();\n    \/* vorhandene Vorschau-Logik (Effekte, Mobile-Popup) auslösen *\/\n    input.dispatchEvent(new Event(\"input\", { bubbles: true }));\n    render(true);\n    (lineInputs.find(i =\u003e i \u0026\u0026 !i.value) || input).focus();\n  }\n  tabs.forEach(b =\u003e b.addEventListener(\"click\", () =\u003e setSide(b.dataset.side)));\n\n  \/* ── Eingaben ── *\/\n  lineInputs.forEach(i =\u003e i \u0026\u0026 i.addEventListener(\"input\", () =\u003e { S.save(); render(true); }));\n\n  \/* Symbole: in die zuletzt gewählte Zeile einfügen (Zeile 1 übernimmt die vorhandene Logik) *\/\n  document.addEventListener(\"click\", function (e) {\n    const btn = e.target.closest \u0026\u0026 e.target.closest(\"#engraving-preview .symbol-btn\");\n    if (!btn) return;\n    if (focused === input) { setTimeout(() =\u003e { S.save(); render(true); }, 30); return; }\n    e.stopImmediatePropagation();\n    const sym = btn.dataset.symbol || btn.textContent.trim();\n    const max = focused.maxLength \u003e 0 ? focused.maxLength : 11;\n    if (Array.from(focused.value + sym).length \u003e max) return;\n    const st = focused.selectionStart != null ? focused.selectionStart : focused.value.length;\n    const en = focused.selectionEnd != null ? focused.selectionEnd : focused.value.length;\n    focused.value = focused.value.substring(0, st) + sym + focused.value.substring(en);\n    focused.focus();\n    focused.selectionStart = focused.selectionEnd = st + sym.length;\n    S.save(); render(true);\n  }, true);\n\n  \/* Schriftart: vorhandene Logik setzt nur Zeile 1 → danach komplett neu zeichnen *\/\n  document.querySelectorAll(\"#engraving-preview .font-btn\").forEach(b =\u003e\n    b.addEventListener(\"click\", () =\u003e setTimeout(() =\u003e render(true), 30)));\n\n  \/* Werte, die per Skript gesetzt werden → regelmäßig übernehmen *\/\n  setInterval(() =\u003e {\n    const now = lineInputs.map(i =\u003e i ? i.value : \"\");\n    if (now.join(\"|\") !== S[S.side].join(\"|\")) { S.save(); render(false); }\n  }, 200);\n\n  \/* Schnittstelle für das Tweak-Panel *\/\n  window.jmGkStudio = { setSide: setSide, mark: markStudio, box: () =\u003e (window.innerWidth \u003c= 768 ? popupBox : studioBox),\n                        studioBox: studioBox, popupBox: popupBox, side: () =\u003e S.side, render: render };\n  markStudio();\n  renderTabs();\n});\n\u003c\/script\u003e\n  \u003cstyle\u003e\n.jm-lv-stage {\n  \/* ── Gravur-Position (mit ?jmtweak=1 einstellen) ── *\/\n --lv-x: 54%;\n    --lv-y: 52%;\n    --lv-rot: -26deg;\n  --lv-size: 5;\n  --lv-color: rgba(205,205,205,0.92);\n  \/* Feinjustierung (mit ?jmtweak=1 einstellbar) *\/\n  --lv-lh: 1.15;     \/* Zeilenabstand Zeile 2 + 3 *\/\n  --lv-gap: 0em;     \/* Abstand Zeile 1 → Zeile 2 *\/\n  --lv-ls: 0.06em;   \/* Zeichenabstand *\/\n  --lv-op: 1;        \/* Deckkraft der Gravur *\/\n  --lv-rdx: 0em;     \/* Versatz Zeile 2 + 3 seitlich *\/\n  position: relative;\n  container-type: inline-size;\n  border-radius: 14px;\n  overflow: hidden;\n}\n.jm-lv-img {\n  width: 100%;\n  display: block;\n  border-radius: 14px;\n  transition: opacity 0.3s ease;\n}\n.jm-lv-text {\n  position: absolute;\n  left: var(--lv-x);\n  top: var(--lv-y);\n  transform: translate(var(--lv-tx, -50%), var(--lv-ty, -190%)) rotate(var(--lv-rot));\n  font-size: calc(var(--lv-size) * 1cqw);\n  font-family: 'Playfair Display', serif;\n  color: var(--lv-color);\n  letter-spacing: var(--lv-ls, 0.06em);\n  opacity: var(--lv-op, 1);\n  white-space: nowrap;\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  pointer-events: none;\n}\n.jm-lv-text.is-empty { opacity: 0.65; }\n\/* Zeile 2 + 3 unter Zeile 1 (Zeile 1 bleibt an der eingestellten Position) *\/\n.jm-lv-text::after {\n  content: attr(data-rest); position: absolute; left: 50%; top: calc(100% + var(--lv-gap, 0em)); transform: translateX(calc(-50% + var(--lv-rdx, 0em)));\n  white-space: pre; text-align: center; font: inherit; line-height: var(--lv-lh, 1.15); color: inherit; letter-spacing: inherit; text-shadow: inherit;\n}\n    @keyframes jmLvShake {\n  0%, 100% { transform: translateX(0); }\n  20%, 60% { transform: translateX(-5px); }\n  40%, 80% { transform: translateX(5px); }\n}\n.jm-lv-shake { animation: jmLvShake 0.35s ease; }\n.jm-lv-label {\n  display: block;\n  text-align: center;\n  margin-top: 10px;\n  font-size: 9px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: #c9a84c;\n  font-weight: 700;\n}\n.jm-lv-close {\n  position: absolute;\n  top: 8px;\n  right: 10px;\n  background: none;\n  border: none;\n  color: #c9a84c;\n  font-size: 20px;\n  line-height: 1;\n  cursor: pointer;\n  padding: 4px;\n  z-index: 10;\n  opacity: 0.7;\n  transition: opacity 0.2s ease, transform 0.2s ease;\n}\n.jm-lv-close:hover { opacity: 1; transform: scale(1.15); }\n\n\/* Desktop-Panel *\/\n#jm-lv-desktop {\n  display: none;\n  position: fixed;\n  left: 25vh;\n  top: 50vh;\n  transform: translateY(-50%);\n  z-index: 8888;\n  width: 460px;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 20px;\n  padding: 16px;\n  box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n}\n\/* ── Desktop: Werte pro Farbe (mit ?jmtweak=1 ermitteln) ── *\/\n\/* #jm-lv-desktop[data-variant=\"gold\"] .jm-lv-stage { --lv-x: 37%; --lv-y: 52%; --lv-rot: -26deg; --lv-size: 5; } *\/\n    #jm-lv-desktop[data-variant=\"schwarz-matt\"] .jm-lv-stage {\n   --lv-x: 52%;\n  --lv-y: 59.5%;\n  --lv-rot: -43deg;\n  --lv-size: 5;\n}\n    #jm-lv-desktop[data-variant=\"stahl-matt\"] .jm-lv-stage {\n  --lv-x: 48%;\n  --lv-y: 52%;\n  --lv-rot: -43deg;\n  --lv-size: 5;\n}\n      #jm-lv-desktop[data-variant=\"vergoldet\"] .jm-lv-stage {\n          --lv-x: 52.5%;\n          --lv-y: 49%;\n          --lv-rot: -1deg;\n          --lv-size: 4.75;\n          --lv-ty: -145%;\n          --lv-lh: 1.35;\n          --lv-gap: -0.2em;\n      }\n\n          #jm-lv-desktop[data-variant=\"vergoldet\"] .jm-lv-stage.jm-lv-stage--back {\n              --lv-x: 52.5%;\n              --lv-y: 49%;\n              --lv-rot: -26deg;\n              --lv-size: 3.75;\n              --lv-ty: -211%;\n              --lv-gap: -0.25em;\n          }\n\n      .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] {\n          --st-x: 50.5%;\n          --st-y: 31%;\n          --st-rot: 0deg;\n          --st-size: 5;\n          --st-lh: 1.35;\n          --st-gap: -0.15em;\n      }\n\n      .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"back\"] {\n          --st-x: 55%;\n          --st-y: 27.5%;\n          --st-rot: -29deg;\n          --st-size: 4;\n          --st-lh: 1;\n          --st-gap: -0.4em;\n      }\n\n\n\n\n#jm-lv-desktop.show { display: block; animation: jmLvIn 0.3s ease; }\n@keyframes jmLvIn {\n  from { opacity: 0; transform: translateY(-50%) translateX(-12px); }\n  to   { opacity: 1; transform: translateY(-50%) translateX(0); }\n}\n\n\/* Mobile-Popup *\/\n#jm-lv-mobile {\n  position: fixed;\n  left: 50%;\n  bottom: 110px;\n  width: calc(100% - 24px);\n  max-width: 380px;\n  z-index: 9998;\n  background: #1a1410;\n  border: 1px solid rgba(201,168,76,0.4);\n  border-radius: 18px;\n  padding: 12px;\n  box-shadow: 0 -10px 40px rgba(0,0,0,0.35);\n  opacity: 0;\n  pointer-events: none;\n  transform: translate(-50%, 20px);\n  transition: opacity 0.3s ease, transform 0.3s ease;\n}\n#jm-lv-mobile.show { opacity: 1; pointer-events: auto; transform: translate(-50%, 0); }\n\n@media (max-width: 768px) {\n  #jm-lv-desktop { display: none !important; }\n\n  #jm-lv-mobile .jm-lv-stage {\n    --lv-x: 55%;\n    --lv-y: 58%;\n    --lv-rot: -28deg;\n    --lv-size: 5;\n    --lv-color: rgba(205, 205, 205, 0.92);\n    position: relative;\n    container-type: inline-size;\n    border-radius: 14px;\n    overflow: hidden;\n  }\n\n    #jm-lv-mobile .jm-lv-text {\n    position: absolute;\n    left: var(--lv-x);\n    top: var(--lv-y);\n    transform: translate(var(--lv-tx, 0%), var(--lv-ty, -239%)) rotate(var(--lv-rot));\n    transform-origin: 0 50%;\n    font-size: calc(var(--lv-size) * 1cqw);\n    color: var(--lv-color);\n    letter-spacing: var(--lv-ls, 0.06em);\n    white-space: nowrap;\n    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.6), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    pointer-events: none;\n  }\n\n  \/* ── Mobile: Werte pro Farbe (mit ?jmtweak=1 ermitteln) ── *\/\n  \/* #jm-lv-mobile[data-variant=\"gold\"] .jm-lv-stage { --lv-x: 41%; --lv-y: 58%; --lv-rot: -28deg; --lv-size: 5; } *\/\n  #jm-lv-mobile[data-variant=\"schwarz-matt\"] .jm-lv-stage {\n --lv-x: 45.5%;\n        --lv-y: 74%;\n        --lv-rot: -45deg;\n  --lv-size: 5;\n}\n  #jm-lv-mobile[data-variant=\"schwarz-matt\"] .jm-lv-text {\n   transform: translate(var(--lv-tx, -9%), var(--lv-ty, -239%)) rotate(var(--lv-rot));\n}\n       \n          #jm-lv-mobile[data-variant=\"vergoldet\"] .jm-lv-stage {\n              --lv-x: 44.5%;\n              --lv-y: 59.5%;\n              --lv-rot: -1deg;\n              --lv-size: 5;\n              --lv-lh: 1.4;\n              --lv-gap: 0.1em;\n          }\n\n              #jm-lv-mobile[data-variant=\"vergoldet\"] .jm-lv-stage.jm-lv-stage--back {\n                  --lv-x: 43%;\n                  --lv-y: 51.5%;\n                  --lv-rot: -28deg;\n                  --lv-size: 3.75;\n                  --lv-tx: 4%;\n                  --lv-ty: -174%;\n                  --lv-gap: -0.25em;\n              }\n \n          #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"front\"] {\n              --st-x: 50%;\n              --st-y: 37%;\n              --st-rot: 0deg;\n              --st-size: 6.5;\n          }\n\n    \n          #engraving-mobile-popup .popup-preview[data-variant=\"vergoldet\"][data-side=\"back\"] {\n              --st-x: 52.5%;\n              --st-y: 34.5%;\n              --st-rot: -28deg;\n              --st-size: 4;\n          }\n\n\n      \n          .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"front\"] {\n              --st-x: 51.5%;\n              --st-y: 27%;\n              --st-rot: 0deg;\n              --st-size: 5.75;\n              --st-lh: 1.35;\n              --st-gap: -0.15em;\n          }\n      \n\n      .engraving-preview-image[data-variant=\"vergoldet\"][data-side=\"back\"] {\n          --st-x: 53%;\n          --st-y: 26.5%;\n          --st-rot: -27deg;\n          --st-size: 3.75;\n          --st-lh: 1;\n          --st-gap: -0.4em;\n      }\n      \n      \n      \n  #jm-lv-mobile[data-variant=\"vergoldet\"] .jm-lv-text {\n   transform: translate(var(--lv-tx, -9%), var(--lv-ty, -239%)) rotate(var(--lv-rot));\n}\n      #jm-lv-mobile[data-variant=\"stahl-matt\"] .jm-lv-stage {\n          --lv-x: 44%;\n        --lv-y: 64%;\n        --lv-rot: -45deg;\n  --lv-size: 5;\n}\n  #jm-lv-mobile[data-variant=\"stahl-matt\"] .jm-lv-text {\n   transform: translate(var(--lv-tx, -9%), var(--lv-ty, -239%)) rotate(var(--lv-rot));\n}\n}\n@media (min-width: 769px) { #jm-lv-mobile { display: none !important; } }\n\n\/* Vorder- + Rückseite nebeneinander *\/\n.jm-lv-grid { display: grid; grid-template-columns: 1fr; gap: 10px; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr 1fr; }\n.jm-lv-side { display: none; }\n.jm-lv-side.on { display: block; }\n.jm-lv-side-label { display: block; text-align: center; margin-top: 6px; font-size: 9px; letter-spacing: 1.5px; text-transform: uppercase; color: #8a7055; font-weight: 700; }\n\/* Vorder- + Rückseite befüllt: immer EIN großes Bild – Umschalter Vorderseite \/ Rückseite\n   (Panel bleibt so schmal wie bisher und verdeckt das Produktformular nicht) *\/\n.jm-lv-tabs { display: none; gap: 6px; margin-bottom: 8px; padding-right: 26px; }\n.jm-lv-both .jm-lv-tabs { display: flex; }\n.jm-lv-both .jm-lv-grid { grid-template-columns: 1fr; }\n.jm-lv-tabs button { flex: 1; padding: 6px 8px; border-radius: 999px; border: 1px solid rgba(201,168,76,0.45); background: transparent; color: #e6d3a3; font: 700 10px Inter, sans-serif; letter-spacing: 1.2px; text-transform: uppercase; cursor: pointer; }\n.jm-lv-tabs button.active { background: #c9a84c; color: #1a1410; }\n\/* ── RÜCKSEITE: eigene Werte pro Farbe (mit ?jmtweak=1 → Seite „Rückseite“ ermitteln) ──\n   Höhere Spezifität (.jm-lv-stage.jm-lv-stage--back) → greift immer vor den Vorderseiten-Werten.\n   Startwerte = bisherige Werte (die alten Fotos zeigen die Rückseite, daher mit Drehung).\n   Vergoldet: eingestellte Werte stehen weiter oben bei den Vorderseiten-Werten. *\/\n#jm-lv-desktop[data-variant=\"schwarz-matt\"] .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 52%;\n  --lv-y: 59.5%;\n  --lv-rot: -43deg;\n  --lv-size: 5;\n}\n#jm-lv-desktop[data-variant=\"stahl-matt\"] .jm-lv-stage.jm-lv-stage--back {\n  --lv-x: 48%;\n  --lv-y: 52%;\n  --lv-rot: -43deg;\n  --lv-size: 5;\n}\n@media (max-width: 768px) {\n  #jm-lv-mobile[data-variant=\"schwarz-matt\"] .jm-lv-stage.jm-lv-stage--back {\n    --lv-x: 45.5%;\n    --lv-y: 74%;\n    --lv-rot: -45deg;\n    --lv-size: 5;\n  }\n  #jm-lv-mobile[data-variant=\"stahl-matt\"] .jm-lv-stage.jm-lv-stage--back {\n    --lv-x: 44%;\n    --lv-y: 64%;\n    --lv-rot: -45deg;\n    --lv-size: 5;\n  }\n}\n\n\/* Tweak-Panel *\/\n#jm-lv-tweak {\n  position: fixed;\n  right: 20px;\n  top: 120px;\n  z-index: 99999;\n  width: 240px;\n  background: #111;\n  color: #eee;\n  border: 1px solid #c9a84c;\n  border-radius: 12px;\n  padding: 12px;\n  font: 12px\/1.4 Inter, sans-serif;\n  cursor: move;\n  box-shadow: 0 10px 30px rgba(0,0,0,0.4);\n}\n#jm-lv-tweak label { display: flex; justify-content: space-between; margin-top: 8px; }\n#jm-lv-tweak input[type=range] { width: 100%; cursor: pointer; }\n#jm-lv-tweak code { display: block; margin-top: 10px; padding: 6px; background: #222; border-radius: 6px; font-size: 11px; white-space: pre-wrap; cursor: text; }\n#jm-lv-tweak button { margin-top: 8px; width: 100%; padding: 6px; background: #c9a84c; color: #111; border: 0; border-radius: 6px; cursor: pointer; font-weight: 600; }\n#jm-lv-tweak select { width: 100%; margin-top: 8px; padding: 5px; border-radius: 6px; border: 0; font: inherit; }\n#jm-lv-tweak { max-height: 85vh; overflow: auto; }\n#jm-lv-tweak strong { display: block; touch-action: none; user-select: none; }\n@media (max-width: 768px) { #jm-lv-tweak { top: 10px; right: 8px; width: 220px; max-height: 45vh; overflow: auto; background: rgba(17,17,17,.88); } }\n\u003c\/style\u003e\n\n\u003c!-- JM LIVE-VORSCHAU: Desktop-Panel + Mobile-Popup --\u003e\n\u003cdiv id=\"jm-lv-desktop\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cdiv id=\"jm-lv-mobile\"\u003e\n  \u003cbutton type=\"button\" class=\"jm-lv-close\" aria-label=\"Vorschau schließen\"\u003e×\u003c\/button\u003e\n  \u003cdiv class=\"jm-lv-tabs\"\u003e\n    \u003cbutton type=\"button\" data-side=\"front\" class=\"active\"\u003eVorderseite\u003c\/button\u003e\n    \u003cbutton type=\"button\" data-side=\"back\"\u003eRückseite\u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"jm-lv-grid\"\u003e\n    \u003cdiv class=\"jm-lv-side on\" data-side=\"front\"\u003e\n      \u003cdiv class=\"jm-lv-stage\"\u003e\n        \u003cimg class=\"jm-lv-img\" src=\"\" alt=\"Gravur Vorschau Vorderseite\"\u003e\n        \u003cspan class=\"jm-lv-text is-empty\"\u003eDeine Gravur\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eVorderseite\u003c\/span\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"jm-lv-side\" data-side=\"back\"\u003e\n      \u003cdiv class=\"jm-lv-stage jm-lv-stage--back\"\u003e\n        \u003cimg class=\"jm-lv-img-back\" src=\"\" alt=\"Gravur Vorschau Rückseite\" style=\"width:100%;display:block;border-radius:14px;transition:opacity .3s ease;\"\u003e\n        \u003cspan class=\"jm-lv-text jm-lv-text--back\"\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003cspan class=\"jm-lv-side-label\"\u003eRückseite\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cspan class=\"jm-lv-label\"\u003eLive-Vorschau · \u003cspan class=\"jm-lv-color\"\u003e\u003c\/span\u003e\u003c\/span\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n\/* Optional: eigene Vorschaubilder pro Farbe (Name wie in der Variante, klein geschrieben).\n   Leer lassen = Variantenbild aus Shopify wird genutzt. *\/\nvar JM_LV_BILDER = {\n  \/\/ 'gold':    'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'schwarz': 'https:\/\/cdn.shopify.com\/...',\n  \/\/ 'silber':  'https:\/\/cdn.shopify.com\/...'\n};\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  var form    = document.querySelector('form[action*=\"\/cart\/add\"]');\n  var desktop = document.getElementById('jm-lv-desktop');\n  var mobile  = document.getElementById('jm-lv-mobile');\n  if (!form || !desktop || !mobile) return;\n\n  \/* Panels an den body hängen → nie im Formular, X löst kein Add-to-Cart aus *\/\n  document.body.appendChild(desktop);\n  document.body.appendChild(mobile);\n\n  var stages = document.querySelectorAll('.jm-lv-stage');\n  var texts  = document.querySelectorAll('.jm-lv-text:not(.jm-lv-text--back)');\n  var imgs   = document.querySelectorAll('.jm-lv-img');\n  \/* Rückseite *\/\n  var backTexts = document.querySelectorAll('.jm-lv-text--back');\n  var backImgs  = document.querySelectorAll('.jm-lv-img-back');\n  var colors = document.querySelectorAll('.jm-lv-color');\n  var variants = {};\n  var currentId = null;\n\n  \/* ── Produktdaten: erst Theme-JSON, sonst \/products\/handle.js ── *\/\n  function loadProduct() {\n    var el = document.querySelector('script[id^=\"ProductJson\"], script[data-product-json]');\n    if (el) {\n      try { return Promise.resolve(JSON.parse(el.textContent)); } catch (e) {}\n    }\n    var path = location.pathname.replace(\/\\\/$\/, '');\n    return fetch(path + '.js').then(function (r) { return r.json(); });\n  }\n\n  function imgUrl(src) {\n    if (!src) return '';\n    if (src.indexOf('\/\/') === 0) src = 'https:' + src;\n    return src + (src.indexOf('?') \u003e -1 ? '\u0026' : '?') + 'width=900';\n  }\n\n  loadProduct().then(function (p) {\n    var fallback = p.featured_image || (p.images \u0026\u0026 p.images[0]) || '';\n    if (typeof fallback === 'object') fallback = fallback.src;\n    \/* Rückseiten-Fotos: Alt-Text mit „Rückseite“ + Farbe (z. B. „Rückseite Vergoldet“) *\/\n    var backMedia = (p.media || []).filter(function (m) {\n      var a = String(m.alt || '').toLowerCase();\n      return a.indexOf('rückseite') \u003e -1 || a.indexOf('rueckseite') \u003e -1;\n    });\n    p.variants.forEach(function (v) {\n      var src = v.featured_image ? v.featured_image.src : fallback;\n      var own = null;\n      var opts = (v.options || [v.option1, v.option2, v.option3]);\n      opts.forEach(function (o) {\n        if (o \u0026\u0026 JM_LV_BILDER[String(o).toLowerCase()]) own = JM_LV_BILDER[String(o).toLowerCase()];\n      });\n      var back = null;\n      backMedia.forEach(function (m) {\n        var a = String(m.alt || '').toLowerCase();\n        opts.forEach(function (o) {\n          var key = String(o || '').toLowerCase().split(\/[\\s-]+\/)[0];\n          if (!back \u0026\u0026 key \u0026\u0026 a.indexOf(key) \u003e -1) back = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!back \u0026\u0026 backMedia.length === 1) back = backMedia[0].src || (backMedia[0].preview_image \u0026\u0026 backMedia[0].preview_image.src);\n      \/* Vorderseiten-Foto: Alt-Text mit „Vorderseite“ + Farbe *\/\n      var frontMedia = (p.media || []).filter(function (m) { return String(m.alt || '').toLowerCase().indexOf('vorderseite') \u003e -1; });\n      var frontOwn = null;\n      frontMedia.forEach(function (m) {\n        var a = String(m.alt || '').toLowerCase();\n        opts.forEach(function (o) {\n          var key = String(o || '').toLowerCase().split(\/[\\s-]+\/)[0];\n          if (!frontOwn \u0026\u0026 key \u0026\u0026 a.indexOf(key) \u003e -1) frontOwn = m.src || (m.preview_image \u0026\u0026 m.preview_image.src);\n        });\n      });\n      if (!frontOwn \u0026\u0026 frontMedia.length === 1) frontOwn = frontMedia[0].src || (frontMedia[0].preview_image \u0026\u0026 frontMedia[0].preview_image.src);\n      var front = own || (frontOwn ? imgUrl(frontOwn) : imgUrl(src));\n      variants[String(v.id)] = { img: front, back: back ? imgUrl(back) : front, title: v.title };\n    });\n    checkVariant();\n  });\n\n  function getInput() {\n    return form.querySelector('#gravur_Vorderseite_1') ||\n           form.querySelector('.gravurText, input[type=\"text\"][name*=\"ravur\"]');\n  }\n  \/* Rückseite (Zeile 1) im Produktformular *\/\n  function getBackInput() {\n    return form.querySelector('#gravur_Rückseite_1, #gravurtext_rueckseite, #gravurtext_rückseite, input[data-gravur-seite=\"Rückseite\"]');\n  }\n\n  function getFont(input) {\n    var f = form.querySelector('#gravur_schriftart_input, input[name*=\"Schriftart\"], select[name*=\"Schriftart\"]');\n    if (f \u0026\u0026 f.value) return f.value;\n    return input ? getComputedStyle(input).fontFamily : 'Playfair Display';\n  }\n\n  \/* Zeilen 1–3 einer Seite (Zeile 1 = Feld der Seite, 2 + 3 per ID) *\/\n  function sideLines(seite, first) {\n    var l = [first ? first.value : ''];\n    for (var n = 2; n \u003c= 3; n++) {\n      var f = form.querySelector('#gravur_' + seite + '_' + n);\n      l.push(f ? f.value : '');\n    }\n    return l.map(function (v) { return v.trim(); });\n  }\n  function restOf(l) { return l[2] ? (l[1] + '\\n' + l[2]) : l[1]; }\n\n  function updateText() {\n    var input = getInput();\n    var fl    = sideLines('Vorderseite', input);\n    if (lvSample \u0026\u0026 !fl.join('')) fl = ['A + M', 'Für immer', '12.06.24'];\n    var val   = fl.join('');\n    var font  = getFont(input);\n    var bl    = sideLines('Rückseite', getBackInput());\n    if (lvSample \u0026\u0026 !bl.join('')) bl = ['♥', 'In Liebe', '2024'];\n    var bVal  = bl.join('');\n    texts.forEach(function (t) {\n      t.textContent = fl[0] || (val ? '\\u00A0' : 'Deine Gravur');\n      t.setAttribute('data-rest', val ? restOf(fl) : '');\n      t.classList.toggle('is-empty', !val);\n      t.style.fontFamily = font + ', serif';\n    });\n    backTexts.forEach(function (t) {\n      t.textContent = bl[0] || (bVal ? '\\u00A0' : '');\n      t.setAttribute('data-rest', bVal ? restOf(bl) : '');\n      t.style.fontFamily = font + ', serif';\n    });\n    \/* Vorderseite zeigen, wenn befüllt oder keine Rückseite – Rückseite nur wenn befüllt *\/\n    \/* Beide Seiten befüllt: zuletzt bearbeitete Seite groß zeigen (Tweak: gewählte Seite) *\/\n    var fKey = fl.join('|'), bKey = bl.join('|');\n    if (bKey !== lastBKey \u0026\u0026 bVal) mSide = 'back';\n    if (fKey !== lastFKey \u0026\u0026 val)  mSide = 'front';\n    lastFKey = fKey; lastBKey = bKey;\n    if (tweakActive) mSide = tweakSide;\n    [desktop, mobile].forEach(function (panel) {\n      var f = panel.querySelector('.jm-lv-side[data-side=\"front\"]');\n      var b = panel.querySelector('.jm-lv-side[data-side=\"back\"]');\n      var both = (!!val || tweakSide === 'back') \u0026\u0026 (!!bVal || tweakSide === 'back');\n      var fOn = !!val || !bVal, bOn = !!bVal || tweakSide === 'back';\n      if (both) { fOn = mSide === 'front'; bOn = mSide === 'back'; }\n      if (f) f.classList.toggle('on', fOn);\n      if (b) b.classList.toggle('on', bOn);\n      panel.classList.toggle('jm-lv-both', both);\n    });\n    document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n      t.classList.toggle('active', t.dataset.side === mSide);\n    });\n  }\n  var tweakSide = 'front';\n  var lvSample = false;   \/* Tweak: Beispieltext mit 3 Zeilen *\/\n  var mSide = 'front', lastFKey = '', lastBKey = '', tweakActive = false;\n  \/* Umschalter Vorderseite \/ Rückseite (Desktop + Mobile) *\/\n  document.querySelectorAll('.jm-lv-tabs button').forEach(function (t) {\n    t.addEventListener('click', function (e) {\n      e.preventDefault(); e.stopPropagation();\n      mSide = t.dataset.side;\n      if (tweakActive) { tweakSide = mSide; var sel = document.getElementById('jm-lv-side'); if (sel) { sel.value = mSide; sel.dispatchEvent(new Event('change')); } }\n      updateText();\n    });\n  });\n\n  function show() {\n    updateText();\n    if (window.innerWidth \u003e 768) desktop.classList.add('show');\n    else mobile.classList.add('show');\n  }\n\n  \/* X schließt nur das Panel *\/\n  document.querySelectorAll('.jm-lv-close').forEach(function (btn) {\n    btn.addEventListener('click', function (e) {\n      e.preventDefault();\n      e.stopPropagation();\n      btn.parentElement.classList.remove('show');\n    });\n  });\n\n  \/* Tippen → öffnen *\/\n  function isGravurField(el) {\n    return el === getInput() || el === getBackInput() ||\n           (el \u0026\u0026 el.id \u0026\u0026 \/^gravur_(Vorderseite|Rückseite)_[123]$\/.test(el.id));\n  }\n  form.addEventListener('input', function (e) {\n    if (isGravurField(e.target)) show();\n  });\n\n  \/* Schriftart → öffnen *\/\n  form.addEventListener('click', function (e) {\n    if (e.target.closest('.font-btn')) setTimeout(show, 60);\n  });\n  form.addEventListener('change', function (e) {\n    if (e.target.name \u0026\u0026 e.target.name.indexOf('Schriftart') \u003e -1) show();\n  });\n\n  \/* Symbole → wie Buchstaben einfügen + öffnen *\/\n  var SYM_SEL = '.symbol-btn, .symbol-btn-2, .symbol-button';\n  var valBefore = null;\n\n  \/* Zu welchem Feld gehört der Symbol-Button? (nächstes Gravurfeld im selben Block) *\/\n  function inputForSymbol(btn) {\n    var el = btn.parentElement;\n    while (el \u0026\u0026 el !== form) {\n      var i = el.querySelector('input[type=\"text\"][name*=\"ravur\"], .gravurText');\n      if (i) return i;\n      el = el.parentElement;\n    }\n    return getInput();\n  }\n\n  function isFormSymbol(el) {\n    var btn = el.closest(SYM_SEL);\n    if (!btn || btn.closest('#engraving-preview')) return null; \/* Vorschau-Block in der Beschreibung ignorieren *\/\n    return btn;\n  }\n\n  function shake(input) {\n    input.classList.remove('jm-lv-shake', 'jm-shake');\n    void input.offsetWidth;\n    input.classList.add('jm-lv-shake', 'jm-shake');\n  }\n\n  document.addEventListener('pointerdown', function (e) {\n    var b = isFormSymbol(e.target);\n    var input = b ? inputForSymbol(b) : null;\n    if (input) valBefore = input.value;\n  }, true);\n\n  document.addEventListener('click', function (e) {\n    var btn = isFormSymbol(e.target);\n    var input = btn ? inputForSymbol(btn) : null;\n    if (!btn || !input) return;\n    e.preventDefault();\n    var before = valBefore;\n    valBefore = null;\n    setTimeout(function () {\n      \/* Hat das Gravur-Snippet das Symbol schon eingefügt? Dann nur anzeigen. *\/\n      if (before === null || input.value !== before) { show(); return; }\n      var sym = (btn.dataset.symbol || btn.textContent).trim();\n      var max = input.maxLength \u003e 0 ? input.maxLength : Infinity;\n      if (input.value.length + sym.length \u003e max) { shake(input); show(); return; }\n      input.value += sym;\n      input.dispatchEvent(new Event('input', { bubbles: true }));\n      show();\n    }, 40);\n  });\n\n  \/* Jede Wertänderung (auch per Script eingefügt) → Vorschau öffnen *\/\n  function bothVals() {\n    return sideLines('Vorderseite', getInput()).join('|') + '||' + sideLines('Rückseite', getBackInput()).join('|');\n  }\n  var lastVal = bothVals();\n  setInterval(function () {\n    var now = bothVals();\n    if (now !== lastVal) { lastVal = now; show(); }\n  }, 200);\n\n  \/* ── Farbe \/ Variante → Bild wechseln ── *\/\n  function setBackImage(url) {\n    backImgs.forEach(function (img) { if (url) img.src = url; });\n  }\n\n  function setImage(url) {\n    var pre = new Image();\n    pre.onload = function () {\n      imgs.forEach(function (img) {\n        if (!img.getAttribute('src')) { img.src = url; return; }\n        img.style.opacity = 0;\n        setTimeout(function () { img.src = url; img.style.opacity = 1; }, 150);\n      });\n    };\n    pre.src = url;\n  }\n\n  var onVariant = null;\n\n  function checkVariant() {\n    var idField = form.querySelector('[name=\"id\"]');\n    var id = idField ? String(idField.value) : null;\n    if (!id || id === currentId || !variants[id]) return;\n    currentId = id;\n    var slug = variants[id].title.toLowerCase()\n      .replace(\/ä\/g, 'ae').replace(\/ö\/g, 'oe').replace(\/ü\/g, 'ue').replace(\/ß\/g, 'ss')\n      .replace(\/[^a-z0-9]+\/g, '-').replace(\/^-|-$\/g, '');\n    desktop.dataset.variant = slug;\n    mobile.dataset.variant  = slug;\n    setImage(variants[id].img);\n    setBackImage(variants[id].back);\n    colors.forEach(function (c) { c.textContent = variants[id].title; });\n    if (onVariant) onVariant();\n  }\n\n  form.addEventListener('change', function () { setTimeout(checkVariant, 50); });\n  form.addEventListener('click',  function () { setTimeout(checkVariant, 80); });\n  setInterval(checkVariant, 400);\n  updateText();\n\n  \/* ── Tweak-Panel: URL mit ?jmtweak=1 aufrufen ── *\/\n  if (location.search.indexOf('jmtweak') === -1) return;\n\n  var ranges = { x: [0, 100, 0.5], y: [0, 100, 0.5], rot: [-90, 90, 1], size: [2, 20, 0.25],\n                 tx: [-150, 50, 1], ty: [-400, 100, 1],\n                 lh: [0.6, 2.5, 0.05], gap: [-1.5, 2, 0.05], ls: [-0.1, 0.5, 0.01], rdx: [-3, 3, 0.05], op: [0.2, 1, 0.05] };\n  var names  = { x: 'Horizontal %', y: 'Vertikal %', rot: 'Drehung °', size: 'Größe',\n                 tx: 'Anker horizontal %', ty: 'Anker vertikal %',\n                 lh: 'Zeilenabstand (Z. 2+3)', gap: 'Abstand Zeile 1 → 2', ls: 'Zeichenabstand', rdx: 'Versatz Z. 2+3 seitlich', op: 'Deckkraft' };\n  \/* Variable, Einheit, Standardwert *\/\n  var PROPS  = { x: ['--lv-x', '%', 50], y: ['--lv-y', '%', 50], rot: ['--lv-rot', 'deg', 0], size: ['--lv-size', '', 5],\n                 tx: ['--lv-tx', '%', -50], ty: ['--lv-ty', '%', -190],\n                 lh: ['--lv-lh', '', 1.15], gap: ['--lv-gap', 'em', 0], ls: ['--lv-ls', 'em', 0.06], rdx: ['--lv-rdx', 'em', 0], op: ['--lv-op', '', 1] };\n  var vals   = {};\n  \/* Gravur-Studio unten: eigene Variablen (ohne Anker) *\/\n  var PROPS_ST = { x: ['--st-x', '%', 50], y: ['--st-y', '%', 50], rot: ['--st-rot', 'deg', 0], size: ['--st-size', '', 8],\n                   lh: ['--st-lh', '', 1.15], gap: ['--st-gap', 'em', 0], ls: ['--st-ls', 'em', 0.08], rdx: ['--st-rdx', 'em', 0], op: ['--st-op', '', 1] };\n  var area = 'top';   \/* top | studio | studiopop *\/\n  function curProps() { return area === 'top' ? PROPS : PROPS_ST; }\n  function studioTarget() {\n    var st = window.jmGkStudio;\n    if (!st) return null;\n    return area === 'studiopop' ? st.popupBox : st.studioBox;\n  }\n  function tTargets() {\n    if (area === 'top') return Array.prototype.slice.call(sideStages());\n    var t = studioTarget();\n    return t ? [t] : [];\n  }\n\n  function activePanel() { return window.innerWidth \u003e 768 ? desktop : mobile; }\n\n  \/* Stages der gewählten Seite (Vorderseite \/ Rückseite) *\/\n  var SIDE_SEL = { front: '.jm-lv-stage:not(.jm-lv-stage--back)', back: '.jm-lv-stage--back' };\n  function sideStages() { return document.querySelectorAll(SIDE_SEL[tweakSide]); }\n\n  function readVals() {\n    if (area !== 'top') {\n      var st = window.jmGkStudio, tg = studioTarget();\n      if (st \u0026\u0026 st.side() !== tweakSide) st.setSide(tweakSide);\n      if (st) st.mark();\n      if (tg) {\n        Object.keys(PROPS_ST).forEach(function (k) { tg.style.removeProperty(PROPS_ST[k][0]); });\n        if (st) st.mark();\n        var cst = getComputedStyle(tg);\n        Object.keys(PROPS_ST).forEach(function (k) {\n          var v = parseFloat(cst.getPropertyValue(PROPS_ST[k][0]));\n          vals[k] = isNaN(v) ? PROPS_ST[k][2] : v;\n        });\n      }\n      return;\n    }\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.removeProperty(PROPS[k][0]); });\n    });\n    var cs = getComputedStyle(activePanel().querySelector(SIDE_SEL[tweakSide]));\n    \/* Anker-Standard je Ansicht (Desktop: -50 \/ -190 · Mobile: -9 \/ -239 bzw. 0 \/ -239) *\/\n    var mob = activePanel() === mobile;\n    var hasVar = \/translate\\(-9%\/.test(getComputedStyle(activePanel().querySelector('.jm-lv-text')).transform) || !!activePanel().dataset.variant;\n    PROPS.tx[2] = mob ? (hasVar ? -9 : 0) : -50;\n    PROPS.ty[2] = mob ? -239 : -190;\n    Object.keys(PROPS).forEach(function (k) {\n      var v = parseFloat(cs.getPropertyValue(PROPS[k][0]));\n      vals[k] = isNaN(v) ? PROPS[k][2] : v;\n    });\n  }\n  readVals();\n\n  var tw = document.createElement('div');\n  tw.id = 'jm-lv-tweak';\n  tweakActive = true;\n  var html = '\u003cstrong style=\"color:#c9a84c;display:flex;justify-content:space-between;align-items:center\"\u003e⠿ Gravur-Position · \u003cspan id=\"jm-lv-view\"\u003e\u003c\/span\u003e'\n           + '\u003cbutton type=\"button\" id=\"jm-lv-min\" title=\"einklappen\" style=\"width:auto;margin:0;padding:2px 10px;background:#333;color:#eee\"\u003e–\u003c\/button\u003e\u003c\/strong\u003e'\n           + '\u003cselect id=\"jm-lv-area\"\u003e\u003coption value=\"top\"\u003eBereich: Live-Vorschau oben\u003c\/option\u003e'\n           + '\u003coption value=\"studio\"\u003eBereich: Gravur-Studio (Bild)\u003c\/option\u003e'\n           + '\u003coption value=\"studiopop\"\u003eBereich: Gravur-Studio Mobile-Popup\u003c\/option\u003e\u003c\/select\u003e'\n           + '\u003cselect id=\"jm-lv-side\"\u003e\u003coption value=\"front\"\u003eVorderseite\u003c\/option\u003e\u003coption value=\"back\"\u003eRückseite\u003c\/option\u003e\u003c\/select\u003e';\n  Object.keys(vals).forEach(function (k) {\n    if (k === 'tx') html += '\u003cdiv data-row=\"tx\" style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eAnker (Feinposition des Textblocks)\u003c\/div\u003e';\n    if (k === 'lh') html += '\u003cdiv style=\"margin-top:10px;padding-top:6px;border-top:1px solid #333;color:#c9a84c;font-size:11px\"\u003eZeilen \u0026amp; Schrift\u003c\/div\u003e';\n    html += '\u003cdiv data-row=\"' + k + '\"\u003e\u003clabel\u003e' + names[k] + ' \u003cspan id=\"jm-lv-v-' + k + '\"\u003e' + vals[k] + '\u003c\/span\u003e\u003c\/label\u003e' +\n            '\u003cinput type=\"range\" data-k=\"' + k + '\" min=\"' + ranges[k][0] + '\" max=\"' + ranges[k][1] +\n            '\" step=\"' + ranges[k][2] + '\" value=\"' + vals[k] + '\"\u003e\u003c\/div\u003e';\n  });\n  html += '\u003cbutton type=\"button\" id=\"jm-lv-sample\" style=\"background:#333;color:#eee\"\u003eBeispieltext 3 Zeilen: aus\u003c\/button\u003e'\n        + '\u003cbutton type=\"button\" id=\"jm-lv-reset\" style=\"background:#333;color:#eee\"\u003eSeite zurücksetzen\u003c\/button\u003e'\n        + '\u003ccode id=\"jm-lv-out\"\u003e\u003c\/code\u003e\u003cbutton type=\"button\" id=\"jm-lv-copy\"\u003eWerte kopieren\u003c\/button\u003e';\n  tw.innerHTML = html;\n  document.body.appendChild(tw);\n\n  function apply() {\n    if (area !== 'top') return applyStudio();\n    sideStages().forEach(function (s) {\n      Object.keys(PROPS).forEach(function (k) { s.style.setProperty(PROPS[k][0], vals[k] + PROPS[k][1]); });\n    });\n    var panel = activePanel();\n    \/* Ausgabe: Position immer, Feinjustierung nur wenn vom Standard abweichend *\/\n    var lines = Object.keys(PROPS).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS[k][2];\n    }).map(function (k) { return '  ' + PROPS[k][0] + ': ' + vals[k] + PROPS[k][1] + ';'; });\n    var rule = '#' + panel.id + '[data-variant=\"' + (panel.dataset.variant || '') + '\"] .jm-lv-stage' + (tweakSide === 'back' ? '.jm-lv-stage--back' : '') + ' {\\n' +\n      lines.join('\\n') + '\\n}';\n    document.getElementById('jm-lv-out').textContent = panel === mobile\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Gravur-Studio: Werte anwenden + CSS-Regel ausgeben *\/\n  function applyStudio() {\n    var tg = studioTarget(), st = window.jmGkStudio;\n    if (!tg) { document.getElementById('jm-lv-out').textContent = '⚠ Bereich nicht gefunden'; return; }\n    Object.keys(PROPS_ST).forEach(function (k) { tg.style.setProperty(PROPS_ST[k][0], vals[k] + PROPS_ST[k][1]); });\n    tg.classList.add('jm-st-pos');\n    \/* Beispieltext im Studio, solange die Seite leer ist *\/\n    if (lvSample \u0026\u0026 st \u0026\u0026 !window.jmGkSides.has(tweakSide)) {\n      tg.querySelectorAll('#engravingPreviewText, .popup-preview-text').forEach(function (el) {\n        el.textContent = 'A + M';\n        el.setAttribute('data-rest', 'Für immer\\n12.06.24');\n      });\n      var ov = tg.querySelector('.engraving-overlay');\n      if (ov) ov.classList.add('active');\n    }\n    if (area === 'studiopop') {\n      var pop = document.getElementById('engraving-mobile-popup');\n      if (pop) setTimeout(function () { pop.classList.add('show'); }, 30);\n    }\n    var lines = Object.keys(PROPS_ST).filter(function (k) {\n      return ['x', 'y', 'rot', 'size'].indexOf(k) \u003e -1 || vals[k] !== PROPS_ST[k][2];\n    }).map(function (k) { return '  ' + PROPS_ST[k][0] + ': ' + vals[k] + PROPS_ST[k][1] + ';'; });\n    var sel = (area === 'studiopop' ? '#engraving-mobile-popup .popup-preview' : '.engraving-preview-image')\n            + '[data-variant=\"' + (tg.dataset.variant || '') + '\"][data-side=\"' + tweakSide + '\"]';\n    var rule = sel + ' {\\n' + lines.join('\\n') + '\\n}';\n    \/* Mobile-Werte nur für Mobile, Desktop-Werte gelten als Basis für alle Größen *\/\n    document.getElementById('jm-lv-out').textContent = (area === 'studiopop' || activePanel() === mobile)\n      ? '@media (max-width: 768px) {\\n' + rule.replace(\/^\/gm, '  ') + '\\n}'\n      : rule;\n  }\n\n  \/* Bereich wechseln: Regler-Zeilen anpassen, Bereich sichtbar machen *\/\n  function syncRows() {\n    ['tx', 'ty'].forEach(function (k) {\n      tw.querySelectorAll('[data-row=\"' + k + '\"]').forEach(function (r) { r.style.display = area === 'top' ? '' : 'none'; });\n    });\n    var opt = tw.querySelector('#jm-lv-area option[value=\"studiopop\"]');\n    if (opt) opt.disabled = activePanel() !== mobile;\n  }\n  function focusArea() {\n    if (area === 'top') { show(); return; }\n    desktop.classList.remove('show'); mobile.classList.remove('show');\n    var tg = studioTarget();\n    if (area === 'studio' \u0026\u0026 tg) tg.scrollIntoView({ behavior: 'smooth', block: 'center' });\n    if (area === 'studiopop') {\n      var sec = document.getElementById('engraving-preview');\n      if (sec) sec.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n  }\n\n  function viewLabel() {\n    var v = document.getElementById('jm-lv-view');\n    if (v) v.textContent = activePanel() === mobile ? 'Mobile' : 'Desktop';\n  }\n  \/* Ansicht gewechselt (Fenster schmaler\/breiter, Handy gedreht) → Werte der neuen Ansicht laden *\/\n  var lastView = activePanel();\n  window.addEventListener('resize', function () {\n    if (activePanel() !== lastView) { lastView = activePanel(); onVariant(); show(); }\n  });\n\n  \/* Variante gewechselt → Regler auf die Werte dieser Variante setzen *\/\n  onVariant = function () {\n    viewLabel();\n    syncRows();\n    readVals();\n    Object.keys(vals).forEach(function (k) {\n      tw.querySelector('[data-k=\"' + k + '\"]').value = vals[k];\n      document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    });\n    apply();\n  };\n\n  \/* Seite wechseln → Regler auf die Werte dieser Seite setzen, Rückseite sichtbar machen *\/\n  document.getElementById('jm-lv-side').addEventListener('change', function () {\n    tweakSide = this.value;\n    onVariant();\n    if (area === 'top') show(); else focusArea();\n  });\n  document.getElementById('jm-lv-area').addEventListener('change', function () {\n    area = this.value;\n    onVariant();\n    focusArea();\n  });\n\n  tw.addEventListener('input', function (e) {\n    var k = e.target.dataset.k;\n    if (!k) return;\n    vals[k] = parseFloat(e.target.value);\n    document.getElementById('jm-lv-v-' + k).textContent = vals[k];\n    apply();\n    if (area === 'top') show();\n  });\n\n  \/* Beispieltext: zeigt 3 Zeilen auf beiden Seiten (nur Vorschau, Formular bleibt leer) *\/\n  document.getElementById('jm-lv-sample').addEventListener('click', function () {\n    lvSample = !lvSample;\n    this.textContent = 'Beispieltext 3 Zeilen: ' + (lvSample ? 'an' : 'aus');\n    if (area === 'top') show();\n    else { if (!lvSample \u0026\u0026 window.jmGkStudio) window.jmGkStudio.render(false); apply(); }\n  });\n  \/* Zurücksetzen: Live-Werte der gewählten Seite verwerfen → Werte aus dem CSS *\/\n  document.getElementById('jm-lv-reset').addEventListener('click', function () {\n    onVariant();\n    if (area === 'top') show();\n  });\n\n  document.getElementById('jm-lv-copy').addEventListener('click', function () {\n    if (navigator.clipboard) navigator.clipboard.writeText(document.getElementById('jm-lv-out').textContent);\n    var b = this; b.textContent = 'Kopiert ✓';\n    setTimeout(function () { b.textContent = 'Werte kopieren'; }, 1500);\n  });\n\n  \/* Draggable ohne Sprung *\/\n  var drag = false, ox = 0, oy = 0;\n  \/* Touch (Mobile): über die Überschrift verschieben *\/\n  var head = tw.querySelector('strong');\n  \/* Einklappen: nur die Kopfzeile bleibt sichtbar → Vorschau frei *\/\n  document.getElementById('jm-lv-min').addEventListener('click', function (e) {\n    e.stopPropagation();\n    var min = tw.classList.toggle('jm-lv-min');\n    Array.prototype.forEach.call(tw.children, function (c) { if (c !== head) c.style.display = min ? 'none' : ''; });\n    if (!min) syncRows();\n    this.textContent = min ? '+' : '–';\n  });\n  head.addEventListener('touchstart', function (e) {\n    if (e.target.closest \u0026\u0026 e.target.closest('button')) return;\n    var t = e.touches[0], r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = t.clientX - r.left; oy = t.clientY - r.top;\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchmove', function (e) {\n    if (!drag) return;\n    var t = e.touches[0];\n    tw.style.left = Math.min(Math.max(t.clientX - ox, 0), window.innerWidth - 60) + 'px';\n    tw.style.top  = Math.min(Math.max(t.clientY - oy, 0), window.innerHeight - 40) + 'px';\n    e.preventDefault();\n  }, { passive: false });\n  document.addEventListener('touchend', function () { drag = false; });\n\n  tw.addEventListener('mousedown', function (e) {\n    if (['INPUT', 'BUTTON', 'CODE', 'SELECT', 'OPTION'].indexOf(e.target.tagName) \u003e -1) return;\n    var r = tw.getBoundingClientRect();\n    tw.style.left = r.left + 'px'; tw.style.top = r.top + 'px'; tw.style.right = 'auto';\n    drag = true; ox = e.clientX - r.left; oy = e.clientY - r.top;\n    e.preventDefault();\n  });\n  document.addEventListener('mousemove', function (e) {\n    if (!drag) return;\n    tw.style.left = (e.clientX - ox) + 'px';\n    tw.style.top  = (e.clientY - oy) + 'px';\n  });\n  document.addEventListener('mouseup', function () { drag = false; });\n\n  apply();\n  show();\n});\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet","offer_id":56799423660297,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarz-Matt","offer_id":56799423693065,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Stahl-Matt","offer_id":56799423725833,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Geldklammer_gesamt.png?v=1770225562"},{"product_id":"3d-gravur-baren-anhaenger-edelstahl","title":"3D Gravur Baren Anhänger aus Edelstahl inkl. Kette - mit Gravur","description":"\u003cbody\u003e\n\n\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003ctitle\u003e3D Gravur Säulen Anhänger aus Edelstahl inkl. Kette - mit Gravur\u003c\/title\u003e\n\n    \u003c!-- SEO --\u003e\n\n    \u003cmeta name=\"description\" content=\"Personalisierter Säulen-Anhänger aus Edelstahl mit kostenloser 3D Gravur. Zeitlos, hochwertig \u0026amp; emotional – inkl. Kette. Jetzt gestalten.\"\u003e\n\n    \u003cmeta name=\"keywords\" content=\"3D Gravur Anhänger, Säulen Anhänger Edelstahl, Baren Anhänger Gravur, personalisierter Edelstahl Anhänger, Gravur Kette Herren Damen, Juwelier Gravur Schmuck\"\u003e\n\n\n\n\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n    \u003c!-- Fonts --\u003e\n    \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n    \u003c!-- Bootstrap Icons --\u003e\n    \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n    \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 2.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 2.8rem;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n\n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n\n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 860px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n\n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\/*Desktop*\/\n.engraving-overlay span {\n  font-size: 1.4rem;\n   \/* letter-spacing: -4px;*\/\n    color: rgb(186 186 186 \/ 94%);\n    text-shadow: 0 1px 1px rgba(0, 0, 0, 0.6), 0 -1px 0 rgba(255, 255, 255, 0.15);\n    padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n    writing-mode: vertical-lr;\n    text-orientation: upright;\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n  .engraving-preview-image {\n  position: relative;\n  max-width: 660px;\n}\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n\n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n\n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/\n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/\n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n}\n\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\/*Desktop Fonts*\/\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n    letter-spacing: 1px;    \/* Standard *\/\n    transform: translate(28px, 50px); \/* Standardposition *\/\n}\n}\n      \/* =========================\n   SERIF\n========================= *\/\n\n.font-timesnewroman {\n    letter-spacing: 1px;\n   transform: translate(30px, 20px)!important;\n}\n\n.font-georgia {\n    transform: translate(26%, 35%);\n  letter-spacing: 0.5px;\n}\n\n\n\/* =========================\n   SANS-SERIF\n========================= *\/\n\n.font-arial,\n.font-helvetica {\n transform: translate(30px, 68px);\n    letter-spacing: 0.5px;\n}\n\n\n\/* =========================\n   MONOSPACE\n========================= *\/\n\n.font-courier {\n       transform: translate(30px, 68px);\n    letter-spacing: 0.5px;\n}\n\n.font-lucida {\n        transform: translate(30px, 68px);\n    letter-spacing: 0.5px;\n}\n\n\n\/* =========================\n   SCHREIBSCHRIFT\n========================= *\/\n\n.font-allura {\n    transform: translate(30px, 70px);\n    letter-spacing: -3.5px;\n}\n\n.font-alex {\n    transform: translate(24%, 29%);\n    letter-spacing: -8.5px;\n}\n\n.font-kaushan {\n   transform: translate(24%, 35%);\n    letter-spacing: -2.5px;\n}\n\n\n\/* =========================\n   HANDSCHRIFT\n========================= *\/\n\n.font-pacifico {\n    transform: translate(24%, 35%);\n    letter-spacing: -14.5px;\n}\n\n.font-indie {\n   transform: translate(24%, 29%);\n    letter-spacing: -8.5px;\n}\n\n.font-dancing {\n        transform: translate(24%, 29%);\n    letter-spacing: -6.5px;\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n\n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n\n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n\n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n\n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n\n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 285px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: -15px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n}\n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1rem;\n  \/* letter-spacing: 0.08em;*\/\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(0px);\n    \n    writing-mode: vertical-lr;\n    text-orientation: upright;\n}\n}\n\/* Responsive  *\/\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n     \/* bottom: -3px; *\/\n       \/* left: 26px !important; *\/\n        transform: translate(27px, 0px);\n\n}\n  .popup-preview-text-wrap {\n       position: absolute;\n         transform: translate(50%, 50%) !important;\n  white-space: nowrap;\n  display: block;\n}\n\/*Zugriff auf die Schriftgröße Desktop mini Ansicht und Abstand*\/\n.engraving-preview-text-wrap.font-allura span{\n\n    font-size:1.7rem !important;\n    letter-spacing: -9px !important;\n\n}\n  .engraving-preview-text-wrap.font-alex span{\n\n    font-size:1.7rem !important;\n    letter-spacing: -9px !important;\n\n}\n\n\n   .engraving-preview-text-wrap.font-kaushan span{\n    font-size:1.5rem !important;\n    letter-spacing: -8px !important;\n }\n\n  .engraving-preview-text-wrap.font-georgia span{\n    font-size:1.5rem !important;\n    letter-spacing: -4px !important;\n }\n   .engraving-preview-text-wrap.font-timesnewroman span{\n    font-size:1.5rem !important;\n    letter-spacing: -4px !important;\n }\n\n    .engraving-preview-text-wrap.font-arial span{\n    font-size:1.5rem !important;\n    letter-spacing: -5px !important;\n }\n  .engraving-preview-text-wrap.font-helvetica span{\n    font-size:1.5rem !important;\n    letter-spacing: -5px !important;\n }\n    .engraving-preview-text-wrap.font-courier span{\n    font-size:1.6rem !important;\n    letter-spacing: -6px !important;\n }\n     .engraving-preview-text-wrap.font-lucida span{\n    font-size:1.5rem !important;\n    letter-spacing: -2px !important;\n }\n     .engraving-preview-text-wrap.font-pacifico span{\n    font-size:1.5rem !important;\n    letter-spacing: -14px !important;\n }\n   .engraving-preview-text-wrap.font-indie span{\n    font-size:1.5rem !important;\n    letter-spacing: -10px !important;\n }\n    .engraving-preview-text-wrap.font-dancing span{\n    font-size:1.4rem !important;\n    letter-spacing: -4px !important;\n }\n\n\/*Zugriff auf die Position Desktop mini Ansicht  *\/\n.engraving-preview-text-wrap.font-georgia {\n              transform: translate(30px, -1px) !important;\n\n\n}\n  .engraving-preview-text-wrap.font-allura    {\n  transform: translate(30px, -8px) !important;\n}\n  .engraving-preview-text-wrap.font-alex {\n  transform: translate(30px, -9px) !important;\n}\n .engraving-preview-text-wrap.font-kaushan {\n   transform: translate(30px, -2px) !important;\n }\n  .engraving-preview-text-wrap.font-timesnewroman  {\n    transform: translate(30px, -3px) !important;\n }\n\n    .engraving-preview-text-wrap.font-arial  {\n    transform: translate(30px, -7px) !important;\n }\n  .engraving-preview-text-wrap.font-helvetica  {\ntransform: translate(30px, -7px) !important;\n }\n    .engraving-preview-text-wrap.font-courier  {\n   transform: translate(30px, -5px) !important;\n }\n     .engraving-preview-text-wrap.font-lucida  {\n    transform: translate(30px, 2px) !important;\n }\n     .engraving-preview-text-wrap.font-pacifico  {\n   transform: translate(30px, -20px) !important;\n }\n   .engraving-preview-text-wrap.font-indie  {\n    transform: translate(30px, -20px) !important;\n }\n    .engraving-preview-text-wrap.font-dancing  {\n  transform: translate(30px, -2px) !important;\n }\n   \/*Zugriff auf die Schriftgröße und Abstand Mobile Popup*\/ \n.popup-preview-text-wrap.font-allura span{\n\n    font-size:2rem !important;\n    letter-spacing: -11px !important;\n         \n}\n   .popup-preview-text-wrap.font-kaushan span{\n    font-size:1.7rem !important;\n    letter-spacing: -11px !important;\n } \n  .popup-preview-text-wrap.font-alex span{\n    font-size:1.7rem !important;\n    letter-spacing: -9px !important;\n } \n  .popup-preview-text-wrap.font-georgia span{\n    font-size:1.5rem !important;\n    letter-spacing: -4px !important;\n }\n   .popup-preview-text-wrap.font-timesnewroman span{\n    font-size:1.5rem !important;\n    letter-spacing: -4px !important;\n }\n  \n    .popup-preview-text-wrap.font-arial span{\n    font-size:1.7rem !important;\n    letter-spacing: -5px !important;\n }\n     .popup-preview-text-wrap.font-helvetica span{\n    font-size:1.7rem !important;\n    letter-spacing: -5px !important;\n }\n     .popup-preview-text-wrap.font-courier span{\n    font-size:1.7rem !important;\n    letter-spacing: -6px !important;\n }\n      .popup-preview-text-wrap.font-lucida span{\n    font-size:1.7rem !important;\n    letter-spacing: -2px !important;\n }\n      .popup-preview-text-wrap.font-pacifico span{\n    font-size:1.6rem !important;\n    letter-spacing: -14px !important;\n }\n     .popup-preview-text-wrap.font-indie span{\n    font-size:1.7rem !important;\n    letter-spacing: -11px !important;\n }\n    .popup-preview-text-wrap.font-dancing span{\n    font-size:1.6rem !important;\n    letter-spacing: -4px !important;\n }\n  \n  \/*Zugriff auf Position Mobile Popup*\/\n  .popup-preview-text-wrap.font-allura  {\n        transform: translate(-67px, -48px) !important;\n}\n  \n  .popup-preview-text-wrap.font-alex{\ntransform: translate(-2px, 1px) !important;\n}\n \n.popup-preview-text-wrap.font-kaushan{\ntransform: translate(-3px, 0px) !important;\n}\n  .popup-preview-text-wrap.font-allura{\ntransform: translate(-2px, 1px) !important;\n}\n  .popup-preview-text-wrap.font-georgia{\n transform: translate(-2px, 5px) !important;\n}\n.popup-preview-text-wrap.font-timesnewroman {\n transform: translate(-2px, 5px) !important;\n }\n  \n    .popup-preview-text-wrap.font-arial {\n    transform: translate(-2px, 4px) !important;\n }\n     .popup-preview-text-wrap.font-helvetica {\n   transform: translate(-2px, 4px) !important;\n }\n     .popup-preview-text-wrap.font-courier {\n    transform: translate(-2px, 1px) !important;\n }\n      .popup-preview-text-wrap.font-lucida {\n   transform: translate(-2px, 6px) !important;\n }\n      .popup-preview-text-wrap.font-pacifico {\n    transform: translate(-2px, -4px) !important;\n }\n     .popup-preview-text-wrap.font-indie {\n   transform: translate(-2px, -4px) !important;\n }\n    .popup-preview-text-wrap.font-dancing {\n   transform: translate(-2px, 6px) !important;\n }\n  \n  \n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n\n        \/* =========================\n   BESONDERHEITEN \/ HINWEISE LISTE\n========================== *\/\n        .engraving-notes {\n            list-style: none; \/* Entfernt Standard-Punkte *\/\n            padding-left: 0;\n            margin-top: 15px;\n        }\n\n            .engraving-notes li {\n                position: relative;\n                padding-left: 25px;\n                margin-bottom: 10px;\n                font-size: 1.5rem;\n                line-height: 1.2;\n                color: #151515;\n            }\n\n                \/* Optional: Icon \/ Punkt vor jedem Hinweis *\/\n                .engraving-notes li::before {\n                    content: \"✔\"; \/* Häkchen-Symbol *\/\n                    position: absolute;\n                    left: 0;\n                    top: 0;\n                    color: #dcbc5a; \/* Akzentfarbe wie bei Divider \/ Hero *\/\n                    font-size: 1rem;\n                    line-height: 1.5;\n                }\n\n    \u003c\/style\u003e\n\n\n\n\n    \u003cdiv class=\"engraving-product\"\u003e\n\n        \u003c!-- =========================\n         HERO: Edelstahl Säulen Anhänger\n    ========================== --\u003e\n        \u003csection class=\"engraving-hero engraving-fade show\"\u003e\n            \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n                \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n                    \u003c!-- Textbereich --\u003e\n                    \u003cdiv class=\"engraving-hero-text\"\u003e\n\n                        \u003ch1\u003eMehr als Schmuck – deine Geschichte in 3D graviert\u003c\/h1\u003e\n\n                        \u003cdiv class=\"hero-subline\"\u003e\n                            \u003cspan class=\"engraving-badge\"\u003e\n                                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose 3D Gravur\n                            \u003c\/span\u003e\n\n                            \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n                                \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n                                Live-Vorschau ansehen\n                            \u003c\/a\u003e\n                        \u003c\/div\u003e\n\n                        \u003cp\u003e\n                            Ein schlanker Säulen-Anhänger aus hochwertigem Edelstahl –\n                            veredelt mit kostenloser 3D-Gravur.\n                            Minimalistisch im Design. Tief in der Bedeutung.\n                            Ein persönliches Schmuckstück für Liebe, Erinnerung und besondere Lebensmomente.\n                        \u003c\/p\u003e\n\n                        \u003c!-- CTA --\u003e\n                        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                            Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                        \u003c\/button\u003e\n\n                        \u003cdiv class=\"micro-trust-valentine\"\u003e\n                            Sicher · Persönlich · Hochwertig verarbeitet\n                        \u003c\/div\u003e\n\n                        \u003c!-- Trust Icons --\u003e\n                        \u003cdiv class=\"engraving-trust\"\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz \u0026amp; Matt\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e 40 × 5 mm\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e 3D Tiefengravur\u003c\/span\u003e\n                        \u003c\/div\u003e\n\n                        \u003c!-- Optionaler Hinweis\n                    \u003cdiv class=\"micro-trust-valentine\" style=\"text-align:left;\"\u003e\n                        Kette inklusive · verstellbare Länge\n                    \u003c\/div\u003e\n                    --\u003e\n\n                    \u003c\/div\u003e\n\n                    \u003c!-- Bildbereich --\u003e\n                    \u003cdiv class=\"engraving-image\"\u003e\n                        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/2023-04-19-18-08-55.jpg?v=1682036699\" alt=\"Edelstahl Säulen Anhänger mit kostenloser 3D Gravur und Kette\"\u003e\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- =========================\n         WHY STORY BLOCK\n    ========================== --\u003e\n        \u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n            \u003cdiv class=\"container\"\u003e\n                \u003ch2\u003eWarum dieser Säulen-Anhänger? Bedeutung in klarer Form.\u003c\/h2\u003e\n                \u003cp\u003e\n                    Die Säulenform steht für Stärke, Beständigkeit und Klarheit.\n                    Reduziert auf das Wesentliche und gefertigt aus hochwertigem Edelstahl,\n                    wird dieser Anhänger zu einem zeitlosen Begleiter – persönlich, stilvoll und voller Bedeutung.\n                \u003c\/p\u003e\n\n                \u003cdiv class=\"engraving-why-grid\"\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Robuster Edelstahl in Juwelierqualität –\n                            langlebig, farbbeständig und hypoallergen.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eIndividuelle 3D Gravur\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Namen, Koordinaten, Initialen oder Symbole –\n                            präzise als Tiefengravur umgesetzt, kostenlos.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-heart-fill\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eEmotion \u0026amp; Bedeutung\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Weniger Design. Mehr Aussage.\n                            Dieser schlanke Säulen-Anhänger trägt deine Geschichte nah bei dir –\n                            dezent, persönlich und ideal als Geschenk für besondere Momente.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Klare Kanten, fein polierte Oberflächen\n                            und eine elegante Haptik – kompromisslose Qualität bis ins Detail.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n\n        \u003c!-- =========================\n         SHIPPING \u0026 TRUST BLOCK\n    ========================== --\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\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e\n                            nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Jede Gravur entsteht in unserem Familienbetrieb –\n                            \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n                        \u003c\/p\u003e\n                        \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Sichere Zahlung, persönlicher Support\n                            und höchste Qualitätskontrolle vor dem Versand.\n                        \u003c\/p\u003e\n                        \u003cp\u003e\n                            Sollte etwas nicht passen, findest du mit uns\n                            unkompliziert eine Lösung.\n                        \u003c\/p\u003e\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- FEATURES --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container engraving-hero-text\"\u003e\n                \u003ch1\u003eMehr als ein Schmuckstück\u003c\/h1\u003e\n                \u003cp class=\"engraving-section-desc\"\u003e\n                    Dieser schlanke Säulen-Anhänger aus Edelstahl steht für Klarheit,\n                    Persönlichkeit und zeitloses Design – ein dezenter Begleiter mit tiefer Bedeutung.\n                \u003c\/p\u003e\n\n                \u003cdiv class=\"engraving-features\"\u003e\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eIndividuelle 3D Gravur\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Kostenlose Tiefengravur mit Namen, Koordinaten,\n                            Initialen oder Symbolen – präzise und dauerhaft.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHochwertiger Edelstahl\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Robust, farbbeständig und hypoallergen –\n                            speziell geeignet für feine 3D-Gravuren mit klarer Tiefe.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eBereit zu schenken\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Minimalistisches Design kombiniert mit persönlicher Gravur –\n                            ein Geschenk mit Bedeutung für besondere Momente.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSchlank \u0026amp; Zeitlos\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Die klare Säulenform wirkt elegant und modern –\n                            leicht zu tragen, dezent im Look und stark im Ausdruck.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n\n\n\n        \u003c!-- =========================\n         SPECS SECTION\n    ========================== --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n                \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n                \u003cdiv class=\"engraving-specs\"\u003e\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eTyp:\u003c\/strong\u003e Säulen Anhänger mit Kette\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Männer \/ Frauen\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-brush\"\u003e\u003c\/i\u003e \u003cstrong\u003eFarbe:\u003c\/strong\u003e Multicolor (Gelbgold, Stahl, Rosé, Schwarz-matt)\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e \u003cstrong\u003eStil:\u003c\/strong\u003e Mode \u0026amp; Casual\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e \u003cstrong\u003eAnhängerbreite:\u003c\/strong\u003e 0,5 cm\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-link-45deg\"\u003e\u003c\/i\u003e \u003cstrong\u003eKettenlänge:\u003c\/strong\u003e 40 cm + 5 cm (verstellbar)\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e \u003cstrong\u003eAnhängergröße:\u003c\/strong\u003e 4 × 0,5 cm\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos \u0026amp; individuell\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich · Zeitlos · Symbolisch\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- =========================\n         BESONDERHEITEN \/ HINWEISE\n    ========================== --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n                \u003ch2\u003eBesonderheiten \u0026amp; Hinweise\u003c\/h2\u003e\n\n                \u003cul class=\"engraving-notes\" style=\" list-style: none;\"\u003e\n                    \u003cli\u003eDas Material besteht aus hochwertigem Edelstahl. Verblasst nicht nach Kontakt mit Wasser und wird sich nicht verdunkeln. Allergien werden vorgebeugt.\u003c\/li\u003e\n                    \u003cli\u003eVerrostet nicht\u003c\/li\u003e\n                    \u003cli\u003eHypoallergen \/ nicht allergisch\u003c\/li\u003e\n                    \u003cli\u003eBeständig gegen Säuren \u0026amp; Basen\u003c\/li\u003e\n                    \u003cli\u003eKeine Verformung\u003c\/li\u003e\n                    \u003cli\u003eFarb- und Glanzbeständig – verblasst nicht\u003c\/li\u003e\n                \u003c\/ul\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- =========================\n         GRAVUR LIVE PREVIEW\n    ========================== --\u003e\n        \u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n            \u003cspan class=\"engraving-badge visible-xs\"\u003e\n                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n            \u003c\/span\u003e\n            \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n                \u003c!-- IMAGE --\u003e\n                \u003cdiv class=\"engraving-preview-image\"\u003e\n                    \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Baren_frontal.png?v=1772015124\" alt=\"Edelstahl Barenanhänger ohne Gravur\"\u003e\n\n                    \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n                        \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n                            \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n                            \u003cspan class=\"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                    \u003cp class=\"engraving-preview-note\"\u003e\n                        ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n                    \u003c\/p\u003e\n\n\n                \u003c\/div\u003e\n\n                \u003c!-- CONTENT --\u003e\n                \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n                    \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n                    \u003c\/span\u003e\n\n                    \u003ch2\u003eMach diesen Anhänger einzigartig\u003c\/h2\u003e\n                    \u003cp\u003e\n                        Gib deine gewünschte Gravur ein und sieh sofort,\n                        wie dein persönlicher Anhänger Gestalt annimmt.\n                    \u003c\/p\u003e\n\n                    \u003c!-- INPUT --\u003e\n                    \u003cdiv class=\"engraving-input-wrap\"\u003e\n                        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n                        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n                        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n                    \u003c\/div\u003e\n                    \u003c!-- SYMBOL PICKER --\u003e\n                    \u003cdiv class=\"engraving-symbol-picker\"\u003e\n                        \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n                    \u003c!-- FONT SELECT --\u003e\n                    \u003cdiv class=\"engraving-font-select\"\u003e\n\n\n      \u003c!-- =========================\n                         FONT PICKER (BUTTONS)\n                    ========================== --\u003e\n                        \u003cdiv class=\"engraving-font-picker\"\u003e\n                            \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n                            \u003c!-- SERIF --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n                                        Times New Roman\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n                                        Georgia\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SANS --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n                                        Arial\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n                                        Helvetica\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- MONOSPACE --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n                                        Courier New\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n                                        Lucida Console\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SCRIPT --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n                                        Allura\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n                                        Alex Brush\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n                                        Kaushan Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HANDWRITING --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n                                        Pacifico\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n                                        Indie Flower\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n                                        Dancing Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n                            \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n                        \u003c\/div\u003e\n\n                    \u003c\/div\u003e\n\n\n                    \u003c!-- CTA --\u003e\n                    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                    \u003c\/button\u003e\n\n                    \u003c!-- MICRO TRUST --\u003e\n                    \u003cdiv class=\"engraving-micro-trust\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- End Block --\u003e\n        \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\n            \u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n            \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n            \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n            \u003cp\u003e Handarbeit 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\n        \u003c\/section\u003e\n\n    \u003c\/div\u003e\n\n    \u003c!-- Mobile Popup Vorschau --\u003e\n    \u003cdiv id=\"engraving-mobile-popup\"\u003e\n        \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Baren_frontal.png?v=1772015124\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n            \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n                \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n                    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n            Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n    \u003c\/div\u003e\n\n\n    \u003cscript\u003e\n        \/* =========================\n           Intersection Animations\n        ========================= *\/\n        const engravingObserver = new IntersectionObserver(entries =\u003e {\n            entries.forEach(entry =\u003e {\n                if (entry.isIntersecting) entry.target.classList.add('show');\n            });\n        }, { threshold: 0.2 });\n\n        document.querySelectorAll('.engraving-fade').forEach(el =\u003e\n            engravingObserver.observe(el)\n        );\n\n        \/* =========================\n           CTA Scroll + Übergabe\n        ========================= *\/\n        document.addEventListener(\"DOMContentLoaded\", function () {\n            const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n            ctaButtons.forEach(btn =\u003e {\n                btn.addEventListener(\"click\", function (e) {\n                    e.preventDefault();\n\n                    const gravurInput = document.querySelector(\"#gravurtext_vorderseite\");\n                    const previewText = document.getElementById(\"engravingPreviewText\");\n\n                    if (gravurInput \u0026\u0026 previewText) {\n                        gravurInput.value = previewText.textContent.trim();\n                        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n                        gravurInput.style.fontFamily = fontFamily;\n\n                        const back = document.querySelector(\"#gravurtext_2\");\n                        if (back) back.style.fontFamily = fontFamily;\n                        const back3 = document.querySelector(\"#gravurtext_3\");\n                        if (back3) back3.style.fontFamily = fontFamily;\n                        const back4 = document.querySelector(\"#gravurtext_4\");\n                        if (back4) back4.style.fontFamily = fontFamily;\n                        const back5 = document.querySelector(\"#gravurtext_5\");\n                        if (back5) back5.style.fontFamily = fontFamily;\n                        const back6 = document.querySelector(\"#gravurtext_6\");\n                        if (back6) back6.style.fontFamily = fontFamily;\n                    }\n\n                    const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n                    if (gravurFontSelect \u0026\u0026 previewText) {\n                        const previewFont = window.getComputedStyle(previewText).fontFamily;\n                        let found = false;\n                        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n                            if (previewFont.includes(opt.value)) {\n                                gravurFontSelect.selectedIndex = i;\n                                found = true;\n                            }\n                        });\n                        if (!found) gravurFontSelect.selectedIndex = 0;\n                    }\n\n                    const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n                    if (!productForm) return;\n\n                    productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n                    const firstInput = productForm.querySelector(\"input, textarea, select\");\n                    if (firstInput) firstInput.focus();\n                });\n            });\n        });\n\n        \/* =========================\n           Specs Fade-In\n        ========================= *\/\n        document.addEventListener(\"DOMContentLoaded\", function () {\n            const uls = document.querySelectorAll('.engraving-specs ul');\n            const observer = new IntersectionObserver(entries =\u003e {\n                entries.forEach(entry =\u003e {\n                    if (entry.isIntersecting) entry.target.classList.add('visible');\n                });\n            }, { threshold: 0.3 });\n            uls.forEach(ul =\u003e observer.observe(ul));\n        });\n\n        \/* =========================\n           Size Buttons\n        ========================= *\/\n        document.querySelectorAll('.size-btn').forEach(btn =\u003e {\n            btn.addEventListener('click', () =\u003e {\n                document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n                btn.classList.add('active');\n                document.getElementById('engraving-size-value').textContent =\n                    btn.getAttribute('data-size');\n            });\n        });\n\n        \/* =========================\n           MAIN ENGRAVING LOGIC\n        ========================= *\/\n        document.addEventListener(\"DOMContentLoaded\", function () {\n\n            const input = document.getElementById(\"engravingInput\");\n            const previewText = document.getElementById(\"engravingPreviewText\");\n            const overlay = document.getElementById(\"engravingOverlay\");\n\n            \/* ---- Mobile Popup ---- *\/\n            const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n            const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n            function showPopup() {\n                if (window.innerWidth \u003e 768) return;\n                mobilePopup.classList.add(\"show\");\n            }\n            function hidePopup() {\n                mobilePopup.classList.remove(\"show\");\n            }\n\n            \/* ---- Desktop Effects ---- *\/\n            function triggerDesktopEffects() {\n                previewText.classList.remove(\"engrave-fade\");\n                void previewText.offsetWidth;\n                previewText.classList.add(\"engrave-fade\");\n\n                const check = document.querySelector(\".preview-check\");\n                if (check) {\n                    check.classList.add(\"show\");\n                    clearTimeout(check._timeout);\n                    check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n                }\n            }\n\n            \/* ---- Mobile Popup Sync ---- *\/\n            function updateMobilePopup(value) {\n                if (!mobilePopupText) return;\n\n                mobilePopupText.textContent = value;\n                mobilePopupText.style.fontFamily =\n                    window.getComputedStyle(previewText).fontFamily;\n\n                mobilePopupText.classList.remove(\"engrave-fade\");\n                void mobilePopupText.offsetWidth;\n                mobilePopupText.classList.add(\"engrave-fade\");\n\n                let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n                if (!popupCheck) {\n                    popupCheck = document.createElement(\"span\");\n                    popupCheck.className = \"popup-preview-check\";\n                    popupCheck.innerHTML = \"✔\";\n                    mobilePopupText.parentElement.appendChild(popupCheck);\n                }\n\n                popupCheck.classList.add(\"show\");\n                clearTimeout(popupCheck._timeout);\n                popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n                showPopup();\n            }\n\n            const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n            const fontButtons = document.querySelectorAll(\".font-btn\");\n            const hiddenFontInput = document.getElementById(\"selectedFont\");\n            const MAX_LENGTH = 11;\n            let lastValue = \"\";\n\n            function updatePreview(force = false) {\n                const value = input.value;\n                if (!value) {\n                    overlay.classList.remove(\"active\");\n                    hidePopup();\n                    lastValue = \"\";\n                    return;\n                }\n\n                previewText.textContent = value;\n                overlay.classList.add(\"active\");\n\n                if (force || value.length !== lastValue.length) {\n                    triggerDesktopEffects();\n                    updateMobilePopup(value);\n                }\n\n                lastValue = value;\n            }\n\n            input.addEventListener(\"input\", () =\u003e updatePreview());\n\n            \/* ---- Symbols ---- *\/\n            symbolButtons.forEach(btn =\u003e {\n                btn.addEventListener(\"click\", () =\u003e {\n                    const symbol = btn.dataset.symbol;\n                    if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n                    const start = input.selectionStart;\n                    const end = input.selectionEnd;\n                    input.value =\n                        input.value.substring(0, start) +\n                        symbol +\n                        input.value.substring(end);\n\n                    input.focus();\n                    input.selectionStart = input.selectionEnd = start + symbol.length;\n                    updatePreview(true);\n                });\n            });\n            function forcePopupUpdate() {\n                const value = input.value.trim();\n                if (!value) return;\n\n                \/\/ Popup Text \u0026 Font\n                mobilePopupText.textContent = value;\n                mobilePopupText.style.fontFamily =\n                    window.getComputedStyle(previewText).fontFamily;\n\n                \/\/ Glow\n                mobilePopupText.classList.remove(\"engrave-fade\");\n                void mobilePopupText.offsetWidth;\n                mobilePopupText.classList.add(\"engrave-fade\");\n\n                \/\/ Micro Check\n                let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n                if (!popupCheck) {\n                    popupCheck = document.createElement(\"span\");\n                    popupCheck.className = \"popup-preview-check\";\n                    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n                    mobilePopupText.parentElement.appendChild(popupCheck);\n                }\n                popupCheck.classList.add(\"show\");\n                clearTimeout(popupCheck._timeout);\n                popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n                \/\/ SHOW\n                if (window.innerWidth \u003c= 768) {\n                    mobilePopup.classList.add(\"show\");\n                }\n            }\n\n            \/* ---- Fonts ---- *\/\n            fontButtons.forEach(btn =\u003e {\n                btn.addEventListener(\"click\", () =\u003e {\n                    const font = btn.dataset.font;\n                    previewText.style.fontFamily = font;\n\/* ===== FONT POSITION CLASSES ===== *\/\n\n                    const previewWrap = document.querySelector(\".engraving-preview-text-wrap\");\n                    const popupWrap = document.querySelector(\".popup-preview-text-wrap\");\n\n                    \/* alle Klassen entfernen *\/\n\n                    const fontClasses = [\n                        \"font-timesnewroman\",\n                        \"font-georgia\",\n                        \"font-arial\",\n                        \"font-helvetica\",\n                        \"font-courier\",\n                        \"font-lucida\",\n                        \"font-allura\",\n                        \"font-alex\",\n                        \"font-kaushan\",\n                        \"font-pacifico\",\n                        \"font-indie\",\n                        \"font-dancing\"\n                    ];\n\n                    previewWrap?.classList.remove(...fontClasses);\n                    popupWrap?.classList.remove(...fontClasses);\n\n                    \/* neue Klasse setzen *\/\n\n                    function setFontClass(font) {\n\n                        let fontClass = \"\";\n\n                        if (font === \"Times New Roman\") fontClass = \"font-timesnewroman\";\n                        if (font === \"Georgia\") fontClass = \"font-georgia\";\n                        if (font === \"Arial\") fontClass = \"font-arial\";\n                        if (font === \"Helvetica\") fontClass = \"font-helvetica\";\n                        if (font === \"Courier New\") fontClass = \"font-courier\";\n                        if (font === \"Lucida Console\") fontClass = \"font-lucida\";\n                        if (font === \"Allura\") fontClass = \"font-allura\";\n                        if (font === \"Alex Brush\") fontClass = \"font-alex\";\n                        if (font === \"Kaushan Script\") fontClass = \"font-kaushan\";\n                        if (font === \"Pacifico\") fontClass = \"font-pacifico\";\n                        if (font === \"Indie Flower\") fontClass = \"font-indie\";\n                        if (font === \"Dancing Script\") fontClass = \"font-dancing\";\n\n                        previewWrap?.classList.add(fontClass);\n                        popupWrap?.classList.add(fontClass);\n\n                    }\n\n                    setFontClass(font);\n  \n                    const back = document.getElementById(\"gravurtext_2\");\n                    if (back) back.style.fontFamily = font;\n                    const back3 = document.getElementById(\"gravurtext_3\");\n                    if (back3) back3.style.fontFamily = font;\n                    const back4 = document.getElementById(\"gravurtext_4\");\n                    if (back4) back4.style.fontFamily = font;\n                    const back5 = document.getElementById(\"gravurtext_5\");\n                    if (back5) back5.style.fontFamily = font;\n                    const back6 = document.getElementById(\"gravurtext_6\");\n                    if (back6) back6.style.fontFamily = font;\n\n                    hiddenFontInput.value = font;\n                    updatePreview(true);\n                    \/\/ 🔥 DAS IST DER FIX\n                    forcePopupUpdate();\n\n                    fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n                    btn.classList.add(\"active\");\n                });\n            });\n\n            document.addEventListener(\"click\", e =\u003e {\n                if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n            });\n            window.addEventListener(\"scroll\", hidePopup);\n        });\n\n        \/* =========================\n           Preview Image Pulse\n        ========================= *\/\n        const previewImage = document.querySelector('.engraving-preview-image');\n        let hasPulsed = false;\n\n        function triggerPulse() {\n            if (!previewImage) return;\n            previewImage.classList.remove('pulse');\n            void previewImage.offsetWidth;\n            previewImage.classList.add('pulse');\n        }\n\n        document.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n            if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n                triggerPulse();\n                hasPulsed = true;\n            }\n        });\n\n        \/* =========================\n           Live Preview Link (WICHTIG!)\n        ========================= *\/\n        document.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n            link.addEventListener('click', e =\u003e {\n                e.preventDefault();\n                document\n                    .querySelector('#engraving-preview')\n                    .scrollIntoView({ behavior: 'smooth', block: 'center' });\n            });\n        });\n        \/* =========================\n           MOBILE FONT POPUP FIX\n           (isoliert, zerstört nichts)\n        ========================= *\/\n        document.addEventListener(\"DOMContentLoaded\", function () {\n\n            if (window.innerWidth \u003e 768) return;\n\n            const input = document.getElementById(\"engravingInput\");\n            const previewText = document.getElementById(\"engravingPreviewText\");\n            const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n            const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n            const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n            const fontButtons = document.querySelectorAll(\".font-btn\");\n\n            if (!input || !previewText || !popupText || !mobilePopup) return;\n\n            function showMobilePopup() {\n                mobilePopup.classList.add(\"show\");\n            }\n\n            function syncPopupFromPreview() {\n                const value = input.value.trim();\n                if (!value) return;\n\n                \/\/ Text + Font\n                popupText.textContent = value;\n                popupText.style.fontFamily =\n                    window.getComputedStyle(previewText).fontFamily;\n\n                \/\/ Glow\n                popupText.classList.remove(\"engrave-fade\");\n                void popupText.offsetWidth;\n                popupText.classList.add(\"engrave-fade\");\n\n                \/\/ Micro Check\n                if (popupCheck) {\n                    popupCheck.classList.add(\"show\");\n                    clearTimeout(popupCheck._timeout);\n                    popupCheck._timeout = setTimeout(\n                        () =\u003e popupCheck.classList.remove(\"show\"),\n                        1000\n                    );\n                }\n\n                showMobilePopup();\n            }\n\n            \/* 🔥 FONT-WECHSEL → POPUP *\/\n            fontButtons.forEach(btn =\u003e {\n                btn.addEventListener(\"click\", () =\u003e {\n                    requestAnimationFrame(syncPopupFromPreview);\n                });\n            });\n\n            \/* Sicherheit: auch bei erneutem Tippen *\/\n            input.addEventListener(\"input\", syncPopupFromPreview);\n\n        });\n      \n    \u003c\/script\u003e\n\n \n\u003c\/body\u003e","brand":"Juwelier Milano e.K.","offers":[{"title":"Edelstahl","offer_id":56805730746633,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Roségold (vergoldet)","offer_id":56805730779401,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet","offer_id":56805730812169,"sku":null,"price":59.0,"currency_code":"EUR","in_stock":true},{"title":"Schwarz-Matt","offer_id":56805730844937,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/products\/2023-04-19-18-08-55.jpg?v=1682036699"},{"product_id":"drehbare-edelstahl-anhanger-gravur-rund","title":"Drehbarer Edelstahl Anhänger mit Gravur – Runde Gravurplatte Unisex","description":"\u003cbody\u003e\n\n\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003ctitle\u003eDrehbare runde Edelstahl Halskette mit Gravur | Unisex Schmuck\u003c\/title\u003e\n\n    \u003c!-- SEO --\u003e\n    \u003cmeta name=\"description\" content=\"Elegante drehbare Edelstahl-Halskette mit runder Gravurplatte. Kostenlos personalisierbar mit Namen, Datum oder Symbol. Rostfrei, langlebig und unisex – ein zeitloses Schmuckstück mit Bedeutung. Jetzt individuell gravieren und verschenken.\"\u003e\n\n    \u003cmeta name=\"keywords\" content=\"Edelstahl Halskette Gravur\ndrehbare Halskette\nrunde Gravurplatte\npersonalisierte Kette Unisex\nGravurschmuck Edelstahl\nHalskette mit Namen\nSchmuck mit Gravur\"\u003e\n\n\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n\n    \u003c!-- Fonts --\u003e\n    \u003clink href=\"https:\/\/fonts.googleapis.com\/css2?family=Playfair+Display:wght@600;700\u0026amp;family=Inter:wght@300;400;500;600\u0026amp;display=swap\" rel=\"stylesheet\"\u003e\n\n    \u003c!-- Bootstrap Icons --\u003e\n    \u003clink href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap-icons@1.11.1\/font\/bootstrap-icons.css\" rel=\"stylesheet\"\u003e\n\n    \u003cstyle\u003e\n    \/* ==============================\n       SCOPED PRODUCT STYLES\n       ============================== *\/\n\n    .engraving-product {\n      font-family: 'Inter', sans-serif;\n      color: #111;\n    }\n\n    .engraving-product .container {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n    .engraving-product .container2 {\n      max-width: 1200px;\n      width:110%;\n      margin: 0 auto;\n      padding: 0 20px;\n    }\n\n    \/* HERO *\/\n    .engraving-hero {\n  padding: 80px 20px;\n  background: #f9f9f9;\n}\n\n.engraving-hero-grid-wrapper {\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 0 15px;\n}\n\n.engraving-hero-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: start; \/* Bild auf gleiche Höhe wie Text *\/\n}\n\n.engraving-hero-text {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n.engraving-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  font-weight: 600;\n  color: #bfac79;\n  margin-bottom: 15px;\n}\n\n.engraving-badge i {\n  font-size: 1.2rem;\n}\n\n.engraving-hero-text h1 {\n  font-size: 3.8rem;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  font-family: 'Playfair Display', serif;\n}\n\n.engraving-hero-text p {\n  font-size: 1.4rem;\n  color: #555;\n  margin-bottom: 25px;\n}\n\n    .engraving-cta {\n      display: inline-flex;\n      align-items: center;\n      gap: 10px;\n      padding: 16px 40px;\n      background: #111;\n      color: #fff;\n      border-radius: 40px;\n      font-weight: 500;\n      transition: all .3s ease;\n    }\n\n    .engraving-cta:hover {\n      transform: translateY(-2px);\n      box-shadow: 0 20px 40px rgba(0,0,0,.2);\n    }\n\n    .engraving-trust {\n     margin-top: 25px;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 20px;\n      color: #777;\n      flex-wrap: wrap;\n    }\n\n    .engraving-trust span {\n      display: flex;\n  align-items: center;\n  gap: 8px;\n    }\n    .engraving-image {\n display: flex;\n  align-items: flex-start; \/* Bild oben an Text ausrichten *\/\n  justify-content: center;\n}\n\n   .engraving-image img {\n   width: 140%;\n  max-width: 550px; \/* optional, für Desktop-Breite *\/\n  object-fit: contain;\n  border-radius: 30px;\n       box-shadow: 0 2px 28px rgb(0 0 0 \/ 47%);\n     \/* box-shadow: 0 30px 80px rgba(0,0,0,0.18); *\/\n}\n\n    \/* Responsive *\/\n@media (max-width: 992px) {\n  .engraving-hero-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n  }\n  .engraving-image {\n    justify-content: center;\n  }\n  .engraving-hero-text h1 {\n    font-size: 2.9rem;\n     margin-top: 0px;\n    line-height: 1.2;\n    margin-bottom: 20px;\n    color: #222;\n    font-weight: 600;\n  }\n}\n\n    \/* SECTIONS *\/\n    .engraving-section {\n      padding: 40px 0;\n    }\n\n    .engraving-section h2 {\n      font-family: 'Playfair Display', serif;\n      font-size: 38px;\n      margin-bottom: 20px;\n    }\n\n    .engraving-section-desc {\n      max-width: 720px;\n      color: #666;\n      margin-bottom: 60px;\n    }\n\n    \/* FEATURES *\/\n    .engraving-features {\n      display: grid;\n      grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n      gap: 40px;\n    }\n\n    .engraving-feature {\n      background: #fff;\n      padding: 40px;\n      border-radius: 28px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.06);\n      transition: transform .4s ease;\n    }\n\n    .engraving-feature:hover {\n      transform: translateY(-6px);\n    }\n\n    .engraving-feature i {\n      font-size: 32px;\n      color: #b6a573;\n      margin-bottom: 14px;\n      display: inline-block;\n    }\n\n    .engraving-feature h3 {\n      margin-bottom: 10px;\n      font-size: 18px;\n    }\n\n    .engraving-feature p {\n      font-size: 15px;\n      color: #666;\n    }\n\n    \/* SPECS *\/\n    .engraving-specs {\n      background: #fff;\n      border-radius: 30px;\n      padding: 50px;\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      gap: 40px;\n      box-shadow: 0 20px 50px rgba(0,0,0,.05);\n    }\n\n    .engraving-specs ul {\n      list-style: none;\n      padding: 0;\n    }\n\n    .engraving-specs li {\n      padding: 12px 0;\n      border-bottom: 1px solid #eee;\n      font-size: 15px;\n      display: flex;\n      gap: 10px;\n      align-items: center;\n    }\n\n    .engraving-specs i {\n      color: #b6a573;\n    }\n\n    \/* CTA STRIP *\/\n    .engraving-cta-strip {\n      background: linear-gradient(135deg, #111, #1c1c1c);\n      color: #fff;\n      padding: 80px 20px;\n      text-align: center;\n    }\n\n    .engraving-cta-strip h2 {\n      color: #fff;\n      margin-bottom: 20px;\n    }\n\n    .engraving-cta-strip p {\n      color: #ccc;\n      margin-bottom: 30px;\n    }\n\n    \/* ANIMATION *\/\n    .engraving-fade {\n      opacity: 0;\n      transform: translateY(30px);\n      transition: 1s ease;\n    }\n\n    .engraving-fade.show {\n      opacity: 1;\n      transform: none;\n    }\n\n    \/* RESPONSIVE *\/\n    @media (max-width: 900px) {\n      .engraving-hero-grid {\n        grid-template-columns: 1fr;\n        gap: 50px;\n      }\n    }\n\n.engraving-collection-btn {\n    position: relative;\n    padding: 14px 28px;\n    border-radius: 12px;\n      background: linear-gradient(135deg, #c7aaaa, #1a1a1a);\n    color: rgb(255, 255, 255);\n    font-weight: 400;\n    font-size: 13px;\n  border-radius: 999px;\n    letter-spacing: .5px;\n    border: 1px solid rgba(220, 184, 75, 0.6);\n    cursor: pointer;\n    overflow: hidden;\n    box-shadow: 0 0 0 rgba(220, 184, 75, 0), inset 0 0 0 rgba(220, 184, 75, 0);\n    transition: all .35s ease;\n}\n .engraving-collection-btn:hover {\n    transform: translateY(-1px);\n    box-shadow: 0 0 25px rgba(220, 184, 75, .45), inset 0 0 20px rgba(220, 184, 75, .15);\n    color: #ffdd7a;\n }\n.engraving-collection-btn::before {\n    content: '';\n    position: absolute;\n    inset: -1px;\n    border-radius: inherit;\n    background: radial-gradient(circle at 50% 120%, rgba(220, 184, 75, .35), transparent 65%);\n    opacity: .45;\n    pointer-events: none;\n    animation: idleGlow 4.5s ease-in-out infinite;\n}\n    .engraving-collection-btn::after {\n    content: '';\n    position: absolute;\n    inset: -120%;\n    background: radial-gradient(circle, rgba(220, 184, 75, .55), transparent 60%);\n    opacity: 0;\n    transform: scale(.2);\n    pointer-events: none;\n}\n\n.engraving-collection-btn:hover::after {\n    animation: pulseGlow 1.1s ease-out forwards;\n}\n\n\n\n.micro-trust-valentine {\n    margin-top: 1.5rem;\n    font-size: 1.3rem;\n    color: #746742;\n    font-weight: 600;\n}\n\u003c!-- =========================\n     SPECS CSS\n========================== --\u003e\n\u003cstyle\u003e\n.engraving-specs {\n  display: flex;\n  justify-content: center;\n  gap: 60px; \/* Abstand zwischen den beiden Listen *\/\n  flex-wrap: wrap; \/* wichtig für mobile Ansicht *\/\n  margin-top: 30px;\n}\n\n.engraving-specs ul {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n}\n\n.engraving-specs ul li {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n\n  color: #555;\n  margin-bottom: 12px;\n}\n\n.engraving-specs ul li i {\n   color: #bfac79;\n\n  transition: transform 0.3s ease, color 0.3s ease;\n}\n    .engraving-specs ul li:hover i {\n  transform: scale(1.3);\n  color: #9f8650;\n}\n\n\/* Responsive: Auf mobilen Geräten untereinander zentrieren *\/\n@media (max-width: 768px) {\n  .engraving-specs {\n    flex-direction: column;\n    align-items: center;\n    gap: 25px;\n    grid-template-columns: auto;\n  }\n  .engraving-specs ul {\n    text-align: center;\n  }\n}\n\n    \/* Größen Auswahl *\/\n.engraving-size-selector {\n  display: flex;\n  gap: 16px;\n  justify-content: center;\n  margin: 30px 0 40px;\n  flex-wrap: wrap;\n}\n\n.size-btn {\n  border: 1px solid #ddd;\n  background: #fff;\n  border-radius: 14px;\n  padding: 14px 22px;\n  cursor: pointer;\n  font-weight: 600;\n  text-align: center;\n  transition: all 0.3s ease;\n}\n\n.size-btn span {\n  display: block;\n  font-size: 13px;\n  color: #777;\n  margin-top: 4px;\n}\n\n.size-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-2px);\n}\n\n.size-btn.active {\n  background: #f7f4ef;\n  border-color: #bfac79;\n  color: #000;\n  box-shadow: 0 8px 20px rgba(0,0,0,0.08);\n}\n\n\/* Mobile *\/\n@media (max-width: 768px) {\n  .engraving-size-selector {\n    gap: 12px;\n  }\n\n  .size-btn {\n    width: 100%;\n    max-width: 260px;\n  }\n}\n\/* =========================\n   SHIPPING \u0026 TRUST BLOCK\n========================== *\/\n\n.engraving-shipping {\n  padding: 20px 0;\n  background: linear-gradient(180deg, #faf9f7 0%, #ffffff 100%);\n}\n\n.engraving-shipping-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 40px;\n}\n.engraving-shipping h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 40px;\n  color: #1f2a2a;\n      text-align: center;\n}\n.shipping-item {\n  text-align: center;\n  padding: 40px 28px;\n  background: #fff;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.shipping-item:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0, 0, 0, 0.1);\n}\n\n.shipping-item i {\n  font-size: 2.8rem;\n  color: #bfac79; \/* warmes Premium-Gold *\/\n  margin-bottom: 18px;\n}\n\n.shipping-item h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.shipping-item p {\n  font-size: 1.3rem;\n  color: #555;\n  line-height: 1.6;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n\n@media (max-width: 900px) {\n  .engraving-shipping-grid {\n    grid-template-columns: 1fr;\n    gap: 28px;\n  }\n\n  .shipping-item {\n    padding: 32px 22px;\n  }\n}\n\n\/* =========================\n   WHY HEART STORY BLOCK\n========================== *\/\n\n.engraving-why-heart {\n  padding: 80px 0;\n  background: #faf9f7;\n  text-align: center;\n}\n\n.engraving-why-heart h2 {\n  font-size: 2.2rem;\n  font-weight: 700;\n  margin-bottom: 16px;\n  color: #1f2a2a;\n}\n\n.engraving-why-heart p {\n  max-width: 650px;\n  margin: 0 auto 50px auto;\n  font-size: 1.3rem;\n  line-height: 1.7;\n  color: #555;\n}\n\n.engraving-why-grid {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 40px;\n}\n\n.engraving-feature {\n  background: #fff;\n  padding: 30px 20px;\n  border-radius: 20px;\n  box-shadow: 0 18px 45px rgba(0,0,0,0.06);\n  transition: transform 0.4s ease, box-shadow 0.4s ease;\n}\n\n.engraving-feature:hover {\n  transform: translateY(-6px);\n  box-shadow: 0 28px 65px rgba(0,0,0,0.1);\n}\n\n.engraving-feature i {\n  font-size: 2.5rem;\n  color: #bfac79; \/* Premium-Gold *\/\n  margin-bottom: 16px;\n}\n\n.engraving-feature h3 {\n  font-size: 1.6rem;\n  margin-bottom: 10px;\n  font-weight: 600;\n  color: #1f2a2a;\n      margin-top: 10px;\n}\n\n.engraving-feature p {\n  font-size: 1.3rem;\n  line-height: 1.6;\n  color: #555;\n}\n\n\/* =========================\n   RESPONSIVE\n========================== *\/\n@media (max-width: 1200px) {\n  .engraving-why-grid {\n    grid-template-columns: repeat(2, 1fr);\n    gap: 30px;\n  }\n}\n\n@media (max-width: 700px) {\n  .engraving-why-grid {\n    grid-template-columns: 1fr;\n    gap: 25px;\n  }\n\n  .engraving-why-heart p {\n    margin-bottom: 40px;\n  }\n}\n    \/* =========================\n   GRAVUR LIVE PREVIEW\n========================== *\/\n.engraving-preview-section {\n  padding: 40px 0;\n  background: #ffffff;\n}\n\n.engraving-preview-grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 80px;\n  align-items: center;\n}\n\n\/* IMAGE *\/\n.engraving-preview-image {\n  position: relative;\n  max-width: 460px;\n}\n\n.engraving-preview-image img {\n  width: 100%;\n  border-radius: 28px;\n\n}\n\n\/* OVERLAY *\/\n.engraving-overlay {\n  position: absolute;\n  inset: 0;\n  display: flex;\n  align-items: flex-end;\n  justify-content: center;\n  padding-bottom: 35%;\n  pointer-events: none;\n  opacity: 0;\n  transform: translateY(6px);\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n.engraving-overlay.active {\n  opacity: 1;\n  transform: translateY(0);\n}\n\n.engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n\n  color: rgb(186 186 186 \/ 94%);\n\/* Laser-Effekt *\/\n  text-shadow:\n    0 1px 1px rgba(0,0,0,0.6),\n    0 -1px 0 rgba(255,255,255,0.15);\n\n\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n}\n\n\/* CONTENT *\/\n.engraving-preview-content h2 {\n    font-size: 2.1rem;\n    margin-bottom: 12px;\n    color: #4b2f2f;\n    font-weight: 600;\n    margin-top: 25px;\n}\n\n.engraving-preview-content p {\n  max-width: 480px;\n  margin-bottom: 28px;\n  color: #555;\n  line-height: 1.6;\n}\n\n.engraving-badge {\n  display: inline-block;\n  margin-bottom: 16px;\n  font-size: 1.2rem;\n  padding: 6px 14px;\n  border-radius: 999px;\n  background: #f4f1e8;\n  color: #7a6a3a;\n  font-weight: 600;\n}\n\n\/* INPUT *\/\n.engraving-input-wrap,\n.engraving-font-select {\n  margin-bottom: 18px;\n}\n\n.engraving-input-wrap label,\n.engraving-font-select label {\n  display: block;\n  font-weight: 600;\n  margin-bottom: 6px;\n}\n\n.engraving-input-wrap input,\n.engraving-font-select select {\n  width: 50%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.5rem;\n}\n\n.engraving-input-wrap input:focus,\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n.engraving-input-wrap small {\n  display: block;\n  margin-top: 6px;\n  font-size: 0.85rem;\n  color: #777;\n}\n\n\n\n.engraving-collection-btn i {\n  margin-left: 8px;\n}\n\n\/* TRUST *\/\n.engraving-micro-trust {\n  margin-top: 16px;\n  font-size: 1.2rem;\n  color: #4b8484;\n}\n\n\/* RESPONSIVE *\/\n@media (max-width: 900px) {\n  .engraving-preview-grid {\n    grid-template-columns: 1fr;\n    gap: 50px;\n    text-align: center;\n  }\n\n  .engraving-preview-image {\n    margin: 0 auto;\n  }\n}\n   \/* SYMBOL PICKER *\/\n.engraving-symbol-picker {\n  margin-bottom: 22px;\n}\n\n.symbol-title {\n  display: block;\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-bottom: 8px;\n  color: #444;\n}\n\n.symbol-list {\n  display: flex;\n  gap: 10px;\n  flex-wrap: wrap;\n}\n\n.symbol-btn {\n  width: 44px;\n  height: 44px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  background: #fff;\n  font-size: 2rem;\n  cursor: pointer;\n  transition: all 0.25s ease;\n}\n\n.symbol-btn:hover {\n  border-color: #bfac79;\n  background: #f6f3ea;\n  transform: translateY(-2px);\n}\n\n.symbol-btn:active {\n      transform: scale(1.05);\n    background: #d7bf78;\n}\n    .engraving-font-select {\n  margin-bottom: 22px;\n}\n\n.engraving-font-select label {\n  display: block;\n  margin-bottom: 6px;\n  font-weight: 600;\n}\n\n.engraving-font-select select {\n  width: 100%;\n  padding: 14px 16px;\n  border-radius: 12px;\n  border: 1px solid #ddd;\n  font-size: 1.4rem;\n  background: #fff;\n}\n\n.engraving-font-select select:focus {\n  outline: none;\n  border-color: #bfac79;\n}\n\n\n    .engraving-font-picker {\n  margin-bottom: 28px;\n}\n\n.font-picker-label {\n  display: block;\n  margin-bottom: 12px;\n\n}\n\n.font-group {\n  margin-bottom: 16px;\n}\n\n.font-group-title {\n  display: block;\n  font-size: 0.85rem;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: #777;\n  margin-bottom: 8px;\n}\n\n.font-btn {\n  display: inline-block;\n  margin: 6px 6px 0 0;\n  padding: 12px 16px;\n  border-radius: 14px;\n  border: 1px solid #ddd;\n  background: #fff;\n  cursor: pointer;\n  font-size: 1.05rem; \/* mobile readable *\/\n  transition: all 0.25s ease;\n}\n\n.font-btn.script {\n  font-size: 1.2rem; \/* Scripts größer für Lesbarkeit *\/\n}\n\n.font-btn:hover {\n  border-color: #bfac79;\n  transform: translateY(-1px);\n}\n\n\n.font-btn.active {\n  border-color: #bfac79;\n  background: rgba(191,172,121,0.15);\n  box-shadow: 0 6px 18px rgba(0,0,0,0.08);\n}\n\/* =========================\n   MOBILE COMPACT BUTTONS\n========================== *\/\n\n@media (max-width: 640px) {\n\n  \/* FONT GROUP GRID *\/\n  .font-group {\n    display: grid;\n    grid-template-columns: auto 1fr; \/* Titel | Buttons *\/\n    column-gap: 50px;\n    align-items: start;\n    margin-bottom: 16px;\n    border-bottom: 1px solid rgba(0,0,0,0.06);\n  padding-bottom: 12px;\n  }\n.font-group-buttons {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr); \/* kompakt *\/\n    gap: 8px;\n  }\n  \/* FONT BUTTONS *\/\n  .font-btn {\n    height: 42px;\n    padding: 0 6px;\n    font-size: 0.9rem;\n    border-radius: 10px;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    white-space: nowrap;\n    line-height: 1;\n  }\n\n  .font-btn.script {\n    font-size: 1rem;\n  }\n\n  \/* SYMBOLS *\/\n  .symbol-list {\n    display: grid;\n    grid-template-columns: repeat(5, 1fr); \/* schöne Symmetrie *\/\n    gap: 10px;\n  }\n\n  .symbol-btn {\n    height: 44px;\n    font-size: 1.25rem;\n\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    border-radius: 10px;\n  }\n\n  \/* Titles ruhiger *\/\n  .font-group-title,\n  .symbol-title {\n    font-size: 1.15rem;\n    margin-bottom: 15px;\n    opacity: 0.65;\n  }\n\n  .font-group-title {\n    font-size: 0.75rem;\n    font-weight: 600;\n    opacity: 0.6;\n    white-space: nowrap;\n    padding-top: 12px; \/* vertikal sauber *\/\n  }\n}\n\n.live-preview-link {\n  margin-left: 6px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  cursor: pointer;\n  transition: opacity 0.2s ease;\n}\n\n.live-preview-link:hover {\n  opacity: 0.75;\n  text-decoration: underline;\n}\n\n.live-preview-link.premium {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #5aa3a3;\n  text-decoration: none;\n  position: relative;\n  padding-bottom: 2px;\n  border-bottom: 1px solid rgb(75 132 132 \/ 0%);\n}\n\n.live-preview-link.premium::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(90deg, #5aa3a3, #9fd6d6);\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.premium:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.premium:hover {\n  opacity: 0.9;\n}\n.live-preview-link.glow {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #4b8484;\n  text-decoration: none;\n  animation: pulseGlow 2.5s ease-in-out infinite;\n}\n\n@keyframes pulseGlow {\n  0% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n  50% { text-shadow: 0 0 8px rgba(75,132,132,0.45); }\n  100% { text-shadow: 0 0 0 rgba(75,132,132,0); }\n}\n\n.live-preview-link.glow:hover {\n  opacity: 0.85;\n}\n\n.live-preview-link.badge {\n  margin-left: 10px;\n  padding: 4px 10px;\n  font-size: 0.85rem;\n  font-weight: 600;\n  color: #2f6f6f;\n  background: rgba(79, 140, 140, 0.12);\n  border-radius: 999px;\n  text-decoration: none;\n  transition: all 0.25s ease;\n}\n\n.live-preview-link.badge:hover {\n  background: rgba(79, 140, 140, 0.22);\n  transform: translateY(-1px);\n}\n\n    \/* =========================\n   Base Luxury Style\n========================= *\/\n.live-preview-link.luxury {\n  margin-left: 8px;\n  font-weight: 600;\n  color: #ab8e4c; \/*  Gold *\/\n  text-decoration: none;\n  position: relative;\n  letter-spacing: 0.02em;\n  transition: color 0.25s ease, opacity 0.25s ease;\n}\n\n\/* Edle Gold-Linie *\/\n.live-preview-link.luxury::after {\n  content: \"\";\n  position: absolute;\n  left: 0;\n  bottom: -2px;\n  width: 0%;\n  height: 1px;\n  background: linear-gradient(\n    90deg,\n    rgba(201,168,92,0.0),\n    rgba(201,168,92,0.9),\n    rgba(201,168,92,0.0)\n  );\n  transition: width 0.35s ease;\n}\n\n.live-preview-link.luxury:hover::after {\n  width: 100%;\n}\n\n.live-preview-link.luxury:hover {\n  opacity: 0.9;\n}\n\n\/* =========================\n   MOBILE ONLY – Eye Catcher\n========================= *\/\n@media (max-width: 768px) {\n  .live-preview-link.luxury {\n    animation: luxuryGlow 2.2s ease-in-out infinite;\n  }\n\n  @keyframes luxuryGlow {\n    0% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n    50% {\n      text-shadow:\n        0 0 10px rgba(201,168,92,0.55),\n        0 0 22px rgba(201,168,92,0.25);\n    }\n    100% {\n      text-shadow:\n        0 0 0 rgba(201,168,92,0),\n        0 0 0 rgba(201,168,92,0);\n    }\n  }\n}\n\n\/* =========================\n   LUXURY SHINE BUTTON\n========================= *\/\n.luxury-shine-btn {\n  position: relative;\n  font-size: 1.2rem;\n    margin-bottom: 16px;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n\n  padding: 5px 12px;\n  border-radius: 999px;\n\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n\n  color: #e6d3a3;\n  background: linear-gradient(\n    180deg,\n    #141414,\n    #0d0d0d\n  );\n\n  border: 1px solid rgba(201,168,92,0.45);\n\n  overflow: hidden;\n  isolation: isolate;\n\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n\/* Hover – minimal, edel *\/\n.luxury-shine-btn:hover {\n  transform: translateY(-1px);\n  box-shadow:\n    0 8px 20px rgba(0,0,0,0.35),\n    0 0 0 1px rgba(201,168,92,0.35);\n}\n\n\/* =========================\n   GOLD LASER SHINE\n========================= *\/\n.luxury-shine-btn::before {\n  content: \"\";\n  position: absolute;\n  top: -60%;\n  left: -120%;\n\n  width: 60%;\n  height: 220%;\n\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(255,214,130,0.65) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n\n  transform: skewX(-20deg);\n  opacity: 0.9;\n\n  animation: goldLaser 3s ease-in-out infinite;\n}\n\n\/* Laser Bewegung *\/\n@keyframes goldLaser {\n  0% {\n    left: -120%;\n  }\n  55% {\n    left: 140%;\n  }\n  100% {\n    left: 140%;\n  }\n}\n\n\/* =========================\n   ICON GOLD TONE\n========================= *\/\n.luxury-shine-btn i {\n  color: #c9a85c;\n  font-size: 1.1em;\n}\n\/* =========================\n   TAP PULSE (SUBTIL)\n========================= *\/\n.luxury-shine-btn::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  border-radius: inherit;\n  background: radial-gradient(\n    circle at center,\n    rgba(255,215,160,0.35),\n    transparent 70%\n  );\n  opacity: 0;\n  transform: scale(0.85);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n  pointer-events: none;\n}\n\n.luxury-shine-btn:active::after {\n  opacity: 1;\n  transform: scale(1.05);\n}\n\n \/*Roségold (warm \u0026 emotional – perfekt für Herzanhänger) *\/\n .luxury-rose {\n  color: #f1c7b6;\n  border-color: rgba(224,168,140,0.5);\n}\n\n.luxury-rose::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,220,210,0.0) 35%,\n    rgba(255,190,170,0.7) 50%,\n    rgba(255,220,210,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-rose i {\n  color: #e0a88c;\n   font-size: 1.1em;\n}\n\n     \/*Weißgold (clean, modern, Premium) *\/\n.luxury-whitegold {\n  color: #e8ecef;\n  border-color: rgba(200,205,210,0.45);\n}\n\n.luxury-whitegold::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(255,255,255,0.0) 35%,\n    rgba(230,235,240,0.75) 50%,\n    rgba(255,255,255,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-whitegold i {\n  color: #cfd6dc;\n}\n\/*Silber (technisch, kühl, elegant)*\/\n  .luxury-silver {\n  color: #d7d7d7;\n  border-color: rgba(180,180,180,0.45);\n}\n\n.luxury-silver::before {\n  background: linear-gradient(\n    120deg,\n    transparent 0%,\n    rgba(240,240,240,0.0) 35%,\n    rgba(215,215,215,0.7) 50%,\n    rgba(240,240,240,0.0) 65%,\n    transparent 100%\n  );\n}\n\n.luxury-silver i {\n  color: #bfbfbf;\n}\n @media (max-width: 768px) {\n  .luxury-shine-btn::before {\n    animation-duration: 2.4s;\n  }\n}\n\n@keyframes engravingPulse {\n  0%   { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n  40%  { transform: scale(1.02); box-shadow: 0 0 0 6px rgba(191,172,121,0.25); }\n  100% { transform: scale(1); box-shadow: 0 0 0 rgba(191,172,121,0.0); }\n}\n\n.engraving-preview-image.pulse {\n  animation: engravingPulse 0.6s ease-out;\n}\n @keyframes symbolGlow {\n  0%   { background: rgba(191,172,121,0.15); }\n  100% { background: transparent; }\n}\n\n.engraving-overlay.symbol-highlight span {\n  animation: symbolGlow 0.8s ease;\n}\n\n.symbol-btn.active {\n  transform: scale(1.15);\n  background: #bfac79;\n  color: #fff;\n}\n\n    .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n      bottom:35px;\n      left:35px;\n}\n\n\/* ✔ Mini Check *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n\/* ✨ Edler Brand-Glow *\/\n.preview-glow {\n  animation: brandGlow 0.8s ease-out;\n}\n\n@keyframes brandGlow {\n  0% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n  30% {\n    text-shadow:\n      0 0 8px rgba(180, 150, 100, 0.5),\n      0 0 12px rgba(180, 150, 100, 0.4),\n      0 0 20px rgba(180, 150, 100, 0.3);\n  }\n  60% {\n    text-shadow:\n      0 0 12px rgba(180, 150, 100, 0.45),\n      0 0 18px rgba(180, 150, 100, 0.35),\n      0 0 28px rgba(180, 150, 100, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(180, 150, 100, 0);\n  }\n}\n\n\/* ✨ Edler golden fade *\/\n .engrave-fade {\n  animation: engraveFade 0.9s ease-out;\n\n}\n\n@keyframes engraveFade {\n  0% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n\n  }\n  40% {\n    text-shadow:\n      0 0 6px rgba(191, 172, 121, 0.45),\n      0 0 14px rgba(191, 172, 121, 0.25);\n  }\n  100% {\n    text-shadow: 0 0 0 rgba(191, 172, 121, 0);\n  }\n}\n\n\n\/* ✔ Mini Checkmark bleibt gleich *\/\n.preview-check {\n  font-size: 14px;\n  opacity: 0;\n  transform: scale(0.6);\n  transition: opacity 0.25s ease, transform 0.25s ease;\n}\n\n.preview-check.show {\n  opacity: 1;\n  transform: scale(1);\n}\n\n.preview-metal-sweep {\n  position: relative;\n  overflow: hidden;\n}\n\n.preview-metal-sweep::after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: -60%;\n  width: 60%;\n  height: 100%;\n  background: linear-gradient(\n    120deg,\n    transparent,\n    rgba(255, 215, 160, 0.45),\n    transparent\n  );\n  animation: metalSweep 0.6s ease-out;\n  pointer-events: none;\n}\n\n@keyframes metalSweep {\n  to {\n    left: 120%;\n  }\n}\n.engraving-preview-note {\n  margin-top: 10px;\n  font-size: 12.5px;\n  line-height: 1.45;\n  color: rgba(60, 60, 60, 0.75);\n  text-align: center;\n  letter-spacing: 0.02em;\n  font-style: normal;\n   animation: fadeInSoft 0.6s ease-out both;\n}\n    @keyframes fadeInSoft {\n  from {\n    opacity: 0;\n    transform: translateY(-2px);\n  }\n  to {\n    opacity: 1;\n    transform: translateY(0);\n  }\n}\n\n\n\n\/* Mobile leicht kompakter *\/\n@media (max-width: 640px) {\n  .engraving-preview-note {\n    font-size: 12px;\n    padding: 0 12px;\n  }\n}\n\n\n#engraving-mobile-popup {\n  display: block; \/* block damit transition sichtbar wird *\/\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 235px;\n  z-index: 9999;\n  background: #6e644533;\n  padding: 20px;\n  box-shadow: 0 -10px 30px rgba(0,0,0,.18);\n  opacity: 0;\n  transform: translateY(18px);\n  pointer-events: none;\n  transition: opacity 0.35s ease, transform 0.35s ease;\n}\n\n#engraving-mobile-popup.show {\n  opacity: 1;\n  transform: translateY(0);\n  pointer-events: auto;\n}\n.popup-preview-text {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  font-size: 2rem;\n  letter-spacing: 0.08em;\n  color: rgb(217 217 217 \/ 84%);\n  text-shadow: 0 1px 1px rgba(0,0,0,0.6), 0 -1px 0 rgba(255,255,255,0.15);\n  padding: 6px 16px;\n  border-radius: 10px;\n  backdrop-filter: blur(2px);\n  text-align: center;\n  transition: all 0.25s ease;\n}\n\n.popup-preview-text.glow {\n  text-shadow:\n    0 0 4px #fff,\n    0 0 8px #fff,\n    0 0 12px #ffd700;\n}\n\n.popup-preview-check {\n  position: absolute;\n top: -15px;\n    left: 65px;\n    font-size: 2.5rem;\n  opacity: 0;\n  transition: opacity 0.5s ease;\n}\n\n.popup-preview-check.show {\n  opacity: 1;\n}\n@media (min-width: 769px) {\n  #engraving-mobile-popup { display: none !important; }\n}\n     @media (max-width: 769px) {\n      .engraving-overlay {\n   position: absolute;\n  inset: 0;\n  pointer-events: none;\n}\n .engraving-overlay span {\n  font-family: \"Playfair Display\", serif;\n  font-size: 1.7rem;\n  letter-spacing: 0.02em;\n  color: rgb(217 217 217 \/ 71%);\n\/* Laser-Effekt *\/\n      text-shadow: 0 1px 1px rgb(0 0 0 \/ 86%), 0 -1px 0 rgba(255, 255, 255, 0.15);\n  padding: 6px 16px;\n    border-radius: 10px;\n    backdrop-filter: blur(1px);\n}\n}\n\n@media (max-width: 769px) {\n .engraving-preview-text-wrap {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n         bottom: 54px;\n  left: 30px !important;\n\n}\n  .popup-preview-text-wrap {\n       position: absolute;\n                top: 50%;\n        left: 50%;\n\n  white-space: nowrap;\n  display: block;\n\n}\n\n}\n    .hero-subline {\n  display: flex;\n  align-items: center;\n  gap: 14px;\n  margin-top: 12px;\n  flex-wrap: wrap;\n}\n\n.hero-subline .engraving-badge {\n  font-size: 1.1rem;\n  opacity: 0.85;\n}\n@media (max-width: 768px) {\n  .hero-subline {\n    justify-content: center;\n  }\n\n  .luxury-shine-btn {\n    margin-top: 6px;\n  }\n}\n    \u003c\/style\u003e\n\n\n\n\n    \u003cdiv class=\"engraving-product\"\u003e\n\n        \u003c!-- =========================\n         HERO: Edelstahl runder Anhänger\n    ========================== --\u003e\n        \u003csection class=\"engraving-hero engraving-fade show\"\u003e\n            \u003cdiv class=\"engraving-hero-grid-wrapper\"\u003e\n                \u003cdiv class=\"engraving-hero-grid\"\u003e\n\n                    \u003c!-- Textbereich --\u003e\n                    \u003cdiv class=\"engraving-hero-text\"\u003e\n\n\n                        \u003ch1\u003eDrehbare Edelstahl Anhänger mit persönlicher Gravur\u003c\/h1\u003e\n                        \u003cdiv class=\"hero-subline\"\u003e\n                            \u003cspan class=\"engraving-badge\"\u003e\n                                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Gravur\n                            \u003c\/span\u003e\n\n                            \u003cspan class=\"engraving-badge engraving-badge-outline\"\u003e\n                                \u003ci class=\"bi bi-image\"\u003e\u003c\/i\u003e Fotogravur möglich – kontaktiere uns zur Prüfung deines Fotos\n                            \u003c\/span\u003e\n\n                            \u003ca href=\"#engraving-preview\" class=\"luxury-shine-btn luxury-rose live-preview-link\"\u003e\n                                \u003ci class=\"bi bi-eye\"\u003e\u003c\/i\u003e\n                                Live-Vorschau ansehen\n                            \u003c\/a\u003e\n                        \u003c\/div\u003e\n\n                        \u003cp\u003e\n                            Dieser drehbare, runde Edelstahl-Anhänger verbindet modernes Design\n                            mit individueller Bedeutung. Personalisiere die Gravurplatte mit Namen,\n                            Datum, Fotogravur, Koordinaten oder einer Botschaft – präzise graviert, langlebig\n                            und zeitlos.\n                        \u003c\/p\u003e\n\n                        \u003c!-- CTA Button scrollt nach oben zum Produktformular --\u003e\n                        \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                            Jetzt personalisieren \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                        \u003c\/button\u003e\n\n                        \u003cdiv class=\"micro-trust-valentine\"\u003e\n                            Sicher · Persönlich · Handgefertigt\n                        \u003c\/div\u003e\n\n                        \u003c!-- Trust Icons --\u003e\n                        \u003cdiv class=\"engraving-trust\"\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e Edelstahl\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e Hochglanz Finish\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e Ø 25 mm\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-layers\"\u003e\u003c\/i\u003e ca. 8 g\u003c\/span\u003e\n                            \u003cspan\u003e\u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e Unisex\u003c\/span\u003e\n                        \u003c\/div\u003e\n                        \u003cdiv class=\"micro-trust-valentine\" style=\"\n    text-align: left;\n\"\u003e\n                            * Angeboten wird ausschließlich der Anhänger – ohne Kette\n                        \u003c\/div\u003e\n                    \u003c\/div\u003e\n\n                    \u003c!-- Bildbereich --\u003e\n                    \u003cdiv class=\"engraving-image\"\u003e\n                        \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Gesamt_drehbar_26.png?v=1771251098\" alt=\"Drehbarer runder Edelstahl Anhänger mit Gravurplatte\"\u003e\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- =========================\n         WHY  STORY BLOCK\n    ========================== --\u003e\n        \u003csection class=\"engraving-why-heart engraving-fade\"\u003e\n            \u003cdiv class=\"container\"\u003e\n                \u003ch2\u003eWarum dieser Anhänger?\u003c\/h2\u003e\n                \u003cp\u003e\n                    Dieser drehbare, runde Edelstahl-Anhänger verbindet modernes Design\n                    mit persönlicher Bedeutung. Die kostenlose Gravur macht ihn zu einem\n                    zeitlosen Schmuckstück – minimalistisch, langlebig und vielseitig\n                    kombinierbar für Damen \u0026amp; Herren.\n                \u003c\/p\u003e\n\n                \u003cdiv class=\"engraving-why-grid\"\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHochwertiges Material\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Gefertigt aus robustem Edelstahl – rostfrei, langlebig\n                            und hautfreundlich. Entwickelt für den täglichen Gebrauch\n                            und präzise Gravuren.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eIndividuelle Gravur \u0026amp; Fotogravur\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Namen, Initialen, Daten oder Koordinaten – ein geliebter Mensch, ein besonderer Ort oder ein unvergesslicher Moment.\n                            Mit einer Fotogravur wird dieser Anhänger zu einer bleibenden Erinnerung, präzise graviert und detailreich umgesetzt.\n                             Kostenlos personalisiert.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-arrow-repeat\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eDrehbares Design\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Das bewegliche, runde Design verleiht dem Anhänger\n                            eine besondere Haptik und symbolisiert Wandel,\n                            Verbindung und persönliche Geschichten.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-stars\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003ePerfekte Verarbeitung\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Fein polierte Oberfläche, klare Formen und\n                            ausgewogene Proportionen – ein elegantes\n                            Schmuckstück mit Premium-Charakter.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- =========================\n         SHIPPING \u0026 TRUST BLOCK\n    ========================== --\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\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-truck\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSchneller Versand\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Versand innerhalb von \u003cstrong\u003e1–3 Werktagen\u003c\/strong\u003e\n                            nach Gravur – sorgfältig \u0026amp; sicher verpackt.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-geo-alt\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHandarbeit in Deutschland\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Jede Gravur entsteht in unserem Familienbetrieb –\n                            \u003cstrong\u003ekeine Externe Arbeit\u003c\/strong\u003e, kein Dropshipping.\n                        \u003c\/p\u003e\n                        \u003cp\u003eJede Gravur wird vor dem Versand manuell kontrolliert, damit dein Schmuckstück genau so ankommt, wie du es dir wünschst. \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"shipping-item\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eSicher \u0026amp; Vertrauensvoll\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Sichere Zahlung, persönlicher Support\n                            und höchste Qualitätskontrolle vor dem Versand.\n                        \u003c\/p\u003e\n                        \u003cp\u003e\n                            Sollte etwas nicht passen, findest du mit uns\n                            unkompliziert eine Lösung.\n                        \u003c\/p\u003e\n\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- FEATURES --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container engraving-hero-text\"\u003e\n                \u003ch1\u003eMehr als ein Anhänger\u003c\/h1\u003e\n                \u003cp class=\"engraving-section-desc\"\u003e\n                    Dieser drehbare, runde Edelstahl-Anhänger steht für Beständigkeit,\n                    Persönlichkeit und zeitlose Eleganz – ein Schmuckstück mit Bedeutung.\n                \u003c\/p\u003e\n\n                \u003cdiv class=\"engraving-features\"\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-type\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eIndividuelle Gravur\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Kostenlose Personalisierung mit Namen, Initialen,\n                            Datum oder Koordinaten – präzise und dauerhaft graviert.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-image\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eFotogravur möglich\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Dein Lieblingsfoto wird hochpräzise in Edelstahl graviert –\n                            langlebig, kontrastreich und voller Tiefe.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-arrow-repeat\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eDrehbares Design\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Das bewegliche, runde Design verleiht dem Anhänger\n                            eine besondere Dynamik und macht ihn haptisch wie\n                            optisch einzigartig.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gem\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eHochwertiger Edelstahl\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Robust, rostfrei und hautfreundlich –\n                            ideal für den täglichen Gebrauch und\n                            Gravuren, die ein Leben lang halten.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                    \u003cdiv class=\"engraving-feature\"\u003e\n                        \u003ci class=\"bi bi-gift\"\u003e\u003c\/i\u003e\n                        \u003ch3\u003eBereit zu verschenken\u003c\/h3\u003e\n                        \u003cp\u003e\n                            Minimalistisches Design trifft persönliche Bedeutung –\n                            ein stilvolles Geschenk für besondere Momente und Menschen.\n                        \u003c\/p\u003e\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n\n\n\n        \u003c!-- =========================\n         SPECS SECTION\n    ========================== --\u003e\n        \u003csection class=\"engraving-section engraving-fade\"\u003e\n            \u003cdiv class=\"container2 engraving-hero-text\"\u003e\n                \u003ch1\u003eProduktdetails\u003c\/h1\u003e\n\n                \u003cdiv class=\"engraving-specs\"\u003e\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-box\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eMaterial:\u003c\/strong\u003e Edelstahl\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-arrow-repeat\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eDesign:\u003c\/strong\u003e Rund · drehbar\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-rulers\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eDurchmesser:\u003c\/strong\u003e ca. 25 mm\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-database\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGewicht:\u003c\/strong\u003e ca. 8 g\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-brightness-high\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eFinish:\u003c\/strong\u003e Hochglanz\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n\n                    \u003cul\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-link\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eVerwendung:\u003c\/strong\u003e Kette · Armband · Schlüsselanhänger\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-gender-ambiguous\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGeschlecht:\u003c\/strong\u003e Unisex\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGravur:\u003c\/strong\u003e Kostenlos\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-camera\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eGravurarten:\u003c\/strong\u003e Text · Symbole · Fotogravur\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-heart\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eBedeutung:\u003c\/strong\u003e Persönlich · Zeitlos · Ausdrucksstark\n                        \u003c\/li\u003e\n                        \u003cli\u003e\n                            \u003ci class=\"bi bi-info-circle\"\u003e\u003c\/i\u003e\n                            \u003cstrong\u003eLieferumfang:\u003c\/strong\u003e Anhänger (ohne Kette)\n                        \u003c\/li\u003e\n                    \u003c\/ul\u003e\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n\n        \u003c!-- =========================\n         GRAVUR LIVE PREVIEW\n    ========================== --\u003e\n        \u003csection class=\"engraving-preview-section engraving-fade\"\u003e\n            \u003cspan class=\"engraving-badge visible-xs\"\u003e\n                \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n            \u003c\/span\u003e\n            \u003cdiv class=\"engraving-preview-grid\"\u003e\n\n                \u003c!-- IMAGE --\u003e\n                \u003cdiv class=\"engraving-preview-image\"\u003e\n                    \u003cimg id=\"engravingProductImage\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Edelstahl_drehbar_26_front.png?v=1771250645\" alt=\"Edelstahl Herzanhänger ohne Gravur\"\u003e\n\n                    \u003cdiv class=\"engraving-overlay\" id=\"engravingOverlay\"\u003e\n                        \u003cdiv class=\"engraving-preview-text-wrap\"\u003e\n                            \u003cspan id=\"engravingPreviewText\"\u003eDein Text\u003c\/span\u003e\n                            \u003cspan class=\"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                    \u003cp class=\"engraving-preview-note\"\u003e\n                        ✦ Diese Darstellung dient als Vorschau. Jede Gravur ist ein handwerkliches Unikat – minimale Abweichungen in Höhe oder Tiefe sind möglich. Wir passen die Schriftgröße optimal an.\n                    \u003c\/p\u003e\n\n\n                \u003c\/div\u003e\n\n                \u003c!-- CONTENT --\u003e\n                \u003cdiv class=\"engraving-preview-content\" id=\"engraving-preview\"\u003e\n\n                    \u003cspan class=\"engraving-badge hidden-xs\"\u003e\n                        \u003ci class=\"bi bi-pencil\"\u003e\u003c\/i\u003e Kostenlose Personalisierung – Live Vorschau\n                    \u003c\/span\u003e\n\n                    \u003ch2\u003eMach diesen Anhänger einzigartig\u003c\/h2\u003e\n                    \u003cp\u003e\n                        Gib deine gewünschte Gravur ein und sieh sofort,\n                        wie dein persönlicher Anhänger Gestalt annimmt.\n                    \u003c\/p\u003e\n\n                    \u003c!-- INPUT --\u003e\n                    \u003cdiv class=\"engraving-input-wrap\"\u003e\n                        \u003clabel for=\"engravingInput\"\u003eDeine Gravur\u003c\/label\u003e\n                        \u003cinput type=\"text\" id=\"engravingInput\" maxlength=\"11\" placeholder=\"z. B. A + M | 12.06.24\"\u003e\n                        \u003csmall\u003eMax. 11 Zeichen · Zahlen \u0026amp; Symbole möglich\u003c\/small\u003e\n                    \u003c\/div\u003e\n                    \u003c!-- SYMBOL PICKER --\u003e\n                    \u003cdiv class=\"engraving-symbol-picker\"\u003e\n                        \u003cspan class=\"symbol-title\"\u003eSymbole hinzufügen\u003c\/span\u003e\n\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\n                    \u003c!-- FONT SELECT --\u003e\n                    \u003cdiv class=\"engraving-font-select\"\u003e\n\n\n                        \u003c!-- =========================\n                         FONT PICKER (BUTTONS)\n                    ========================== --\u003e\n                        \u003cdiv class=\"engraving-font-picker\"\u003e\n                            \u003clabel class=\"font-picker-label\"\u003e\u003cstrong\u003eSchriftart wählen\u003c\/strong\u003e\u003c\/label\u003e\n\n\n                            \u003c!-- SERIF --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSerif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Times New Roman\" style=\"font-family:'Times New Roman'\"\u003e\n                                        Times New Roman\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Georgia\" style=\"font-family:Georgia\"\u003e\n                                        Georgia\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SANS --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSans-serif\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Arial\" style=\"font-family:Arial\"\u003e\n                                        Arial\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Helvetica\" style=\"font-family:Helvetica\"\u003e\n                                        Helvetica\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- MONOSPACE --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eMonospace\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Courier New\" style=\"font-family:'Courier New'\"\u003e\n                                        Courier New\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn\" data-font=\"Lucida Console\" style=\"font-family:'Lucida Console'\"\u003e\n                                        Lucida Console\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- SCRIPT --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eSchreibschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Allura\" style=\"font-family:'Allura'\"\u003e\n                                        Allura\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Alex Brush\" style=\"font-family:'Alex Brush'\"\u003e\n                                        Alex Brush\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Kaushan Script\" style=\"font-family:'Kaushan Script'\"\u003e\n                                        Kaushan Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HANDWRITING --\u003e\n                            \u003cdiv class=\"font-group\"\u003e\n                                \u003cspan class=\"font-group-title\"\u003eHandschrift\u003c\/span\u003e\n                                \u003cdiv class=\"font-group-buttons\"\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Pacifico\" style=\"font-family:'Pacifico'\"\u003e\n                                        Pacifico\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Indie Flower\" style=\"font-family:'Indie Flower'\"\u003e\n                                        Indie Flower\n                                    \u003c\/button\u003e\n                                    \u003cbutton type=\"button\" class=\"font-btn script\" data-font=\"Dancing Script\" style=\"font-family:'Dancing Script'\"\u003e\n                                        Dancing Script\n                                    \u003c\/button\u003e\n                                \u003c\/div\u003e\n                            \u003c\/div\u003e\n\n                            \u003c!-- HIDDEN INPUT FÜR SHOPIFY --\u003e\n                            \u003cinput type=\"hidden\" name=\"properties[Schriftart]\" id=\"selectedFont\"\u003e\n                        \u003c\/div\u003e\n\n                    \u003c\/div\u003e\n\n\n                    \u003c!-- CTA --\u003e\n                    \u003cbutton type=\"button\" class=\"engraving-collection-btn js-scroll-to-form\" data-target=\"#product-form\"\u003e\n                        Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n                    \u003c\/button\u003e\n\n                    \u003c!-- MICRO TRUST --\u003e\n                    \u003cdiv class=\"engraving-micro-trust\"\u003e\n                        \u003ci class=\"bi bi-shield-check\"\u003e\u003c\/i\u003e\n                        Jede Gravur wird individuell geprüft \u0026amp; präzise gefertigt\n                    \u003c\/div\u003e\n\n                \u003c\/div\u003e\n            \u003c\/div\u003e\n        \u003c\/section\u003e\n\n        \u003c!-- End Block --\u003e\n        \u003csection class=\"engraving-cta-strip engraving-fade\" id=\"gravur\"\u003e\n            \u003ci class=\"bi bi-stars\" style=\"\n    font-size: 6rem;\n    color: #c0a860;\n\"\u003e\u003c\/i\u003e\n            \u003ch2 style=\"margin-top: 15px;\"\u003eDeine Gravur. Deine Geschichte.\u003c\/h2\u003e\n            \u003cp\u003eEin Schmuckstück, das mehr sagt als Worte. \u003c\/p\u003e\n            \u003cp\u003e Handarbeit 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\n        \u003c\/section\u003e\n\n    \u003c\/div\u003e\n\n    \u003c!-- Mobile Popup Vorschau --\u003e\n    \u003cdiv id=\"engraving-mobile-popup\"\u003e\n        \u003cdiv class=\"popup-preview\" style=\"position: relative;margin-bottom: 10px;\"\u003e\n            \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/Edelstahl_drehbar_26_front.png?v=1771250645\" alt=\"Gravur Vorschau Mobile\" class=\"popup-preview-image\" style=\"width:100%;\"\u003e\n            \u003cdiv class=\"engraving-overlay active\" id=\"engravingOverlay\"\u003e\n                \u003cdiv class=\"popup-preview-text-wrap\"\u003e\n                    \u003cspan class=\"popup-preview-text\"\u003e\u003c\/span\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 js-scroll-to-form\" data-target=\"#product-form\"\u003e\n            Gravur jetzt festlegen \u003ci class=\"bi bi-arrow-up\"\u003e\u003c\/i\u003e\n        \u003c\/button\u003e\n    \u003c\/div\u003e\n\n\n    \u003cscript\u003e\/* =========================\n   Intersection Animations\n========================= *\/\nconst engravingObserver = new IntersectionObserver(entries =\u003e {\n  entries.forEach(entry =\u003e {\n    if (entry.isIntersecting) entry.target.classList.add('show');\n  });\n}, { threshold: 0.2 });\n\ndocument.querySelectorAll('.engraving-fade').forEach(el =\u003e\n  engravingObserver.observe(el)\n);\n\n\/* =========================\n   CTA Scroll + Übergabe\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const ctaButtons = document.querySelectorAll(\".js-scroll-to-form\");\n\n  ctaButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", function (e) {\n      e.preventDefault();\n\n      const gravurInput = document.querySelector(\"#gravurtext_vorderseite\");\n      const previewText = document.getElementById(\"engravingPreviewText\");\n\n      if (gravurInput \u0026\u0026 previewText) {\n        gravurInput.value = previewText.textContent.trim();\n        const fontFamily = window.getComputedStyle(previewText).fontFamily;\n        gravurInput.style.fontFamily = fontFamily;\n\n        const back = document.querySelector(\"#gravurtext_2\");\n        if (back) back.style.fontFamily = fontFamily;\n      }\n\n      const gravurFontSelect = document.querySelector(\"#gravur_schriftart\");\n      if (gravurFontSelect \u0026\u0026 previewText) {\n        const previewFont = window.getComputedStyle(previewText).fontFamily;\n        let found = false;\n        Array.from(gravurFontSelect.options).forEach((opt, i) =\u003e {\n          if (previewFont.includes(opt.value)) {\n            gravurFontSelect.selectedIndex = i;\n            found = true;\n          }\n        });\n        if (!found) gravurFontSelect.selectedIndex = 0;\n      }\n\n      const productForm = document.querySelector(\"#product-form, form[action*='\/cart\/add']\");\n      if (!productForm) return;\n\n      productForm.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n      const firstInput = productForm.querySelector(\"input, textarea, select\");\n      if (firstInput) firstInput.focus();\n    });\n  });\n});\n\n\/* =========================\n   Specs Fade-In\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const uls = document.querySelectorAll('.engraving-specs ul');\n  const observer = new IntersectionObserver(entries =\u003e {\n    entries.forEach(entry =\u003e {\n      if (entry.isIntersecting) entry.target.classList.add('visible');\n    });\n  }, { threshold: 0.3 });\n  uls.forEach(ul =\u003e observer.observe(ul));\n});\n\n\/* =========================\n   Size Buttons\n========================= *\/\ndocument.querySelectorAll('.size-btn').forEach(btn =\u003e {\n  btn.addEventListener('click', () =\u003e {\n    document.querySelectorAll('.size-btn').forEach(b =\u003e b.classList.remove('active'));\n    btn.classList.add('active');\n    document.getElementById('engraving-size-value').textContent =\n      btn.getAttribute('data-size');\n  });\n});\n\n\/* =========================\n   MAIN ENGRAVING LOGIC\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const overlay = document.getElementById(\"engravingOverlay\");\n\n  \/* ---- Mobile Popup ---- *\/\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const mobilePopupText = mobilePopup?.querySelector(\".popup-preview-text\");\n\n  function showPopup() {\n    if (window.innerWidth \u003e 768) return;\n    mobilePopup.classList.add(\"show\");\n  }\n  function hidePopup() {\n    mobilePopup.classList.remove(\"show\");\n  }\n\n  \/* ---- Desktop Effects ---- *\/\n  function triggerDesktopEffects() {\n    previewText.classList.remove(\"engrave-fade\");\n    void previewText.offsetWidth;\n    previewText.classList.add(\"engrave-fade\");\n\n    const check = document.querySelector(\".preview-check\");\n    if (check) {\n      check.classList.add(\"show\");\n      clearTimeout(check._timeout);\n      check._timeout = setTimeout(() =\u003e check.classList.remove(\"show\"), 1000);\n    }\n  }\n\n  \/* ---- Mobile Popup Sync ---- *\/\n  function updateMobilePopup(value) {\n    if (!mobilePopupText) return;\n\n    mobilePopupText.textContent = value;\n    mobilePopupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    mobilePopupText.classList.remove(\"engrave-fade\");\n    void mobilePopupText.offsetWidth;\n    mobilePopupText.classList.add(\"engrave-fade\");\n\n    let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n    if (!popupCheck) {\n      popupCheck = document.createElement(\"span\");\n      popupCheck.className = \"popup-preview-check\";\n      popupCheck.innerHTML = \"✔\";\n      mobilePopupText.parentElement.appendChild(popupCheck);\n    }\n\n    popupCheck.classList.add(\"show\");\n    clearTimeout(popupCheck._timeout);\n    popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n    showPopup();\n  }\n\n  const symbolButtons = document.querySelectorAll(\".symbol-btn\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n  const hiddenFontInput = document.getElementById(\"selectedFont\");\n  const MAX_LENGTH = 11;\n  let lastValue = \"\";\n\n  function updatePreview(force = false) {\n    const value = input.value;\n    if (!value) {\n      overlay.classList.remove(\"active\");\n      hidePopup();\n      lastValue = \"\";\n      return;\n    }\n\n    previewText.textContent = value;\n    overlay.classList.add(\"active\");\n\n    if (force || value.length !== lastValue.length) {\n      triggerDesktopEffects();\n      updateMobilePopup(value);\n    }\n\n    lastValue = value;\n  }\n\n  input.addEventListener(\"input\", () =\u003e updatePreview());\n\n  \/* ---- Symbols ---- *\/\n  symbolButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const symbol = btn.dataset.symbol;\n      if (input.value.length + symbol.length \u003e MAX_LENGTH) return;\n\n      const start = input.selectionStart;\n      const end = input.selectionEnd;\n      input.value =\n        input.value.substring(0, start) +\n        symbol +\n        input.value.substring(end);\n\n      input.focus();\n      input.selectionStart = input.selectionEnd = start + symbol.length;\n      updatePreview(true);\n    });\n  });\nfunction forcePopupUpdate() {\n  const value = input.value.trim();\n  if (!value) return;\n\n  \/\/ Popup Text \u0026 Font\n  mobilePopupText.textContent = value;\n  mobilePopupText.style.fontFamily =\n    window.getComputedStyle(previewText).fontFamily;\n\n  \/\/ Glow\n  mobilePopupText.classList.remove(\"engrave-fade\");\n  void mobilePopupText.offsetWidth;\n  mobilePopupText.classList.add(\"engrave-fade\");\n\n  \/\/ Micro Check\n  let popupCheck = mobilePopup.querySelector(\".popup-preview-check\");\n  if (!popupCheck) {\n    popupCheck = document.createElement(\"span\");\n    popupCheck.className = \"popup-preview-check\";\n    popupCheck.innerHTML = '\u003ci class=\"bi bi-check\" style=\"color:#34aa8b;\"\u003e\u003c\/i\u003e';\n    mobilePopupText.parentElement.appendChild(popupCheck);\n  }\n  popupCheck.classList.add(\"show\");\n  clearTimeout(popupCheck._timeout);\n  popupCheck._timeout = setTimeout(() =\u003e popupCheck.classList.remove(\"show\"), 1000);\n\n  \/\/ SHOW\n  if (window.innerWidth \u003c= 768) {\n    mobilePopup.classList.add(\"show\");\n  }\n}\n\n  \/* ---- Fonts ---- *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      const font = btn.dataset.font;\n      previewText.style.fontFamily = font;\n\n      const back = document.getElementById(\"gravurtext_2\");\n      if (back) back.style.fontFamily = font;\n\n      hiddenFontInput.value = font;\n      updatePreview(true);\n          \/\/ 🔥 DAS IST DER FIX\n    forcePopupUpdate();\n\n      fontButtons.forEach(b =\u003e b.classList.remove(\"active\"));\n      btn.classList.add(\"active\");\n    });\n  });\n\n  document.addEventListener(\"click\", e =\u003e {\n    if (!mobilePopup.contains(e.target) \u0026\u0026 e.target !== input) hidePopup();\n  });\n  window.addEventListener(\"scroll\", hidePopup);\n});\n\n\/* =========================\n   Preview Image Pulse\n========================= *\/\nconst previewImage = document.querySelector('.engraving-preview-image');\nlet hasPulsed = false;\n\nfunction triggerPulse() {\n  if (!previewImage) return;\n  previewImage.classList.remove('pulse');\n  void previewImage.offsetWidth;\n  previewImage.classList.add('pulse');\n}\n\ndocument.getElementById(\"engravingInput\")?.addEventListener('input', e =\u003e {\n  if (!hasPulsed \u0026\u0026 e.target.value.trim()) {\n    triggerPulse();\n    hasPulsed = true;\n  }\n});\n\n\/* =========================\n   Live Preview Link (WICHTIG!)\n========================= *\/\ndocument.querySelectorAll('.live-preview-link').forEach(link =\u003e {\n  link.addEventListener('click', e =\u003e {\n    e.preventDefault();\n    document\n      .querySelector('#engraving-preview')\n      .scrollIntoView({ behavior: 'smooth', block: 'center' });\n  });\n});\n\/* =========================\n   MOBILE FONT POPUP FIX\n   (isoliert, zerstört nichts)\n========================= *\/\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n\n  if (window.innerWidth \u003e 768) return;\n\n  const input = document.getElementById(\"engravingInput\");\n  const previewText = document.getElementById(\"engravingPreviewText\");\n  const mobilePopup = document.getElementById(\"engraving-mobile-popup\");\n  const popupText = mobilePopup?.querySelector(\".popup-preview-text\");\n  const popupCheck = mobilePopup?.querySelector(\".popup-preview-check\");\n  const fontButtons = document.querySelectorAll(\".font-btn\");\n\n  if (!input || !previewText || !popupText || !mobilePopup) return;\n\n  function showMobilePopup() {\n    mobilePopup.classList.add(\"show\");\n  }\n\n  function syncPopupFromPreview() {\n    const value = input.value.trim();\n    if (!value) return;\n\n    \/\/ Text + Font\n    popupText.textContent = value;\n    popupText.style.fontFamily =\n      window.getComputedStyle(previewText).fontFamily;\n\n    \/\/ Glow\n    popupText.classList.remove(\"engrave-fade\");\n    void popupText.offsetWidth;\n    popupText.classList.add(\"engrave-fade\");\n\n    \/\/ Micro Check\n    if (popupCheck) {\n      popupCheck.classList.add(\"show\");\n      clearTimeout(popupCheck._timeout);\n      popupCheck._timeout = setTimeout(\n        () =\u003e popupCheck.classList.remove(\"show\"),\n        1000\n      );\n    }\n\n    showMobilePopup();\n  }\n\n  \/* 🔥 FONT-WECHSEL → POPUP *\/\n  fontButtons.forEach(btn =\u003e {\n    btn.addEventListener(\"click\", () =\u003e {\n      requestAnimationFrame(syncPopupFromPreview);\n    });\n  });\n\n  \/* Sicherheit: auch bei erneutem Tippen *\/\n  input.addEventListener(\"input\", syncPopupFromPreview);\n\n});\u003c\/script\u003e\n\n \n\u003c\/body\u003e","brand":"Juwelier Milano","offers":[{"title":"Vergoldet","offer_id":56822055108873,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true},{"title":"Edelstahl","offer_id":56822055141641,"sku":null,"price":49.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/files\/vergoldet_drehbar_26.png?v=1771250317"},{"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\/* Schritt 1: Farbwahl Silber \/ Vergoldet *\/\n.jm-mh-color-title { display: block; margin: 0 0 10px; font-family: 'Playfair Display', serif; font-size: 1.1rem; color: #1a1410; }\n.jm-mh-colors { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; margin-bottom: 18px; }\n.jm-mh-color { display: flex; align-items: center; gap: 10px; padding: 12px 12px; border: 1.5px solid #e8e0d0; border-radius: 12px; background: #faf9f7; cursor: pointer; font-family: inherit; text-align: left; transition: all .25s ease; min-width: 0; }\n.jm-mh-color:hover { border-color: #c9a84c; background: #fdf8f0; }\n.jm-mh-color.active { border-color: #c9a84c; background: #fdf8f0; box-shadow: 0 0 0 3px rgba(201,168,76,0.12); }\n.jm-mh-color.unavailable { opacity: .45; cursor: not-allowed; }\n.jm-mh-color-dot { width: 22px; height: 22px; border-radius: 50%; flex-shrink: 0; border: 1px solid rgba(0,0,0,.15); }\n.jm-mh-color-dot.silber    { background: radial-gradient(circle at 35% 30%, #f6f6f6, #a9a9ad); }\n.jm-mh-color-dot.vergoldet { background: radial-gradient(circle at 35% 30%, #f6e3a1, #b8902f); }\n.jm-mh-color-info { flex: 1; min-width: 0; }\n.jm-mh-color-name { display: block; font-weight: 700; font-size: 14px; color: #1a1410; }\n.jm-mh-color-desc { display: block; font-size: 11.5px; color: #9a8a6a; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\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 oder Vergoldet\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 Edelstahl · Vergoldet\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 id=\"jm-mh-color-wrap\"\u003e\n                            \u003cspan class=\"jm-mh-color-title\"\u003eWähle deine Farbe\u003c\/span\u003e\n                            \u003cdiv class=\"jm-mh-colors\"\u003e\n                                \u003cbutton type=\"button\" class=\"jm-mh-color active\" data-color=\"silber\"\u003e\n                                    \u003cspan class=\"jm-mh-color-dot silber\"\u003e\u003c\/span\u003e\n                                    \u003cspan class=\"jm-mh-color-info\"\u003e\u003cspan class=\"jm-mh-color-name\"\u003eEdelstahl\u003c\/span\u003e\u003cspan class=\"jm-mh-color-desc\"\u003esilberfarbig\u003c\/span\u003e\u003c\/span\u003e\n                                \u003c\/button\u003e\n                                \u003cbutton type=\"button\" class=\"jm-mh-color\" data-color=\"vergoldet\"\u003e\n                                    \u003cspan class=\"jm-mh-color-dot vergoldet\"\u003e\u003c\/span\u003e\n                                    \u003cspan class=\"jm-mh-color-info\"\u003e\u003cspan class=\"jm-mh-color-name\"\u003eVergoldet\u003c\/span\u003e\u003cspan class=\"jm-mh-color-desc\"\u003egoldfarbig\u003c\/span\u003e\u003c\/span\u003e\n                                \u003c\/button\u003e\n                            \u003c\/div\u003e\n                        \u003c\/div\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\"\u003e\u003cspan class=\"js-mh-material\"\u003eEdelstahl · silberfarbig\u003c\/span\u003e · 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 · \u003cspan class=\"js-mh-material\"\u003eEdelstahl · silberfarbig\u003c\/span\u003e\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\" id=\"mhCfgLabel\"\u003eEdelstahl\u003c\/span\u003e\n                        \u003c\/div\u003e\n                        \u003cp class=\"jm-cfg-ring-img-caption js-mh-material\"\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\"\u003eFarbe\u003c\/span\u003e\u003cspan class=\"jm-cfg-s3-row-value\" id=\"jm-cfg-s3-color\"\u003eSilber\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: '' };   \/* Bilder der aktuell gewählten Farbe *\/\n  \/* Farben: Erkennung über Variantenname \/ Alt-Text *\/\n  const COLORS = {\n    silber:    { label: 'Silber',    material: 'Edelstahl · silberfarbig' },\n    vergoldet: { label: 'Vergoldet', material: 'Edelstahl · vergoldet' }\n  };\n  const isGold   = t =\u003e \/vergold|gold\/i.test(String(t || ''));\n  const IMG_BY   = { silber: null, vergoldet: null };   \/* je Farbe {primary, hover, preview, back} *\/\n  let PRODUCT    = null;\n  let curColor   = 'silber';\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  \/* Studio-Popup nur in Schritt 2 des Gravur-Studios – oben am Produktformular übernimmt jm-live-vorschau-herz *\/\n  function studioActive() {\n    const w = document.getElementById('jm-cfg-wrap');\n    if (jmStep !== 2 || !w) return false;\n    const r = w.getBoundingClientRect();\n    return r.top \u003c window.innerHeight \u0026\u0026 r.bottom \u003e 0;\n  }\n  function showPopup() { if (window.innerWidth \u003e 768 || !studioActive()) return; mobilePopup \u0026\u0026 mobilePopup.classList.add('show'); }\n  function hidePopup() { mobilePopup \u0026\u0026 mobilePopup.classList.remove('show'); }\n\n  function syncPopupFromPreview() {\n    const val = engInput ? engInput.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        \/* kein Studio-Popup beim Tippen im Produktformular (dort zeigt jm-live-vorschau-herz die Vorschau) *\/\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  \/* ════════════════════════════════════════════\n     FARBE (Silber \/ Vergoldet) ↔ Produktformular\n     ════════════════════════════════════════════ *\/\n  const productFormEl = document.querySelector('#product-form, form[action*=\"\/cart\/add\"]');\n  let lastVariantId = null;\n  function colorOfVariant(v) {\n    const opts = (v.options || [v.option1, v.option2, v.option3]).concat([v.title]);\n    return opts.some(isGold) ? 'vergoldet' : 'silber';\n  }\n  function currentVariantObj() {\n    if (!PRODUCT || !productFormEl) return null;\n    const f = productFormEl.querySelector('[name=\"id\"]');\n    return f ? (PRODUCT.variants || []).find(x =\u003e String(x.id) === String(f.value)) || null : null;\n  }\n  \/* Produktformular auf die Variante dieser Farbe stellen *\/\n  function selectVariantFor(color) {\n    if (!PRODUCT || !productFormEl) return;\n    const list = (PRODUCT.variants || []).filter(x =\u003e colorOfVariant(x) === color);\n    const v = list.find(x =\u003e x.available) || list[0];\n    if (!v) return;\n    const vals = (v.options || [v.option1, v.option2, v.option3]).filter(Boolean).map(String);\n    productFormEl.querySelectorAll('select').forEach(sel =\u003e {\n      if (sel.name === 'id') return;\n      Array.from(sel.options).forEach((o, i) =\u003e {\n        if (vals.indexOf(o.value) \u003e -1 \u0026\u0026 sel.selectedIndex !== i) {\n          sel.selectedIndex = i;\n          sel.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n      });\n    });\n    productFormEl.querySelectorAll('input[type=\"radio\"]').forEach(r =\u003e {\n      if (vals.indexOf(r.value) \u003e -1 \u0026\u0026 !r.checked) {\n        r.checked = true;\n        r.dispatchEvent(new Event('change', { bubbles: true }));\n        const lab = r.id \u0026\u0026 productFormEl.querySelector('label[for=\"' + r.id + '\"]');\n        if (lab) lab.click();\n      }\n    });\n    const idSel = productFormEl.querySelector('select[name=\"id\"], input[name=\"id\"]');\n    if (idSel \u0026\u0026 String(idSel.value) !== String(v.id)) {\n      idSel.value = v.id;\n      idSel.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n    lastVariantId = String(v.id);\n  }\n  \/* Farbe anzeigen (Bilder, Texte, Buttons) – optional Produktformular mitziehen *\/\n  function setColor(color, pushForm) {\n    if (!COLORS[color]) color = 'silber';\n    curColor = color;\n    if (IMG_BY[color]) Object.assign(IMGS, IMG_BY[color]);\n    document.querySelectorAll('.jm-mh-color').forEach(b =\u003e b.classList.toggle('active', b.dataset.color === color));\n    document.querySelectorAll('.js-mh-material').forEach(el =\u003e { el.textContent = COLORS[color].material; });\n    const lb = document.getElementById('mhCfgLabel');\n    if (lb) lb.textContent = COLORS[color].label;\n    const sc = document.getElementById('jm-cfg-s3-color');\n    if (sc) sc.textContent = COLORS[color].label;\n    if (pushForm) selectVariantFor(color);\n    applyImages();\n  }\n  document.querySelectorAll('.jm-mh-color').forEach(b =\u003e b.addEventListener('click', () =\u003e {\n    if (b.classList.contains('unavailable')) return;\n    setColor(b.dataset.color, true);\n  }));\n  \/* Produktformular → Konfigurator (Farbe oben im Formular gewechselt) *\/\n  function syncColorFromForm() {\n    const v = currentVariantObj();\n    if (!v || String(v.id) === lastVariantId) return;\n    lastVariantId = String(v.id);\n    const c = colorOfVariant(v);\n    if (c !== curColor) setColor(c, false);\n  }\n  if (productFormEl) {\n    productFormEl.addEventListener('change', () =\u003e setTimeout(syncColorFromForm, 60));\n    setInterval(syncColorFromForm, 500);\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    PRODUCT = p;\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    \/* Standard (eine Farbe \/ Fallback) *\/\n    const base = {\n      primary: first,\n      hover:   worn ? imgUrl(worn.src) : (second ? imgUrl(second.src) : first),\n      preview: preview ? imgUrl(preview.src) : first,\n      back:    back ? imgUrl(back.src) : ''\n    };\n    \/* Je Farbe: Variantenbild + Alt-Texte mit\/ohne „Vergoldet“\n       (z. B. „Gravur Vorschau Mini Herz“ = Silber, „Gravur Vorschau Mini Herz Vergoldet“ = Vergoldet) *\/\n    Object.keys(COLORS).forEach(c =\u003e {\n      const gold = c === 'vergoldet';\n      const mine = m =\u003e isGold(m.alt) === gold;\n      const v = (p.variants || []).find(x =\u003e colorOfVariant(x) === c \u0026\u0026 x.featured_image);\n      const pv = media.find(m =\u003e mine(m) \u0026\u0026 hasKey(m.alt, ['gravur', 'vorschau']) \u0026\u0026 !hasKey(m.alt, ['rückseite', 'rueckseite', 'hinten']));\n      const bk = media.find(m =\u003e mine(m) \u0026\u0026 hasKey(m.alt, ['rückseite', 'rueckseite', 'hinten']));\n      const wr = media.find(m =\u003e mine(m) \u0026\u0026 hasKey(m.alt, ['getragen', 'model', 'hals']));\n      const pr = v ? imgUrl(v.featured_image) : (gold ? (pv ? imgUrl(pv.src) : base.primary) : base.primary);\n      IMG_BY[c] = {\n        primary: pr,\n        hover:   wr ? imgUrl(wr.src) : (gold ? (pv ? imgUrl(pv.src) : pr) : base.hover),\n        preview: pv ? imgUrl(pv.src) : (gold ? pr : base.preview),\n        back:    bk ? imgUrl(bk.src) : (gold ? '' : base.back)\n      };\n    });\n    \/* Farbwahl nur zeigen, wenn es beide Farben als Variante gibt *\/\n    const hasGold   = (p.variants || []).some(x =\u003e colorOfVariant(x) === 'vergoldet');\n    const hasSilver = (p.variants || []).some(x =\u003e colorOfVariant(x) === 'silber');\n    const wrap = document.getElementById('jm-mh-color-wrap');\n    if (wrap) wrap.style.display = (hasGold \u0026\u0026 hasSilver) ? '' : 'none';\n    document.querySelectorAll('.jm-mh-color').forEach(b =\u003e {\n      const v = (p.variants || []).find(x =\u003e colorOfVariant(x) === b.dataset.color);\n      b.classList.toggle('unavailable', !!v \u0026\u0026 !v.available);\n    });\n    \/* Startfarbe = aktuell gewählte Variante im Produktformular *\/\n    const cur = currentVariantObj();\n    lastVariantId = cur ? String(cur.id) : null;\n    setColor(cur ? colorOfVariant(cur) : 'silber', false);\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":59.0,"currency_code":"EUR","in_stock":true},{"title":"Vergoldet \/ 38 cm + 4 cm","offer_id":57455097839881,"sku":null,"price":69.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"}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0532\/9941\/3155\/collections\/2.png?v=1682464641","url":"https:\/\/shop.juwelier-milano.de\/collections\/muttertag.oembed?page=3","provider":"Juwelier Milano","version":"1.0","type":"link"}