{"title":"Hair Extensions Collection","description":"\u003cdiv class=\"desktop-12 mobile-3\" style=\"text-align: start;\"\u003e\n\u003cspan\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/Hair-Extensions-Collection_Ready-to-Ship-ohdeardolly.webp?v=1793615056\" style=\"margin-bottom: 16px; float: none;\" alt=\"Hair-Extensions-Collection_Ready-to-Ship-ohdeardolly\"\u003e\u003c\/span\u003e\n\u003cp\u003e\u003cspan\u003eHair extensions are the new generation of hair extension products used by qualified professionals to achieve volume and length. Seek the advice of your qualified stylist for guidance on whether these hair extensions would be suitable for you. Professional product.\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e","products":[{"product_id":"oh-dear-dolly-clip-in-hair-extensions-120g-2","title":"oh dear dolly - Clip In Hair Extensions, 20\", 120g, #2","description":"\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDescription\u003c\/h3\u003e\n\u003cdiv\u003eIf you are a hair extensions newbie, if you can’t get to a salon, if you want a break from bonded or wefted hair extensions or if you just want a temporary fix of long voluminous locks, our clip in extensions are the hair solution for you. Express Hair at your fingertips in the comfort of your own home - no salon required!\u003cbr\u003e \u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003e20\" (approximately 51cm)\u003c\/li\u003e\n\u003cli\u003eContains 9 pieces:\n\u003cul\u003e\n\u003cli\u003e4 pieces x 5cm\/2” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 10cm\/4” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 15cm\/6” width\u003c\/li\u003e\n\u003cli\u003e2 piece x 21cm\/8” width\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/li\u003e\n\u003cli\u003eRemy human hair\u003c\/li\u003e\n\u003cli\u003eStraight\u003c\/li\u003e\n\u003cli\u003e120g per pack (approximate weight)\u003c\/li\u003e\n\u003cli\u003eRe-useable\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eMessage us on WhatsApp \u003cspan style=\"color: #00ff00;\"\u003e07535864688\u003c\/span\u003e if you need any help with your order.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eShipping, Delivery \u0026amp; Returns\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eFree shipping for delivery to the UK over £100\u003c\/strong\u003e (England, Scotland, Wales and Northern Ireland).\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eUK Standard\u003c\/strong\u003e (2\u003c\/span\u003e-3 working days) £3.95.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Next Day Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(next working day and excludes weekends).\u003cbr\u003e£6.95 - order must be made before 3pm. Not available for Payl8r due to the time taken to process applications.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Saturday Next Day Delivery\u003c\/strong\u003e\u003cbr\u003e£10.95\u003cspan\u003e \u003c\/span\u003e- orders must be made on the Friday before 3pm. \u003cspan\u003eN\u003c\/span\u003e\u003cspan\u003eot available for Payl8r due to the time taken to process applications.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eEurope\u003c\/strong\u003e: (7 working days) £10.95 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eUSA and Canada\u003c\/strong\u003e: (7 working days) £12.99 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eRest of the world\u003c\/strong\u003e: (7 working days) £29.99 (up to 1kg) country exclusions apply. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDelivery \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe do not pay customs or import duties for your orders or returns.  \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe hope that you will be really happy with your purchase. If an item is unsuitable for you, we would be happy to exchange it or offer a refund - we just ask that we receive the item back within 21 days of placing your order, unworn and in its original unopened and undamaged packaging. Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eTo return your item, contact us using the \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/contact-us\" target=\"_blank\"\u003eContact Us\u003c\/a\u003e form at the top of our website. You will need to quote your Order Number, the item you would like to return and the reason for the return. We will send you an email with your Returns Number and let you know how to return the item to us. Refunds will be made using the method you used to pay for your order.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eFAQs\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cspan style=\"text-decoration: underline;\"\u003e\u003ca href=\"\/pages\/contact-us\"\u003eContact Us\u003c\/a\u003e\u003c\/span\u003e if you would like to ask a question about this product. \u003cbr\u003e No questions and answers for this product at the moment.\u003c\/div\u003e\n\u003ch3\u003eReviews\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eNo reviews for this product at the moment.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"Default Title","offer_id":38158034501815,"sku":"","price":79.99,"currency_code":"GBP","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/products\/T4-24-16_48_ba3b59fc-5161-4778-b125-8874870e7dc4.jpg?v=1613182079"},{"product_id":"oh-dear-dolly-clip-in-hair-extensions-120g-t1b-24-27-balayage","title":"oh dear dolly - Clip In Hair Extensions, 20\", 120g, #T1B\/24-27 Balayage","description":"\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDescription\u003c\/h3\u003e\n\u003cdiv\u003eIf you are a hair extensions newbie, if you can’t get to a salon, if you want a break from bonded or wefted hair extensions or if you just want a temporary fix of long voluminous locks, our clip in extensions are the hair solution for you. Express Hair at your fingertips in the comfort of your own home - no salon required!\u003cbr\u003e \u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003e20\" (approximately 51cm)\u003c\/li\u003e\n\u003cli\u003eContains 9 pieces:\n\u003cul\u003e\n\u003cli\u003e4 pieces x 4cm\/1.5” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 9cm\/3.5” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 15cm\/6” width\u003c\/li\u003e\n\u003cli\u003e1 piece x 20cm\/8” width\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/li\u003e\n\u003cli\u003eRemy human hair\u003c\/li\u003e\n\u003cli\u003eStraight\u003c\/li\u003e\n\u003cli\u003e120g per pack (approximate weight)\u003c\/li\u003e\n\u003cli\u003eRe-useable\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eMessage us on WhatsApp \u003cspan style=\"color: #00ff00;\"\u003e07535864688\u003c\/span\u003e if you need any help with your order.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eShipping, Delivery \u0026amp; Returns\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eFree shipping for delivery to the UK over £100\u003c\/strong\u003e (England, Scotland, Wales and Northern Ireland).\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eUK Standard\u003c\/strong\u003e (2\u003c\/span\u003e-3 working days) £3.95.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Next Day Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(next working day and excludes weekends).\u003cbr\u003e£6.95 - order must be made before 3pm. Not available for Payl8r due to the time taken to process applications.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Saturday Next Day Delivery\u003c\/strong\u003e\u003cbr\u003e£10.95\u003cspan\u003e \u003c\/span\u003e- orders must be made on the Friday before 3pm. \u003cspan\u003eN\u003c\/span\u003e\u003cspan\u003eot available for Payl8r due to the time taken to process applications.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eEurope\u003c\/strong\u003e: (7 working days) £10.95 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eUSA and Canada\u003c\/strong\u003e: (7 working days) £12.99 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eRest of the world\u003c\/strong\u003e: (7 working days) £29.99 (up to 1kg) country exclusions apply. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDelivery \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe do not pay customs or import duties for your orders or returns.  \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe hope that you will be really happy with your purchase. If an item is unsuitable for you, we would be happy to exchange it or offer a refund - we just ask that we receive the item back within 21 days of placing your order, unworn and in its original unopened and undamaged packaging. Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eTo return your item, contact us using the \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/contact-us\" target=\"_blank\"\u003eContact Us\u003c\/a\u003e form at the top of our website. You will need to quote your Order Number, the item you would like to return and the reason for the return. We will send you an email with your Returns Number and let you know how to return the item to us. Refunds will be made using the method you used to pay for your order.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eFAQs\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cspan style=\"text-decoration: underline;\"\u003e\u003ca href=\"\/pages\/contact-us\"\u003eContact Us\u003c\/a\u003e\u003c\/span\u003e if you would like to ask a question about this product. \u003cbr\u003e No questions and answers for this product at the moment.\u003c\/div\u003e\n\u003ch3\u003eReviews\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eNo reviews for this product at the moment.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"Default Title","offer_id":38158284619959,"sku":"","price":99.99,"currency_code":"GBP","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/products\/T4-24-16_24.jpg?v=1613183360"},{"product_id":"oh-dear-dolly-clip-in-hair-extensions-120g-t4-18-22-balayage","title":"oh dear dolly - Clip In Hair Extensions, 20\", 120g, #T4\/18-22 Balayage","description":"\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDescription\u003c\/h3\u003e\n\u003cdiv\u003eIf you are a hair extensions newbie, if you can’t get to a salon, if you want a break from bonded or wefted hair extensions or if you just want a temporary fix of long voluminous locks, our clip in extensions are the hair solution for you. Express Hair at your fingertips in the comfort of your own home - no salon required!\u003cbr\u003e \u003cbr\u003e\n\u003cul\u003e\n\u003cli\u003e20\" (approximately 51cm)\u003c\/li\u003e\n\u003cli\u003eContains 9 pieces:\n\u003cul\u003e\n\u003cli\u003e4 pieces x 4cm\/1.5” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 9cm\/3.5” width\u003c\/li\u003e\n\u003cli\u003e2 pieces x 15cm\/6” width\u003c\/li\u003e\n\u003cli\u003e1 piece x 20cm\/8” width\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/li\u003e\n\u003cli\u003eRemy human hair\u003c\/li\u003e\n\u003cli\u003eStraight\u003c\/li\u003e\n\u003cli\u003e120g per pack (approximate weight)\u003c\/li\u003e\n\u003cli\u003eRe-useable\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eMessage us on WhatsApp \u003cspan style=\"color: #00ff00;\"\u003e07535864688\u003c\/span\u003e if you need any help with your order.\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eShipping, Delivery \u0026amp; Returns\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eFree shipping for delivery to the UK over £100\u003c\/strong\u003e (England, Scotland, Wales and Northern Ireland).\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eUK Standard\u003c\/strong\u003e (2\u003c\/span\u003e-3 working days) £3.95.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Next Day Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(next working day and excludes weekends).\u003cbr\u003e£6.95 - order must be made before 3pm. Not available for Payl8r due to the time taken to process applications.\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eUK Saturday Next Day Delivery\u003c\/strong\u003e\u003cbr\u003e£10.95\u003cspan\u003e \u003c\/span\u003e- orders must be made on the Friday before 3pm. \u003cspan\u003eN\u003c\/span\u003e\u003cspan\u003eot available for Payl8r due to the time taken to process applications.\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eEurope\u003c\/strong\u003e: (7 working days) £10.95 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eUSA and Canada\u003c\/strong\u003e: (7 working days) £12.99 (up to 1kg).\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003c\/span\u003e\u003cspan\u003e\u003cstrong\u003eRest of the world\u003c\/strong\u003e: (7 working days) £29.99 (up to 1kg) country exclusions apply. \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eDelivery \u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe do not pay customs or import duties for your orders or returns.  \u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eWe hope that you will be really happy with your purchase. If an item is unsuitable for you, we would be happy to exchange it or offer a refund - we just ask that we receive the item back within 21 days of placing your order, unworn and in its original unopened and undamaged packaging. Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eTo return your item, contact us using the \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/contact-us\" target=\"_blank\"\u003eContact Us\u003c\/a\u003e form at the top of our website. You will need to quote your Order Number, the item you would like to return and the reason for the return. We will send you an email with your Returns Number and let you know how to return the item to us. Refunds will be made using the method you used to pay for your order.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eFAQs\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cspan style=\"text-decoration: underline;\"\u003e\u003ca href=\"\/pages\/contact-us\"\u003eContact Us\u003c\/a\u003e\u003c\/span\u003e if you would like to ask a question about this product. \u003cbr\u003e No questions and answers for this product at the moment.\u003c\/div\u003e\n\u003ch3\u003eReviews\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eNo reviews for this product at the moment.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"Default Title","offer_id":38158295630007,"sku":"","price":99.99,"currency_code":"GBP","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/products\/T4-24-16_21.jpg?v=1613183984"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-t8-24-60-laguna-beach-balayage-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T8-24\/60 Laguna Beach Balayage 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56643773759861,"sku":null,"price":195.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56643773792629,"sku":null,"price":259.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56643773825397,"sku":null,"price":295.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56643773858165,"sku":null,"price":345.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56643773890933,"sku":null,"price":397.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56643773923701,"sku":null,"price":403.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56643773956469,"sku":null,"price":413.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56643773989237,"sku":null,"price":439.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T18-22-60LagunaBeachBalayageLightBlondeFrontShot_29_4373fb4e-148d-41bc-b9dc-a47e3a082e3f.jpg?v=1767683327"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-t5-9-613-dubai-balayage-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T5-9\/613 Dubai Balayage 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56693570666869,"sku":null,"price":195.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56693570699637,"sku":null,"price":259.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56693570732405,"sku":null,"price":295.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56693570765173,"sku":null,"price":345.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56693570797941,"sku":null,"price":397.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56693570830709,"sku":null,"price":403.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56693570863477,"sku":null,"price":413.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56693570896245,"sku":null,"price":439.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T4-18-60DubaiBalayageLightBlondeFrontShot_1_83ef14a9-f0b8-4cb1-960b-d97cdb5ccba3.jpg?v=1770123013"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-t4-8-22-montreal-balayage-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T4-8\/22 Montreal Balayage 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56707721101685,"sku":null,"price":195.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56707721134453,"sku":null,"price":259.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56707721167221,"sku":null,"price":295.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56707721199989,"sku":null,"price":345.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56707721232757,"sku":null,"price":397.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56707721265525,"sku":null,"price":403.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56707721298293,"sku":null,"price":413.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56707721331061,"sku":null,"price":439.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T4-8-60MontrealHighlightedFrontShot_150_c11c4083-495e-43c7-b24f-a0254f94389a.jpg?v=1770389756"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-t2-4-18-london-balayage-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T2-4\/18 London Balayage 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56707729490293,"sku":null,"price":195.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56707729523061,"sku":null,"price":259.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56707729555829,"sku":null,"price":295.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56707729588597,"sku":null,"price":345.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56707729621365,"sku":null,"price":397.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56707729654133,"sku":null,"price":403.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56707729686901,"sku":null,"price":413.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56707729719669,"sku":null,"price":439.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T2-4-18LondonBalayageLightBlondeFrontShot_49_304e0a48-bbfe-468e-9569-93891e2bc11f.jpg?v=1770390666"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-18-60-la-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #18\/60 LA Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56711123796341,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56711123829109,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56711123861877,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56711123894645,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56711123927413,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56711123960181,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56711123992949,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56711124025717,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_18-60_17_2eef6961-15ee-4266-ad65-19dbd5f2b387.jpg?v=1767754769"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-27-613-miami-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #27\/613 Miami Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56711167017333,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56711167050101,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56711167082869,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56711167115637,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56711167148405,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56711167181173,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56711167213941,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56711167246709,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_27-613MiamiHighlighted4_22133a51-8e89-40c5-a405-52ae5388e020.jpg?v=1770482950"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-6-24-new-york-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #6\/24 New York Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56720705651061,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56720705683829,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56720705716597,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56720705749365,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56720705782133,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56720705814901,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56720705847669,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56720705880437,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_6-24NewYorkHighlightedFrontShot40_bbd7cb20-955d-4094-b1fe-5abba72a4576.jpg?v=1770661297"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-m18-22-barcelona-mixed-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #M18\/22 Barcelona Mixed 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56720745005429,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56720745038197,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56720745070965,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56720745103733,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56720745136501,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56720745169269,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56720745202037,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56720745234805,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_M18-22hairextensions_29_Front.jpg?v=1770662361"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-2-6-paris-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #2\/6 Paris Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56724806435189,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56724806467957,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56724806500725,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56724806533493,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56724806566261,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56724806599029,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56724806631797,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56724806664565,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_2-4TuscanyFrontShot_49_dc9657a9-c58c-4866-b8ad-01b8c40bf866.jpg?v=1770741945"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-4-8-santorini-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4\/8 Santorini Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56724817052021,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56724817084789,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56724817117557,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56724817150325,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56724817183093,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56724817215861,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56724817248629,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56724817281397,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_4-8SantoriniHighlighted_49_d91b5793-045f-4160-8df9-0b117aa509c5.jpg?v=1770742170"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-4-27-milan-highlighted-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4\/27 Milan Highlighted 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56728189731189,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56728189763957,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56728189796725,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56728189829493,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56728189862261,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56728189895029,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56728189927797,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56728189960565,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_4-24hairextensions_10_ab6c5195-a942-4339-9b19-0720a58afc56.jpg?v=1770823283"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-1001-white-blonde-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1001 White Blonde 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56728210276725,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56728210309493,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56728210342261,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56728210375029,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56728210407797,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56728210440565,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56728210473333,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56728210506101,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1001WhiteFrontShot_3_3080ab36-8d1e-48a2-a3b0-2a6f5878c48a.jpg?v=1770823650"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-60-light-blonde-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #60 Light Blonde 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56728226169205,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56728226201973,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56728226234741,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56728226267509,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56728226300277,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56728226333045,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56728226365813,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56728226398581,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_60LightBlondeFrontShot_2_7a1c341a-5b5e-441a-b68d-9ac1a3c2d22a.jpg?v=1770823976"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-30-copper-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #30 Copper 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56728240357749,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56728240390517,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56728240423285,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56728240456053,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56728240488821,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56728240521589,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56728240554357,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56728240587125,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_30hairextensions_22_8c1aa98f-f578-4ac1-9c3b-a3a97bff8c87.jpg?v=1770824394"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-m10-16-venice-mixed-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #M10\/16 Venice Mixed 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56739860513141,"sku":null,"price":185.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56739860545909,"sku":null,"price":249.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56739860578677,"sku":null,"price":287.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56739860611445,"sku":null,"price":331.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56739860644213,"sku":null,"price":385.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56739860676981,"sku":null,"price":391.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56739860709749,"sku":null,"price":407.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56739860742517,"sku":null,"price":427.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_10-16hairextensionsfrontshot_106_78014e49-136d-4927-9df7-3515e1614a99.jpg?v=1771038788"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-6-milk-chocolate-brown-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #6 Milk Chocolate Brown 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56739877552501,"sku":null,"price":171.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56739877585269,"sku":null,"price":211.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56739877618037,"sku":null,"price":251.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56739877650805,"sku":null,"price":299.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56739877683573,"sku":null,"price":349.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56739877716341,"sku":null,"price":365.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56739877749109,"sku":null,"price":379.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56739877781877,"sku":null,"price":399.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_6LightChocolateBrownFrontShot_13_354d4b04-a3e5-4b44-a4ba-bdc3aac456b6.jpg?v=1769007514"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-4-dark-chocolate-brown-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4 Dark Chocolate Brown 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56740398268789,"sku":null,"price":171.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56740398301557,"sku":null,"price":211.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56740398334325,"sku":null,"price":251.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56740398367093,"sku":null,"price":299.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56740398399861,"sku":null,"price":349.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56740398432629,"sku":null,"price":365.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56740398465397,"sku":null,"price":379.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56740398498165,"sku":null,"price":399.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_4DarkChocolateBrownFrontShot47_0b890c8b-b2d2-49ff-af82-ef8dd0dff4d2.jpg?v=1771057563"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-2-dark-natural-brown-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #2 Dark Natural Brown 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56740405510517,"sku":null,"price":171.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56740405543285,"sku":null,"price":211.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56740405576053,"sku":null,"price":251.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56740405608821,"sku":null,"price":299.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56740405641589,"sku":null,"price":349.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56740405674357,"sku":null,"price":365.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56740405707125,"sku":null,"price":379.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56740405739893,"sku":null,"price":399.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_2NaturalBrownFrontShot35_ecbf3709-23c6-4032-bfb0-039424669ded.jpg?v=1771058121"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-1b-natural-black-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1B Natural Black 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56741374001525,"sku":null,"price":171.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56741374034293,"sku":null,"price":211.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56741374067061,"sku":null,"price":251.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56741374099829,"sku":null,"price":299.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56741374132597,"sku":null,"price":349.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56741374165365,"sku":null,"price":365.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56741374198133,"sku":null,"price":379.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56741374230901,"sku":null,"price":399.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1BNaturalBlackfrontShot_68_copy_1ef91545-c3cb-4d49-9f0a-2e8155a9b6cc.jpg?v=1771084652"},{"product_id":"flat-tip-hair-extensions-custom-order-2-4-weeks-shipping-1-jet-black-100g-luxury-russian-remy-human-hair","title":"Flat Tip Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1 Jet Black 100G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Tip Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Mini Itip\/Stick Tip are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e100g per pack, contains 100 bonds , 1g per bond (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56741418303861,"sku":null,"price":171.98,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56741418336629,"sku":null,"price":211.98,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56741418369397,"sku":null,"price":251.98,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56741418402165,"sku":null,"price":299.98,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56741418434933,"sku":null,"price":349.98,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56741418467701,"sku":null,"price":365.98,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56741418500469,"sku":null,"price":379.98,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56741418533237,"sku":null,"price":399.98,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1JetBlackfrontShot_14_e4ba5069-8b60-4bb1-9da8-4ab9d97392da.jpg?v=1771085183"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-1-jet-black-100g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1 Jet Black 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56784457073013,"sku":null,"price":199.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56784457105781,"sku":null,"price":235.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56784457138549,"sku":null,"price":319.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56784457171317,"sku":null,"price":452.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56784457204085,"sku":null,"price":579.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56784457236853,"sku":null,"price":679.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56784457269621,"sku":null,"price":779.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56784457302389,"sku":null,"price":889.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1JetBlackfrontShot_14_e4ba5069-8b60-4bb1-9da8-4ab9d97392da.jpg?v=1771085183"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-1b-natural-black-100g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1B Natural Black 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56784496689525,"sku":null,"price":199.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56784496722293,"sku":null,"price":235.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56784496755061,"sku":null,"price":319.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56784496787829,"sku":null,"price":452.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56784496820597,"sku":null,"price":579.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56784496853365,"sku":null,"price":679.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56784496886133,"sku":null,"price":779.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56784496918901,"sku":null,"price":889.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1BNaturalBlackfrontShot_69_d2bf694c-0151-4913-9743-a21ec1c3f13a.jpg?v=1771962706"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-2-dark-natural-brown-100g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #2 Dark Natural Brown 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56784580608373,"sku":null,"price":199.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56784580641141,"sku":null,"price":235.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56784580673909,"sku":null,"price":319.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56784580706677,"sku":null,"price":452.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56784580739445,"sku":null,"price":579.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56784580772213,"sku":null,"price":679.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56784580804981,"sku":null,"price":779.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56784580837749,"sku":null,"price":889.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_2NaturalBrownFrontShot35_a3d09e0a-de3d-49e4-bcdd-e37cda9c6c80.jpg?v=1771964928"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-4-dark-chocolate-brown-100g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4 Dark Chocolate Brown 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56784651026805,"sku":null,"price":199.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56784651059573,"sku":null,"price":235.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56784651092341,"sku":null,"price":319.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56784651125109,"sku":null,"price":452.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56784651157877,"sku":null,"price":579.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56784651190645,"sku":null,"price":679.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56784651223413,"sku":null,"price":779.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56784651256181,"sku":null,"price":889.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_4DarkChocolateBrownFrontShot47_fe1b0fc6-99a7-42f9-b9e7-43cd8e549eaf.jpg?v=1771967654"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-6-milk-chocolate-brown-100g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #6 Milk Chocolate Brown 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56784800219509,"sku":null,"price":199.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56784800252277,"sku":null,"price":235.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56784800285045,"sku":null,"price":319.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56784800317813,"sku":null,"price":452.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56784800350581,"sku":null,"price":579.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56784800383349,"sku":null,"price":679.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56784800416117,"sku":null,"price":779.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56784800448885,"sku":null,"price":889.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_6LightChocolateBrownFrontShot_15_e0583db0-5f63-4d0a-9862-f3ba69926c7c.jpg?v=1771968079"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-m10-16-venice-mixed-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #M10\/16 Venice Mixed 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56879354937717,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56879354970485,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56879355003253,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56879355036021,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56879355068789,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56879355101557,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56879355134325,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56879355167093,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_10-16hairextensionsfrontshot_106_2521214e-5b08-47f4-8868-5c2fa2ab3a99.jpg?v=1772872475"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-30-copper-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #30 Copper 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56879555674485,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56879555707253,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56879555740021,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56879555772789,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56879555805557,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56879555838325,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56879555871093,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56879555903861,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_30hairextensions_22_9a11aaab-dfa5-43cf-a927-d0096493a23f.jpg?v=1772874824"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-60-light-blonde-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #60 Light Blonde 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56879606497653,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56879606530421,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56879606563189,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56879606595957,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56879606628725,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56879606661493,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56879606694261,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56879606727029,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_60LightBlondeFrontShot_2_5275b46c-2a5c-45fd-9a28-dc59f206a7f4.jpg?v=1772879245"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-1001-white-blonde-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #1001 White Blonde 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56879613411701,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56879613444469,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56879613477237,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56879613510005,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56879613542773,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56879613575541,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56879613608309,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56879613641077,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_1001WhiteFrontShot_3_541fe94f-68d9-4500-ae6c-4cecb5445fae.jpg?v=1772879933"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-m18-22-barcelona-mixed-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #M18\/22 Barcelona Mixed 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56879848784245,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56879848817013,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56879848849781,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56879848882549,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56879848915317,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56879848948085,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56879848980853,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56879849013621,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_M18-22hairextensions_29_Front_ea6c60c2-cfe1-47df-82d4-abf1ddbcc3fe.jpg?v=1772886118"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-4-27-milan-highlighted-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4\/27 Milan Highlighted 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56882843976053,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56882844008821,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56882844041589,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56882844074357,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56882844107125,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56882844139893,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56882844172661,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56882844205429,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardolly_4-24hairextensions_10_944e7ae5-90f2-4e8a-8f29-2cdbc45ef66b.jpg?v=1773019402"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-4-8-santorini-highlighted-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #4\/8 Santorini Highlighted 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56882856821109,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56882856853877,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56882856886645,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56882856919413,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56882856952181,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56882856984949,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56882857017717,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56882857050485,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_4-8SantoriniHighlighted_49_852a7822-972f-4d2c-acbe-333c62bb3036.jpg?v=1773020037"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-2-6-paris-highlighted-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #2\/6 Paris Highlighted 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56891424113013,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56891424145781,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56891424178549,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56891424211317,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56891424244085,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56891424276853,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56891424309621,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56891424342389,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_2-4TuscanyFrontShot_49_e1f5df7a-34a2-47ae-b246-aa7df2ce7608.jpg?v=1773234395"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-18-60-la-highlighted-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #18\/60 LA Highlighted 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56891443544437,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56891443577205,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56891443609973,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56891443642741,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56891443675509,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56891443708277,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56891443741045,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56891443773813,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_18-60_17_c81d0ca5-4869-43c1-9141-7852556515cb.jpg?v=1773235313"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-6-24-new-york-highlighted-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #6\/24 New York Highlighted 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56891472675189,"sku":null,"price":209.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56891472707957,"sku":null,"price":254.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56891472740725,"sku":null,"price":379.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56891472773493,"sku":null,"price":486.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56891472806261,"sku":null,"price":657.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56891472839029,"sku":null,"price":749.99,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56891472871797,"sku":null,"price":849.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56891472904565,"sku":null,"price":979.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_6-24NewYorkHighlightedFrontShot40_0335e594-6895-4d8f-abe6-5c48d3fd00e5.jpg?v=1773235921"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-t2-4-18-london-balayage-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T2-4\/18 London Balayage 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56901551522165,"sku":null,"price":223.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56901551554933,"sku":null,"price":264.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56901551587701,"sku":null,"price":389.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56901551620469,"sku":null,"price":499.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56901551653237,"sku":null,"price":672.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56901551686005,"sku":null,"price":769.9,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56901551718773,"sku":null,"price":869.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56901551751541,"sku":null,"price":999.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T2-4-18LondonBalayageLightBlondeFrontShot_54_6611dedb-02fc-41c6-b910-39bcc1f8ee39.jpg?v=1773487649"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-t4-8-22-montreal-balayage-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T4-8\/22 Montreal Balayage 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56901702353269,"sku":null,"price":223.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56901702386037,"sku":null,"price":264.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56901702418805,"sku":null,"price":389.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56901702451573,"sku":null,"price":499.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56901702484341,"sku":null,"price":672.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56901702517109,"sku":null,"price":769.9,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56901702549877,"sku":null,"price":869.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56901702582645,"sku":null,"price":999.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T4-8-60MontrealHighlightedFrontShot_150_560768cd-7fab-4d54-afb5-7e2a886baeaf.jpg?v=1773516507"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-t5-9-613-dubai-balayage-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T5-9\/613 Dubai Balayage 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56905957867893,"sku":null,"price":223.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56905957900661,"sku":null,"price":264.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56905957933429,"sku":null,"price":389.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56905957966197,"sku":null,"price":499.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56905957998965,"sku":null,"price":672.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56905958031733,"sku":null,"price":769.9,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56905958064501,"sku":null,"price":869.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56905958097269,"sku":null,"price":999.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T4-18-60DubaiBalayageLightBlondeFrontShot_1_01493cda-74cb-4808-8775-c3f083c96fe2.jpg?v=1773671556"},{"product_id":"flat-weft-hair-extensions-custom-order-2-4-weeks-shipping-t8-24-60-laguna-beach-balayage-96g-236g-luxury-russian-remy-human-hair","title":"Flat Weft Hair Extensions - CUSTOM ORDER, 2-4 WEEKS SHIPPING, #T8-24\/60 Laguna Beach Balayage 96G-236G - Luxury Remy Human Hair","description":"\u003c!-- === PACK GUIDE + COLOUR MATCH (buttons + modals) + Existing Content === --\u003e\n\n\u003c!-- Buttons removed (PACK GUIDE + MATCH MY HAIR COLOUR) --\u003e\n\n\u003c!-- Customer video strip (NOW directly below buttons) --\u003e\n\u003cdiv class=\"product-video-strip\" id=\"productVideoStrip\" aria-label=\"Customer videos\"\u003e\n  \u003c!-- ...video items unchanged... --\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dfb301c1a5ad43e78550721e000ef95a.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333534_small_copy.jpg?v=1756403273\" alt=\"Video 1 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/ce3cb83f9685466794ce7b8a58782080.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433_small_b51198d9-2040-4f5a-8dac-4fd0465be86b.jpg?v=1755753464\" alt=\"Video 2 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/55f7cf6af72141aea67a7edae73d84b8.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333_small_fd12aba7-6ad0-41a6-bb82-4b0b057b1cce.jpg?v=1755753465\" alt=\"Video 3 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/1455173019f645659506b2f239432289.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d563433357889_small_4464836b-0deb-4797-8000-e989e56530bf.jpg?v=1756185553\" alt=\"Video 4 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n  \u003cfigure class=\"pvs-item\" data-video=\"https:\/\/cdn.shopify.com\/videos\/c\/o\/v\/dba9617be75d4b589e6d8fd3f66fe0a1.mp4\"\u003e\n    \u003cimg class=\"pvs-thumb\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/cee37333-17dd-0b54-5355-ef965e146d5634333578_small_copy.jpg?v=1756183240\" alt=\"Video 5 Thumbnail\"\u003e\n    \u003cvideo class=\"pvs-player\" preload=\"metadata\" muted playsinline\u003e\u003c\/video\u003e\n    \u003cdiv class=\"pvs-play\" aria-hidden=\"true\"\u003e\u003cdiv class=\"pvs-icon\"\u003e\u003csvg viewbox=\"0 0 24 24\" focusable=\"false\" aria-hidden=\"true\"\u003e\u003cpolygon points=\"8,5 19,12 8,19\" fill=\"#000\"\u003e\u003c\/polygon\u003e\u003c\/svg\u003e\u003c\/div\u003e\u003c\/div\u003e\n  \u003c\/figure\u003e\n\u003c\/div\u003e\n\n\u003c!-- 👉 YouTube video now directly beneath the video strip --\u003e\n\u003ciframe title=\"YouTube video player\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube-nocookie.com\/embed\/LejoiOI5nVM?rel=0\u0026amp;modestbranding=1\u0026amp;playsinline=1\u0026amp;autoplay=0\u0026amp;controls=1\u0026amp;fs=0\" frameborder=\"0\" allow=\"accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"\u003e\n\u003c\/iframe\u003e\n\n\u003c!-- Review GIF --\u003e\n\u003cp class=\"reviews-gif\"\u003e\n  \u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_tape_in_hair_extensions_reviews_4.gif?v=1722302610\" alt=\"Tape-in hair extensions reviews\" loading=\"lazy\"\u003e\n\u003c\/p\u003e\n\n\u003cstyle\u003e\n  \/* (styles unchanged) *\/\n  .od-cta-row{display:flex;gap:12px;margin:10px 0 12px}\n  .od-bundle-image{margin:6px 0 10px}\n  .od-bundle-image img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .od-btn{--btn-scale:.65;flex:1 1 0;appearance:none;border:1px solid #d1d5db;border-radius:10px;padding:calc(12px * var(--btn-scale)) 16px;background:#e5e7eb;color:#111;text-transform:uppercase;font-weight:700;letter-spacing:.04em;font-size:calc(16px * var(--btn-scale));line-height:1.1;cursor:pointer;transition:filter .2s ease, transform .02s ease, box-shadow .2s ease, background .2s ease}\n  .od-btn:hover{filter:brightness(.96)}\n  .od-btn:active{transform:translateY(1px)}\n  .od-btn:focus-visible{outline:none;box-shadow:0 0 0 3px rgba(0,0,0,.75)}\n  @media (max-width:480px){.od-btn{padding:calc(12px * var(--btn-scale)) 10px;font-size:calc(14px * var(--btn-scale))}}\n  .od-modal{position:fixed;inset:0;display:none;z-index:2147483647}\n  .od-modal.is-open{display:block}\n  .od-modal__overlay{position:absolute;inset:0;background:rgba(0,0,0,.55)}\n  .od-modal__dialog{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#fff;width:min(900px,92vw);max-height:90vh;border-radius:14px;overflow:hidden;display:flex;flex-direction:column;box-shadow:0 10px 30px rgba(0,0,0,.25)}\n  .od-modal__header{padding:12px 48px 12px 16px;border-bottom:1px solid rgba(0,0,0,.06);font-weight:700;text-transform:uppercase;letter-spacing:.03em}\n  .od-modal__body{padding:14px;overflow:auto;-webkit-overflow-scrolling:touch;background:#fff}\n  .od-modal__close{position:absolute;top:8px;right:8px;width:38px;height:38px;border:0;border-radius:50%;background:rgba(0,0,0,.6);color:#fff;font-size:22px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:10;pointer-events:auto}\n  .od-modal__close:hover{background:rgba(0,0,0,.8)}\n  .od-modal img{width:100%;height:auto;display:block}\n  .od-no-scroll{overflow:hidden}\n  @media (max-width:480px){\n    #colourMatchModal .od-modal__body{padding-bottom:max(80px,calc(64px + env(safe-area-inset-bottom,0px)))}\n    #colourMatchModal .od-modal__close{top:auto;bottom:calc(12px + env(safe-area-inset-bottom,0px));left:50%;right:auto;transform:translateX(-50%);width:auto;height:auto;padding:10px 16px;border-radius:999px;font-size:16px;background:rgba(0,0,0,.85);z-index:100}\n  }\n  .trust-badges-top,.reviews-gif,.trust-badges-bottom{margin:10px 0 0;padding:0}\n  .trust-badges-top img,.reviews-gif img,.trust-badges-bottom img{max-width:100%;height:auto;display:block;margin:0 auto}\n  .trust-badges-top{margin-top:0}\n  .product-video-strip{display:flex;gap:12px;overflow-x:auto;padding:6px 0;margin:0;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;flex-wrap:nowrap}\n  .pvs-item{position:relative;aspect-ratio:9\/16;background:#000;border-radius:12px;overflow:hidden;scroll-snap-align:start;flex:0 0 80vw;max-width:360px;cursor:pointer}\n  @media (min-width:768px){.pvs-item{flex:0 0 calc(20% - 10px);max-width:none}}\n  @media (max-width:767px){.pvs-item{flex:0 0 25vw;max-width:none}}\n  .pvs-thumb,.pvs-player{width:100%;height:100%;object-fit:cover;display:block}\n  .pvs-player{display:none}\n  .pvs-play{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}\n  .pvs-icon{width:44px;height:44px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.25)}\n  .pvs-icon svg{width:18px;height:18px;display:block}\n  .fullscreen-close{position:absolute;top:16px;right:16px;font-size:28px;color:white;background:rgba(0,0,0,.5);border:none;border-radius:50%;width:40px;height:40px;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:10000;line-height:1}\n  .fullscreen-close:hover{background:rgba(0,0,0,.8)}\n\u003c\/style\u003e\n\n\u003c!-- (Pack Guide Modal removed previously) --\u003e\n\n\u003c!-- Colour Match Modal (kept, but no button on-page opens it now) --\u003e\n\u003cdiv class=\"od-modal\" id=\"colourMatchModal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"colourMatchTitle\" aria-hidden=\"true\"\u003e\n  \u003cdiv class=\"od-modal__overlay\" data-close\u003e\u003c\/div\u003e\n  \u003cdiv class=\"od-modal__dialog\" role=\"document\"\u003e\n    \u003cbutton class=\"od-modal__close\" type=\"button\" aria-label=\"Close\"\u003eClose ✕\u003c\/button\u003e\n    \u003cdiv class=\"od-modal__header\" id=\"colourMatchTitle\"\u003eColour Match\u003c\/div\u003e\n    \u003cdiv class=\"od-modal__body\"\u003e\n      \u003cdiv style=\"margin:0 auto;\" class=\"pxFormGenerator\" id=\"JlU5CTRJPtEmC43XXyFFYw\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e\n\n\u003cscript\u003e\n  \/* ===== Modals ===== *\/\n  (function () {\n    const $ = (s, r=document) =\u003e r.querySelector(s);\n    const $$ = (s, r=document) =\u003e Array.from(r.querySelectorAll(s));\n\n    function openModal(modal){\n      if(!modal) return;\n      if (modal.parentNode !== document.body) {\n        document.body.appendChild(modal);\n      }\n      modal.classList.add('is-open');\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('od-no-scroll');\n      $('.od-modal__close', modal)?.focus();\n    }\n\n    function closeModal(modal){\n      if(!modal) return;\n      modal.classList.remove('is-open');\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('od-no-scroll');\n    }\n\n    \/\/ (Button triggers removed)\n\n    \/\/ Close handlers\n    $$('.od-modal').forEach(m =\u003e {\n      const handler = (e) =\u003e {\n        if (e.target.matches('.od-modal__overlay, .od-modal__close')) {\n          e.preventDefault();\n          e.stopPropagation();\n          closeModal(m);\n        }\n      };\n      m.addEventListener('click', handler, { passive: false });\n      m.addEventListener('touchstart', handler, { passive: false });\n    });\n\n    document.addEventListener('keydown', (e) =\u003e {\n      if (e.key === 'Escape') $$('.od-modal.is-open').forEach(m =\u003e closeModal(m));\n    });\n  })();\n\n  \/* ===== Product video strip (unchanged functionality) ===== *\/\n  (function () {\n    const strip = document.getElementById('productVideoStrip');\n    if (!strip) return;\n\n    let sequenceStarted = false;\n    let currentIndex = 0;\n    let timerId = null;\n    const items = Array.from(strip.querySelectorAll('.pvs-item'));\n\n    function getEls(fig){\n      return {\n        fig,\n        thumb: fig.querySelector('.pvs-thumb'),\n        player: fig.querySelector('.pvs-player'),\n        src: fig.dataset.video\n      };\n    }\n\n    function resetAll(){\n      clearTimeout(timerId);\n      timerId = null;\n      items.forEach(fig =\u003e {\n        const { thumb, player } = getEls(fig);\n        if (player){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n        }\n        if (thumb) thumb.style.display = 'block';\n      });\n    }\n\n    function playIndex(i){\n      if (i \u003c 0 || i \u003e= items.length){\n        sequenceStarted = true;\n        resetAll();\n        return;\n      }\n      currentIndex = i;\n\n      items.forEach((f, idx) =\u003e {\n        const { thumb, player } = getEls(f);\n        if (!player) return;\n        if (idx !== i){\n          player.pause();\n          player.currentTime = 0;\n          player.style.display = 'none';\n          if (thumb) thumb.style.display = 'block';\n        }\n      });\n\n      const { thumb, player, src } = getEls(items[i]);\n      if (!player) return;\n\n      if (player.src !== src) player.src = src;\n\n      if (thumb) thumb.style.display = 'none';\n      player.style.display = 'block';\n      player.muted = true;\n      player.playsInline = true;\n\n      const onLoaded = () =\u003e {\n        const maxSeg = 15;\n        const dur = (isFinite(player.duration) \u0026\u0026 player.duration \u003e 0) ? player.duration : maxSeg;\n        const segment = Math.min(maxSeg, dur);\n\n        player.play().catch(() =\u003e {});\n        clearTimeout(timerId);\n        timerId = setTimeout(() =\u003e {\n          if (!player.ended) player.pause();\n          playIndex(i + 1);\n        }, segment * 1000);\n      };\n\n      const onEnded = () =\u003e {\n        clearTimeout(timerId);\n        playIndex(i + 1);\n      };\n\n      player.removeEventListener('loadedmetadata', onLoaded);\n      player.addEventListener('loadedmetadata', onLoaded, { once: true });\n\n      player.removeEventListener('ended', onEnded);\n      player.addEventListener('ended', onEnded, { once: true });\n\n      if (player.readyState \u003e= 1) onLoaded();\n    }\n\n    const io = new IntersectionObserver((entries) =\u003e {\n      const entry = entries[0];\n      if (!entry) return;\n      if (entry.isIntersecting \u0026\u0026 !sequenceStarted){\n        sequenceStarted = true;\n        playIndex(0);\n        io.unobserve(strip);\n      }\n    }, { threshold: 0.35 });\n\n    io.observe(strip);\n\n    strip.addEventListener('click', function (e) {\n      const card = e.target.closest('.pvs-item');\n      if (!card) return;\n\n      resetAll();\n\n      const videoSrc = card?.dataset?.video;\n      if (!videoSrc) return;\n\n      const wrapper = document.createElement('div');\n      wrapper.style.cssText='position:fixed;top:0;left:0;width:100vw;height:100vh;background:black;display:flex;align-items:center;justify-content:center;z-index:9999;';\n\n      const video = document.createElement('video');\n      video.src = videoSrc;\n      video.controls = true;\n      video.autoplay = true;\n      video.muted = true;\n      video.playsInline = true;\n      video.style.maxWidth = '100%';\n      video.style.maxHeight = '100%';\n      wrapper.appendChild(video);\n\n      const closeBtn = document.createElement('button');\n      closeBtn.className='fullscreen-close';\n      closeBtn.type='button';\n      closeBtn.setAttribute('aria-label','Close video');\n      closeBtn.innerHTML='\u0026times;';\n      closeBtn.addEventListener('click', () =\u003e wrapper.remove());\n      wrapper.appendChild(closeBtn);\n\n      document.body.appendChild(wrapper);\n      video.play().catch(() =\u003e {});\n\n      video.addEventListener('ended', () =\u003e wrapper.remove());\n\n      const onKey = (evt) =\u003e {\n        if (evt.key === 'Escape'){\n          wrapper.remove();\n          document.removeEventListener('keydown', onKey);\n        }\n      };\n      document.addEventListener('keydown', onKey, { once: true });\n    });\n  })();\n\u003c\/script\u003e\n\u003c!-- === End combined block === --\u003e\n\n\n\n\u003cdiv id=\"product-desc\"\u003e\n\u003ch3\u003eDESCRIPTION\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003ch3\u003e\u003cstrong\u003eABOUT OUR HAIR\u003c\/strong\u003e\u003c\/h3\u003e\n\u003cp\u003e\u003cstrong\u003eExperience the height of luxury with our high quality, Remy, Flat Weft Human Hair Extensions, customers timeless choice for over a decade. Crafted from the finest virgin hair, these extensions offer professional salon-quality Remy (cuticle) strands along with superior thickness and long-lasting reusable quality up to 1 year. \u003c\/strong\u003e\u003cstrong\u003eOur Flat Weft are perfect for anyone with thin, fine or short hair. Seamlessly blend extra volume and length with your hair.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003ePACK CONTAINS: \u003c\/strong\u003e2 Wefts, 12 inches in width approximately\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR MATERIALS: \u003c\/strong\u003eSourced and made from virgin, 100% remy, cuticle aligned, human hair\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR ENDS THICKNESS: \u003c\/strong\u003eDouble drawn, (thick from root to tip)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR LIFESPAN:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003e1 year or more with correct care (see Aftercare Instructions).\u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eHAIR GRADE:\u003cspan\u003e \u003c\/span\u003e\u003c\/strong\u003eSalon professional grade hair\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR LENGTHS: \u003c\/strong\u003e16\", 18, 20\", 22\", 24\",26\", 28\" \u0026amp; 30\" (approximately)\u003c\/span\u003e\u003c\/li\u003e\n\u003cli\u003e\u003cspan\u003e\u003cstrong\u003eHAIR WEIGHTS: \u003c\/strong\u003e16” – (2X 48g per pack), 18” – (2X 58g per pack), 20” – (2X 68g per pack), 22” – (2X 78g per pack), 24” – (2X 88g per pack), 26” – (2X 98g per pack), 28” – (2X 108g per pack), 30” – (2X 118g per pack).\u003c\/span\u003e\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003ch3\u003eDELIVERY \u0026amp; RETURNS\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003e\u003cstrong\u003eShipping Information\u003c\/strong\u003e\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003e\u003cstrong\u003eCustom Order Delivery\u003c\/strong\u003e (2\u003c\/span\u003e-4 weeks from your purchase date). \u003cspan\u003e\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eCustom Order Europe Delivery\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e(3-5 weeks from your purchase date). \u003cbr\u003e\n\u003c\/li\u003e\n\u003cli\u003eWe do not pay customs or import duties for your orders or returns.  \u003cspan style=\"font-size: 0.875rem;\"\u003e \u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003e\u003cstrong\u003eReturning an Item To Us\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eYour custom order will be made especially for you. Once you have placed your custom order, you cannot cancel or change it and it is not refundable and cannot be exchanged.Your statutory rights are not affected.\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eOur Terms and Conditions apply to all orders placed on our website. Read our \u003ca href=\"https:\/\/oh-dear-dolly-2.myshopify.com\/pages\/terms-and-conditions\" target=\"_blank\"\u003eTerms and Conditions\u003c\/a\u003e.\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eREVIEWS \u003cspan\u003e⭐⭐⭐⭐⭐ \u003cstrong\u003e(30)\u003c\/strong\u003e\u003c\/span\u003e\n\u003c\/h3\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_1_600x600.jpg?v=1707121489\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_27_600x600.jpg?v=1716142948\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_2_600x600.jpg?v=1707121556\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_24_7e9d609a-6509-4e57-a0f4-93f7a4bb18d4_600x600.jpg?v=1716141360\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_25_600x600.jpg?v=1716142147\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_rihanna_review_600x600.jpg?v=1716134481\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_23_600x600.jpg?v=1716135328\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_22_600x600.jpg?v=1716134585\" style=\"float: none;\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_28_600x600.jpg?v=1716143281\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_30_600x600.jpg?v=1716144215\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_3_600x600.jpg?v=1707121584\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_29_600x600.jpg?v=1716143782\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_4_600x600.jpg?v=1707121608\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_5_600x600.jpg?v=1707122005\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_6_600x600.jpg?v=1707122194\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_7_600x600.jpg?v=1707122433\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_8_600x600.jpg?v=1707122553\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_9_600x600.jpg?v=1707123163\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_10_600x600.jpg?v=1707123342\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_11_600x600.jpg?v=1707123557\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_12_600x600.jpg?v=1707123775\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_13_600x600.jpg?v=1707124283\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_14_600x600.jpg?v=1707124401\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_15_600x600.jpg?v=1707124519\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_16_600x600.jpg?v=1707124649\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_17_600x600.jpg?v=1707124788\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_18_600x600.jpg?v=1707124946\" alt=\"\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_19_600x600.jpg?v=1707125396\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg style=\"float: none;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/oh_dear_dolly_reviews_26_600x600.jpg?v=1716142451\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cimg alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyreviews_20_600x600.jpg?v=1707125416\"\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eAFTERCARE\u003cbr\u003e\n\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eCare of Your oh dear dolly Human Hair Extensions\u003c\/em\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003ePlease take care of your hair extensions, they need to be looked after to maintain their lifespan and quality - here are some Dos and Don’ts we need you to follow.\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDos ✔️\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a clarifying shampoo on your own hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e✔️ After your extensions are fitted, wait at least 48 hours before washing\/conditioning\u003c\/p\u003e\n\u003cp\u003e✔️ Brush your hair extensions regularly using a good quality brush\u003c\/p\u003e\n\u003cp\u003e✔️ Spray regularly with a salon quality leave in conditioning spray and apply a little hair oil to the mid-lengths and ends from time to time to prevent the hair becoming dry (always avoid the bonded\/sewn area)\u003c\/p\u003e\n\u003cp\u003e✔️ If using heated styling appliances, use a heat protection product and set at no more than 185 degrees Celsius\u003c\/p\u003e\n\u003cp\u003e✔️ Brush and plait your hair and extensions into one or two large plaits before going to sleep - we recommend sleeping on a silk pillowcase\u003c\/p\u003e\n\u003cp\u003e✔️ Always use a sulfate free shampoo, conditioner and masque\u003c\/p\u003e\n\u003cp\u003e✔️ Your extensions and hair must be 100% dry before going to sleep\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDon’ts ❌\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp style=\"margin: 0cm; margin-bottom: .0001pt;\"\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use heated styling appliances or hair dryers excessively as this will dramatically reduce the lifespan and quality of your hair extensions.\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any oil or oil like substance to your hair before having your extensions fitted\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use haircare products containing sulphates or proteins\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use purple shampoo or conditioner or any type of colour toning haircare products\u003c\/p\u003e\n\u003cp\u003e❌ Don’t apply any products directly onto the bonded or sewn area of your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t swim in your extensions as this can cause them to mat and substances in the water such as salt and chlorine can ruin them and change their colour\u003c\/p\u003e\n\u003cp\u003e❌ Don’t use products containing alcohol on your extensions\u003c\/p\u003e\n\u003cp\u003e❌ Don’t sleep when your extensions and hair are not 100% dry\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003ePlease be aware that we are unable to accept any responsibility for damage caused if you do not follow these instructions or for damage caused by swimming, the application of colour, bleach, purple shampoo or conditioner, toner or any other processing (including a perm).\u003c\/p\u003e\n\u003cp\u003eCheck our \u003ca href=\"https:\/\/ohdeardolly.com\/pages\/terms-and-conditions\"\u003e\u003cstrong\u003eTerms and conditions\u003c\/strong\u003e\u003c\/a\u003e page for more information.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003ch3\u003eMATCH MY HAIR COLOUR\u003c\/h3\u003e\n\u003cdiv\u003e\n\u003cp\u003eWe have worked really hard to try to make sure that our colour swatches represent the hair colours as they are in real life but monitors and devices do vary. If you would like us to help you match your hair colour, go to \u003ca href=\"\/pages\/match-my-hair-colour\"\u003eMatch My Hair Colour\u003c\/a\u003e.\u003c\/p\u003e\n\u003cdiv id=\"JlU5CTRJPtEmC43XXyFFYw\" class=\"pxFormGenerator\" style=\"margin: 0 auto;\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","brand":"Oh Dear Dolly","offers":[{"title":"16\"","offer_id":56905986146677,"sku":null,"price":223.99,"currency_code":"GBP","in_stock":true},{"title":"18\"","offer_id":56905986179445,"sku":null,"price":264.99,"currency_code":"GBP","in_stock":true},{"title":"20\"","offer_id":56905986212213,"sku":null,"price":389.99,"currency_code":"GBP","in_stock":true},{"title":"22\"","offer_id":56905986244981,"sku":null,"price":499.99,"currency_code":"GBP","in_stock":true},{"title":"24\"","offer_id":56905986277749,"sku":null,"price":672.99,"currency_code":"GBP","in_stock":true},{"title":"26\"","offer_id":56905986310517,"sku":null,"price":769.9,"currency_code":"GBP","in_stock":true},{"title":"28\"","offer_id":56905986343285,"sku":null,"price":869.99,"currency_code":"GBP","in_stock":true},{"title":"30\"","offer_id":56905986376053,"sku":null,"price":999.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0816\/0893\/files\/ohdeardollyhairextensions_T18-22-60LagunaBeachBalayageLightBlondeFrontShot_29_ef4836aa-50ba-4fb7-9776-46d3f6a74709.jpg?v=1773672133"}],"url":"https:\/\/ohdeardolly.com\/collections\/hair-extensions-collection.oembed","provider":"OH DEAR DOLLY","version":"1.0","type":"link"}