{"title":"multi-border","description":"","products":[{"product_id":"multi-border-s-s-t-shirts-コピー","title":"multi border ringer t-shirts_grey","description":"\u003cp\u003e首元と袖口にパイピングを施したトレンドのリンガーT-shirtsが登場！！\u003cbr\u003eoojuならではの特徴的なマルチボーダーが、ヴィンテージスポーツのテイストをプラスしています。\u003cbr\u003eデニムとも相性抜群のキャッチーなカラーリングも魅力の1枚は、スタイリングの主役になる今シーズンのマストハブアイテムです。\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003emodel : Takito 87cm size1\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003ecolor :\u003cspan\u003e grey, pink, khaki\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003esize : 1 , 2 , 3 , 4\u003c\/p\u003e\n\u003cp\u003eㅤ\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003ematerial： コットン100%\u003c\/span\u003e\u003cbr\u003e             \u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/T_kawai_480x480.png?v=1715739844\" alt=\"\" style=\"margin-bottom: 16px; float: none;\"\u003e\u003c\/div\u003e\n\u003ctable style=\"height: 143px; width: 100%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003esize \u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e1\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e3\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003eA:着丈\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e38 \u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e55\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003eB:身幅\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e38\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e41\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e45\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003eC:袖丈\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e8\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e9\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e10\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e11\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003e身長（cm）\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e95-105\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e110-120\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e125-135\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003cstyle\u003e\n.rte ul, .rte ol {\n    margin: 0 auto;\n}\n.slick-dots {\n    position: absolute;\n    bottom: 15px;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    text-align: center;\n}\n.slick-dots li {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    cursor: pointer;\n}\n  \n  .slick-dots li button:before {\n    font-family: auto;\n    font-size: 6px;\n    line-height: 20px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 15px;\n    height: 16px;\n    content: '•';\n    text-align: center;\n    opacity: .25;\n    color: black;\n    \n\n}\n  \n.pswp img {\n    max-width: none;\n    object-fit: contain;\n}\n  \n  .pswp__img--placeholder--blank{\n    display: none !important;\n}\n    \n\u003c\/style\u003e\n\u003cdiv class=\"img\"\u003e\n\u003cdiv class=\"slider_wrap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Root element of PhotoSwipe. Must have class pswp. --\u003e\n\u003cdiv class=\"pswp\" role=\"dialog\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\n\u003c!-- Background of PhotoSwipe. \n         It's a separate element as animating opacity is faster than rgba(). --\u003e\u003c!-- Slides wrapper with overflow:hidden. --\u003e\n\u003cdiv class=\"pswp__scroll-wrap\"\u003e\n\u003c!-- Container that holds slides. \n            PhotoSwipe keeps only 3 of them in the DOM to save memory.\n            Don't modify these 3 pswp__item elements, data is added later on. --\u003e\n\u003cdiv class=\"pswp__container\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --\u003e\n\u003cdiv class=\"pswp__ui pswp__ui--hidden\"\u003e\n\u003cdiv class=\"pswp__top-bar\"\u003e\n\u003c!--  Controls are self-explanatory. Order can be changed. --\u003e\n\u003cdiv class=\"pswp__counter\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--zoom\" title=\"Zoom in\/out\"\u003e\u003c\/button\u003e \u003c!-- Preloader demo https:\/\/codepen.io\/dimsemenov\/pen\/yyBWoR --\u003e \u003c!-- element will get class pswp__preloader--active when preloader is running --\u003e\n\u003cdiv class=\"pswp__preloader\"\u003e\n\u003cdiv class=\"pswp__preloader__icn\"\u003e\n\u003cdiv class=\"pswp__preloader__cut\"\u003e\n\u003cdiv class=\"pswp__preloader__donut\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"\u003e\n\u003cdiv class=\"pswp__share-tooltip\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"\u003e \u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"\u003e \u003c\/button\u003e\n\u003cdiv class=\"pswp__caption\"\u003e\n\u003cdiv class=\"pswp__caption__center\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\n    \/\/slickスライダー初期化  \n    $(slider).slick({\n        autoplay: true,\n        arrows: false,\n       dots: true,\n        infinite: true \n    });\n\nvar initPhotoSwipeFromDOM = function(gallerySelector) {\n\n    \/\/ parse slide data (url, title, size ...) from DOM elements \n    \/\/ (children of gallerySelector)\n    var parseThumbnailElements = function(el) {\n        var thumbElements = el.childNodes,\n            numNodes = thumbElements.length,\n            items = [],\n            figureEl,\n            linkEl,\n            size,\n            item;\n\n        for(var i = 0; i \u003c numNodes; i++) {\n\n            figureEl = thumbElements[i]; \/\/ \u003cfigure\u003e element\n\n            \/\/ include only element nodes \n            if(figureEl.nodeType !== 1) {\n                continue;\n            }\n\n            linkEl = figureEl.children[0]; \/\/ \u003ca\u003e element\n\n            size = linkEl.getAttribute('data-size').split('x');\n\n            \/\/ create slide object\n            item = {\n                src: linkEl.getAttribute('href'),\n                w: parseInt(size[0], 10),\n                h: parseInt(size[1], 10)\n            };\n\n            if(figureEl.children.length \u003e 1) {\n                \/\/ \u003cfigcaption\u003e content\n                item.title = figureEl.children[1].innerHTML; \n            }\n\n            if(linkEl.children.length \u003e 0) {\n                \/\/ \u003cimg\u003e thumbnail element, retrieving thumbnail url\n                item.msrc = linkEl.children[0].getAttribute('src');\n            } \n\n            item.el = figureEl; \/\/ save link to element for getThumbBoundsFn\n            items.push(item);\n        }\n\n        return items;\n    };\n\n    \/\/ find nearest parent element\n    var closest = function closest(el, fn) {\n        return el \u0026\u0026 ( fn(el) ? el : closest(el.parentNode, fn) );\n    };\n\n    \/\/ triggers when user clicks on thumbnail\n    var onThumbnailsClick = function(e) {\n        e = e || window.event;\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n        var eTarget = e.target || e.srcElement;\n\n        \/\/ find root element of slide\n        var clickedListItem = closest(eTarget, function(el) {\n            return (el.tagName \u0026\u0026 el.tagName.toUpperCase() === 'FIGURE');\n        });\n\n        if(!clickedListItem) {\n            return;\n        }\n\n        \/\/ find index of clicked item by looping through all child nodes\n        \/\/ alternatively, you may define index via data- attribute\n        var clickedGallery = clickedListItem.parentNode,\n            childNodes = clickedListItem.parentNode.childNodes,\n            numChildNodes = childNodes.length,\n            nodeIndex = 0,\n            index;\n\n        for (var i = 0; i \u003c numChildNodes; i++) {\n            if(childNodes[i].nodeType !== 1) { \n                continue; \n            }\n\n            if(childNodes[i] === clickedListItem) {\n                index = nodeIndex;\n                break;\n            }\n            nodeIndex++;\n        }\n\n        if(index \u003e= 0) {\n            \/\/ open PhotoSwipe if valid index found\n            openPhotoSwipe( index, clickedGallery );\n        }\n        return false;\n    };\n\n    \/\/ parse picture index and gallery index from URL (#\u0026pid=1\u0026gid=2)\n    var photoswipeParseHash = function() {\n        var hash = window.location.hash.substring(1),\n        params = {};\n\n        if(hash.length \u003c 5) {\n            return params;\n        }\n\n        var vars = hash.split('\u0026');\n        for (var i = 0; i \u003c vars.length; i++) {\n            if(!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');  \n            if(pair.length \u003c 2) {\n                continue;\n            }           \n            params[pair[0]] = pair[1];\n        }\n\n        if(params.gid) {\n            params.gid = parseInt(params.gid, 10);\n        }\n\n        return params;\n    };\n\n    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n        var pswpElement = document.querySelectorAll('.pswp')[0],\n            gallery,\n            options,\n            items;\n\n        items = parseThumbnailElements(galleryElement);\n\n        \/\/ define options (if needed)\n        options = {\n\n            \/\/ define gallery index (for URL)\n            galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n            getThumbBoundsFn: function(index) {\n                \/\/ See Options -\u003e getThumbBoundsFn section of documentation for more info\n                var thumbnail = items[index].el.getElementsByTagName('img')[0], \/\/ find thumbnail\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                    rect = thumbnail.getBoundingClientRect(); \n\n                return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n            }\n\n        };\n\n        \/\/ PhotoSwipe opened from URL\n        if(fromURL) {\n            if(options.galleryPIDs) {\n                \/\/ parse real index when custom PIDs are used \n                \/\/ http:\/\/photoswipe.com\/documentation\/faq.html#custom-pid-in-url\n                for(var j = 0; j \u003c items.length; j++) {\n                    if(items[j].pid == index) {\n                        options.index = j;\n                        break;\n                    }\n                }\n            } else {\n                \/\/ in URL indexes start from 1\n                options.index = parseInt(index, 10) - 1;\n            }\n        } else {\n            options.index = parseInt(index, 10);\n        }\n\n        \/\/ exit if index not found\n        if( isNaN(options.index) ) {\n            return;\n        }\n\n        if(disableAnimation) {\n            options.showAnimationDuration = 0;\n        }\n\n        \/\/ Pass data to PhotoSwipe and initialize it\n        gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n        gallery.init();\n    };\n\n    \/\/ loop through all gallery elements and bind events\n    var galleryElements = document.querySelectorAll( gallerySelector );\n\n    for(var i = 0, l = galleryElements.length; i \u003c l; i++) {\n        galleryElements[i].setAttribute('data-pswp-uid', i+1);\n        galleryElements[i].onclick = onThumbnailsClick;\n    }\n\n    \/\/ Parse URL and open gallery if it contains #\u0026pid=3\u0026gid=1\n    var hashData = photoswipeParseHash();\n    if(hashData.pid \u0026\u0026 hashData.gid) {\n        openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );\n    }\n};\n\n\/\/ execute above function\ninitPhotoSwipeFromDOM('.my-gallery');\n\u003c\/script\u003e \u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/object-fit-images\/3.2.4\/ofi.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e","brand":"OOJU","offers":[{"title":"1 \/ grey","offer_id":49279142723777,"sku":"OJ-25SSCU01GR01","price":4400.0,"currency_code":"JPY","in_stock":false},{"title":"2 \/ grey","offer_id":49279142756545,"sku":"OJ-25SSCU01GR02","price":4400.0,"currency_code":"JPY","in_stock":false},{"title":"3 \/ grey","offer_id":49279142789313,"sku":"OJ-25SSCU01GR03","price":4400.0,"currency_code":"JPY","in_stock":true},{"title":"4 \/ grey","offer_id":49279142822081,"sku":"OJ-25SSCU01GR04","price":4400.0,"currency_code":"JPY","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/IMG_7001.jpg?v=1748481157"},{"product_id":"new-multi-border-s-s-t-shirts_grey-コピー","title":"multi border ringer t-shirts_pink","description":"\u003cp\u003e首元と袖口にパイピングを施したトレンドのリンガーT-shirtsが登場！！\u003cbr\u003eoojuならではの特徴的なマルチボーダーが、ヴィンテージスポーツのテイストをプラスしています。\u003cbr\u003eデニムとも相性抜群のキャッチーなカラーリングも魅力の1枚は、スタイリングの主役になる今シーズンのマストハブアイテムです。\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003emodel : Emma 102cm size2\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003ecolor :\u003cspan\u003e grey, pink, khaki\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003esize : 1 , 2 , 3 , 4\u003c\/p\u003e\n\u003cp\u003eㅤ\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003ematerial： コットン100%\u003c\/span\u003e\u003cbr\u003e             \u003cspan\u003eㅤ\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/T_kawai_480x480.png?v=1715739844\" alt=\"\" style=\"margin-bottom: 16px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv class=\"img\"\u003e\n\u003cdiv class=\"pswp\" role=\"dialog\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\n\u003cdiv class=\"pswp__bg\"\u003e\n\u003ctable width=\"100%\" style=\"height: 143px; width: 100%;\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003esize \u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e1\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e3\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003eA:着丈\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e38 \u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e55\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003eB:身幅\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e38\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e41\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e45\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003eC:袖丈\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e8\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e9\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e10\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e11\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003e身長（cm）\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e95-105\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e110-120\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e125-135\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003c!-- Slides wrapper with overflow:hidden. --\u003e\n\u003cdiv class=\"pswp__scroll-wrap\"\u003e\n\u003c!-- Container that holds slides. \n            PhotoSwipe keeps only 3 of them in the DOM to save memory.\n            Don't modify these 3 pswp__item elements, data is added later on. --\u003e\n\u003cdiv class=\"pswp__container\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --\u003e\n\u003cdiv class=\"pswp__ui pswp__ui--hidden\"\u003e\n\u003cdiv class=\"pswp__top-bar\"\u003e\n\u003c!--  Controls are self-explanatory. Order can be changed. --\u003e\n\u003cdiv class=\"pswp__counter\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--zoom\" title=\"Zoom in\/out\"\u003e\u003c\/button\u003e \u003c!-- Preloader demo https:\/\/codepen.io\/dimsemenov\/pen\/yyBWoR --\u003e \u003c!-- element will get class pswp__preloader--active when preloader is running --\u003e\n\u003cdiv class=\"pswp__preloader\"\u003e\n\u003cdiv class=\"pswp__preloader__icn\"\u003e\n\u003cdiv class=\"pswp__preloader__cut\"\u003e\n\u003cdiv class=\"pswp__preloader__donut\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"\u003e\n\u003cdiv class=\"pswp__share-tooltip\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"\u003e \u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"\u003e \u003c\/button\u003e\n\u003cdiv class=\"pswp__caption\"\u003e\n\u003cdiv class=\"pswp__caption__center\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\n    \/\/slickスライダー初期化  \n    $(slider).slick({\n        autoplay: true,\n        arrows: false,\n       dots: true,\n        infinite: true \n    });\n\nvar initPhotoSwipeFromDOM = function(gallerySelector) {\n\n    \/\/ parse slide data (url, title, size ...) from DOM elements \n    \/\/ (children of gallerySelector)\n    var parseThumbnailElements = function(el) {\n        var thumbElements = el.childNodes,\n            numNodes = thumbElements.length,\n            items = [],\n            figureEl,\n            linkEl,\n            size,\n            item;\n\n        for(var i = 0; i \u003c numNodes; i++) {\n\n            figureEl = thumbElements[i]; \/\/ \u003cfigure\u003e element\n\n            \/\/ include only element nodes \n            if(figureEl.nodeType !== 1) {\n                continue;\n            }\n\n            linkEl = figureEl.children[0]; \/\/ \u003ca\u003e element\n\n            size = linkEl.getAttribute('data-size').split('x');\n\n            \/\/ create slide object\n            item = {\n                src: linkEl.getAttribute('href'),\n                w: parseInt(size[0], 10),\n                h: parseInt(size[1], 10)\n            };\n\n            if(figureEl.children.length \u003e 1) {\n                \/\/ \u003cfigcaption\u003e content\n                item.title = figureEl.children[1].innerHTML; \n            }\n\n            if(linkEl.children.length \u003e 0) {\n                \/\/ \u003cimg\u003e thumbnail element, retrieving thumbnail url\n                item.msrc = linkEl.children[0].getAttribute('src');\n            } \n\n            item.el = figureEl; \/\/ save link to element for getThumbBoundsFn\n            items.push(item);\n        }\n\n        return items;\n    };\n\n    \/\/ find nearest parent element\n    var closest = function closest(el, fn) {\n        return el \u0026\u0026 ( fn(el) ? el : closest(el.parentNode, fn) );\n    };\n\n    \/\/ triggers when user clicks on thumbnail\n    var onThumbnailsClick = function(e) {\n        e = e || window.event;\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n        var eTarget = e.target || e.srcElement;\n\n        \/\/ find root element of slide\n        var clickedListItem = closest(eTarget, function(el) {\n            return (el.tagName \u0026\u0026 el.tagName.toUpperCase() === 'FIGURE');\n        });\n\n        if(!clickedListItem) {\n            return;\n        }\n\n        \/\/ find index of clicked item by looping through all child nodes\n        \/\/ alternatively, you may define index via data- attribute\n        var clickedGallery = clickedListItem.parentNode,\n            childNodes = clickedListItem.parentNode.childNodes,\n            numChildNodes = childNodes.length,\n            nodeIndex = 0,\n            index;\n\n        for (var i = 0; i \u003c numChildNodes; i++) {\n            if(childNodes[i].nodeType !== 1) { \n                continue; \n            }\n\n            if(childNodes[i] === clickedListItem) {\n                index = nodeIndex;\n                break;\n            }\n            nodeIndex++;\n        }\n\n        if(index \u003e= 0) {\n            \/\/ open PhotoSwipe if valid index found\n            openPhotoSwipe( index, clickedGallery );\n        }\n        return false;\n    };\n\n    \/\/ parse picture index and gallery index from URL (#\u0026pid=1\u0026gid=2)\n    var photoswipeParseHash = function() {\n        var hash = window.location.hash.substring(1),\n        params = {};\n\n        if(hash.length \u003c 5) {\n            return params;\n        }\n\n        var vars = hash.split('\u0026');\n        for (var i = 0; i \u003c vars.length; i++) {\n            if(!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');  \n            if(pair.length \u003c 2) {\n                continue;\n            }           \n            params[pair[0]] = pair[1];\n        }\n\n        if(params.gid) {\n            params.gid = parseInt(params.gid, 10);\n        }\n\n        return params;\n    };\n\n    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n        var pswpElement = document.querySelectorAll('.pswp')[0],\n            gallery,\n            options,\n            items;\n\n        items = parseThumbnailElements(galleryElement);\n\n        \/\/ define options (if needed)\n        options = {\n\n            \/\/ define gallery index (for URL)\n            galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n            getThumbBoundsFn: function(index) {\n                \/\/ See Options -\u003e getThumbBoundsFn section of documentation for more info\n                var thumbnail = items[index].el.getElementsByTagName('img')[0], \/\/ find thumbnail\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                    rect = thumbnail.getBoundingClientRect(); \n\n                return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n            }\n\n        };\n\n        \/\/ PhotoSwipe opened from URL\n        if(fromURL) {\n            if(options.galleryPIDs) {\n                \/\/ parse real index when custom PIDs are used \n                \/\/ http:\/\/photoswipe.com\/documentation\/faq.html#custom-pid-in-url\n                for(var j = 0; j \u003c items.length; j++) {\n                    if(items[j].pid == index) {\n                        options.index = j;\n                        break;\n                    }\n                }\n            } else {\n                \/\/ in URL indexes start from 1\n                options.index = parseInt(index, 10) - 1;\n            }\n        } else {\n            options.index = parseInt(index, 10);\n        }\n\n        \/\/ exit if index not found\n        if( isNaN(options.index) ) {\n            return;\n        }\n\n        if(disableAnimation) {\n            options.showAnimationDuration = 0;\n        }\n\n        \/\/ Pass data to PhotoSwipe and initialize it\n        gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n        gallery.init();\n    };\n\n    \/\/ loop through all gallery elements and bind events\n    var galleryElements = document.querySelectorAll( gallerySelector );\n\n    for(var i = 0, l = galleryElements.length; i \u003c l; i++) {\n        galleryElements[i].setAttribute('data-pswp-uid', i+1);\n        galleryElements[i].onclick = onThumbnailsClick;\n    }\n\n    \/\/ Parse URL and open gallery if it contains #\u0026pid=3\u0026gid=1\n    var hashData = photoswipeParseHash();\n    if(hashData.pid \u0026\u0026 hashData.gid) {\n        openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );\n    }\n};\n\n\/\/ execute above function\ninitPhotoSwipeFromDOM('.my-gallery');\n\u003c\/script\u003e \u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/object-fit-images\/3.2.4\/ofi.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.rte ul, .rte ol {\n    margin: 0 auto;\n}\n.slick-dots {\n    position: absolute;\n    bottom: 15px;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    text-align: center;\n}\n.slick-dots li {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    cursor: pointer;\n}\n  \n  .slick-dots li button:before {\n    font-family: auto;\n    font-size: 6px;\n    line-height: 20px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 15px;\n    height: 16px;\n    content: '•';\n    text-align: center;\n    opacity: .25;\n    color: black;\n    \n\n}\n  \n.pswp img {\n    max-width: none;\n    object-fit: contain;\n}\n  \n  .pswp__img--placeholder--blank{\n    display: none !important;\n}\n    \n\u003c\/style\u003e","brand":"OOJU","offers":[{"title":"1 \/ pink","offer_id":49279152095425,"sku":"OJ-25SSCU01PK01","price":4400.0,"currency_code":"JPY","in_stock":false},{"title":"2 \/ pink","offer_id":49279152128193,"sku":"OJ-25SSCU01PK02","price":4400.0,"currency_code":"JPY","in_stock":true},{"title":"3 \/ pink","offer_id":49279152160961,"sku":"OJ-25SSCU01PK03","price":4400.0,"currency_code":"JPY","in_stock":true},{"title":"4 \/ pink","offer_id":49279152193729,"sku":"OJ-25SSCU01PK04","price":4400.0,"currency_code":"JPY","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/IMG_6859.jpg?v=1748481689"},{"product_id":"new-multi-border-s-s-t-shirts_pink-コピー","title":"multi border ringer t-shirts_khaki","description":"\u003cp\u003e首元と袖口にパイピングを施したトレンドのリンガーT-shirtsが登場！！\u003cbr\u003eoojuならではの特徴的なマルチボーダーが、ヴィンテージスポーツのテイストをプラスしています。\u003cbr\u003eデニムとも相性抜群のキャッチーなカラーリングも魅力の1枚は、スタイリングの主役になる今シーズンのマストハブアイテムです。\u003cbr\u003e\u003cstrong\u003e\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003emodel : Ichika 112cm size3\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003ecolor :\u003cspan\u003e grey, pink, khaki\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003esize : 1 , 2 , 3 , 4\u003c\/p\u003e\n\u003cp\u003eㅤ\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003ematerial： コットン100%\u003c\/span\u003e\u003cbr\u003e             \u003c\/p\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/T_kawai_480x480.png?v=1715739844\" alt=\"\" style=\"margin-bottom: 16px; float: none;\"\u003e\u003c\/div\u003e\n\u003cdiv style=\"text-align: left;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e\n\u003ctable style=\"height: 143px; width: 100%;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003esize \u003cbr\u003e\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e1\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e3\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003eA:着丈\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e38 \u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e55\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 35px;\"\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003eB:身幅\u003c\/p\u003e\n\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e38\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e41\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e43\u003c\/td\u003e\n\u003ctd style=\"height: 35px;\"\u003e\n\u003cp\u003e45\u003c\/p\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003eC:袖丈\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e8\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e9\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e10\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e11\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19px;\"\u003e\n\u003ctd style=\"height: 19px;\"\u003e身長（cm）\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e95-105\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e110-120\u003c\/td\u003e\n\u003ctd style=\"height: 19px;\"\u003e125-135\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.rte ul, .rte ol {\n    margin: 0 auto;\n}\n.slick-dots {\n    position: absolute;\n    bottom: 15px;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    text-align: center;\n}\n.slick-dots li {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    cursor: pointer;\n}\n  \n  .slick-dots li button:before {\n    font-family: auto;\n    font-size: 6px;\n    line-height: 20px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 15px;\n    height: 16px;\n    content: '•';\n    text-align: center;\n    opacity: .25;\n    color: black;\n    \n\n}\n  \n.pswp img {\n    max-width: none;\n    object-fit: contain;\n}\n  \n  .pswp__img--placeholder--blank{\n    display: none !important;\n}\n    \n\u003c\/style\u003e\n\u003cdiv class=\"img\"\u003e\n\u003cdiv class=\"slider_wrap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Root element of PhotoSwipe. Must have class pswp. --\u003e\n\u003cdiv class=\"pswp\" role=\"dialog\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\n\u003c!-- Background of PhotoSwipe. \n         It's a separate element as animating opacity is faster than rgba(). --\u003e\u003c!-- Slides wrapper with overflow:hidden. --\u003e\n\u003cdiv class=\"pswp__scroll-wrap\"\u003e\n\u003c!-- Container that holds slides. \n            PhotoSwipe keeps only 3 of them in the DOM to save memory.\n            Don't modify these 3 pswp__item elements, data is added later on. --\u003e\n\u003cdiv class=\"pswp__container\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --\u003e\n\u003cdiv class=\"pswp__ui pswp__ui--hidden\"\u003e\n\u003cdiv class=\"pswp__top-bar\"\u003e\n\u003c!--  Controls are self-explanatory. Order can be changed. --\u003e\n\u003cdiv class=\"pswp__counter\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--zoom\" title=\"Zoom in\/out\"\u003e\u003c\/button\u003e \u003c!-- Preloader demo https:\/\/codepen.io\/dimsemenov\/pen\/yyBWoR --\u003e \u003c!-- element will get class pswp__preloader--active when preloader is running --\u003e\n\u003cdiv class=\"pswp__preloader\"\u003e\n\u003cdiv class=\"pswp__preloader__icn\"\u003e\n\u003cdiv class=\"pswp__preloader__cut\"\u003e\n\u003cdiv class=\"pswp__preloader__donut\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"\u003e\n\u003cdiv class=\"pswp__share-tooltip\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"\u003e \u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"\u003e \u003c\/button\u003e\n\u003cdiv class=\"pswp__caption\"\u003e\n\u003cdiv class=\"pswp__caption__center\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\n    \/\/slickスライダー初期化  \n    $(slider).slick({\n        autoplay: true,\n        arrows: false,\n       dots: true,\n        infinite: true \n    });\n\nvar initPhotoSwipeFromDOM = function(gallerySelector) {\n\n    \/\/ parse slide data (url, title, size ...) from DOM elements \n    \/\/ (children of gallerySelector)\n    var parseThumbnailElements = function(el) {\n        var thumbElements = el.childNodes,\n            numNodes = thumbElements.length,\n            items = [],\n            figureEl,\n            linkEl,\n            size,\n            item;\n\n        for(var i = 0; i \u003c numNodes; i++) {\n\n            figureEl = thumbElements[i]; \/\/ \u003cfigure\u003e element\n\n            \/\/ include only element nodes \n            if(figureEl.nodeType !== 1) {\n                continue;\n            }\n\n            linkEl = figureEl.children[0]; \/\/ \u003ca\u003e element\n\n            size = linkEl.getAttribute('data-size').split('x');\n\n            \/\/ create slide object\n            item = {\n                src: linkEl.getAttribute('href'),\n                w: parseInt(size[0], 10),\n                h: parseInt(size[1], 10)\n            };\n\n            if(figureEl.children.length \u003e 1) {\n                \/\/ \u003cfigcaption\u003e content\n                item.title = figureEl.children[1].innerHTML; \n            }\n\n            if(linkEl.children.length \u003e 0) {\n                \/\/ \u003cimg\u003e thumbnail element, retrieving thumbnail url\n                item.msrc = linkEl.children[0].getAttribute('src');\n            } \n\n            item.el = figureEl; \/\/ save link to element for getThumbBoundsFn\n            items.push(item);\n        }\n\n        return items;\n    };\n\n    \/\/ find nearest parent element\n    var closest = function closest(el, fn) {\n        return el \u0026\u0026 ( fn(el) ? el : closest(el.parentNode, fn) );\n    };\n\n    \/\/ triggers when user clicks on thumbnail\n    var onThumbnailsClick = function(e) {\n        e = e || window.event;\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n        var eTarget = e.target || e.srcElement;\n\n        \/\/ find root element of slide\n        var clickedListItem = closest(eTarget, function(el) {\n            return (el.tagName \u0026\u0026 el.tagName.toUpperCase() === 'FIGURE');\n        });\n\n        if(!clickedListItem) {\n            return;\n        }\n\n        \/\/ find index of clicked item by looping through all child nodes\n        \/\/ alternatively, you may define index via data- attribute\n        var clickedGallery = clickedListItem.parentNode,\n            childNodes = clickedListItem.parentNode.childNodes,\n            numChildNodes = childNodes.length,\n            nodeIndex = 0,\n            index;\n\n        for (var i = 0; i \u003c numChildNodes; i++) {\n            if(childNodes[i].nodeType !== 1) { \n                continue; \n            }\n\n            if(childNodes[i] === clickedListItem) {\n                index = nodeIndex;\n                break;\n            }\n            nodeIndex++;\n        }\n\n        if(index \u003e= 0) {\n            \/\/ open PhotoSwipe if valid index found\n            openPhotoSwipe( index, clickedGallery );\n        }\n        return false;\n    };\n\n    \/\/ parse picture index and gallery index from URL (#\u0026pid=1\u0026gid=2)\n    var photoswipeParseHash = function() {\n        var hash = window.location.hash.substring(1),\n        params = {};\n\n        if(hash.length \u003c 5) {\n            return params;\n        }\n\n        var vars = hash.split('\u0026');\n        for (var i = 0; i \u003c vars.length; i++) {\n            if(!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');  \n            if(pair.length \u003c 2) {\n                continue;\n            }           \n            params[pair[0]] = pair[1];\n        }\n\n        if(params.gid) {\n            params.gid = parseInt(params.gid, 10);\n        }\n\n        return params;\n    };\n\n    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n        var pswpElement = document.querySelectorAll('.pswp')[0],\n            gallery,\n            options,\n            items;\n\n        items = parseThumbnailElements(galleryElement);\n\n        \/\/ define options (if needed)\n        options = {\n\n            \/\/ define gallery index (for URL)\n            galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n            getThumbBoundsFn: function(index) {\n                \/\/ See Options -\u003e getThumbBoundsFn section of documentation for more info\n                var thumbnail = items[index].el.getElementsByTagName('img')[0], \/\/ find thumbnail\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                    rect = thumbnail.getBoundingClientRect(); \n\n                return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n            }\n\n        };\n\n        \/\/ PhotoSwipe opened from URL\n        if(fromURL) {\n            if(options.galleryPIDs) {\n                \/\/ parse real index when custom PIDs are used \n                \/\/ http:\/\/photoswipe.com\/documentation\/faq.html#custom-pid-in-url\n                for(var j = 0; j \u003c items.length; j++) {\n                    if(items[j].pid == index) {\n                        options.index = j;\n                        break;\n                    }\n                }\n            } else {\n                \/\/ in URL indexes start from 1\n                options.index = parseInt(index, 10) - 1;\n            }\n        } else {\n            options.index = parseInt(index, 10);\n        }\n\n        \/\/ exit if index not found\n        if( isNaN(options.index) ) {\n            return;\n        }\n\n        if(disableAnimation) {\n            options.showAnimationDuration = 0;\n        }\n\n        \/\/ Pass data to PhotoSwipe and initialize it\n        gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n        gallery.init();\n    };\n\n    \/\/ loop through all gallery elements and bind events\n    var galleryElements = document.querySelectorAll( gallerySelector );\n\n    for(var i = 0, l = galleryElements.length; i \u003c l; i++) {\n        galleryElements[i].setAttribute('data-pswp-uid', i+1);\n        galleryElements[i].onclick = onThumbnailsClick;\n    }\n\n    \/\/ Parse URL and open gallery if it contains #\u0026pid=3\u0026gid=1\n    var hashData = photoswipeParseHash();\n    if(hashData.pid \u0026\u0026 hashData.gid) {\n        openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );\n    }\n};\n\n\/\/ execute above function\ninitPhotoSwipeFromDOM('.my-gallery');\n\u003c\/script\u003e \u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/object-fit-images\/3.2.4\/ofi.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e","brand":"OOJU","offers":[{"title":"1 \/ khaki","offer_id":49279155634369,"sku":"OJ-25SSCU01KH01","price":4400.0,"currency_code":"JPY","in_stock":false},{"title":"2 \/ khaki","offer_id":49279155667137,"sku":"OJ-25SSCU01KH02","price":4400.0,"currency_code":"JPY","in_stock":true},{"title":"3 \/ khaki","offer_id":49279155699905,"sku":"OJ-25SSCU01KH03","price":4400.0,"currency_code":"JPY","in_stock":true},{"title":"4 \/ khaki","offer_id":49279155732673,"sku":"OJ-25SSCU01KH04","price":4400.0,"currency_code":"JPY","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/IMG_8019.jpg?v=1748482182"},{"product_id":"multi-border-dress-コピー","title":"multi border dress_blue","description":"\u003cp\u003e昨シーズン好評だったマルチボーダードレスがアップデートされて登場！\u003cbr\u003eポコポコした表面のパイル調の素材感と、夏らしい爽やかなカラーリングが特徴です。\u003cbr\u003e着心地が良く動きやすいカットソー素材なので、アクティブなガールズにもピッタリの1枚。\u003cbr\u003eフレンチスリーブとウエストのシャーリングで女の子らしさもプラスされています。\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003emodel : May 78cm size1\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003ecolor :  blue , pink\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cimg src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/23c0862577971507dfc71cb2be83d6fa_600x600.png?v=1716360018\" alt=\"\" style=\"margin-bottom: 16px; float: none;\"\u003e\u003cbr\u003e\n\u003ctable width=\"100%\" style=\"width: 100.091%; height: 78.3752px;\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003esize\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e1\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e3\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eA.総丈\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e66\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eB.身幅\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e49\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e54\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e \u003cmeta charset=\"utf-8\"\u003e身長（㎝）\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e95-105\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e110-120\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e125-135\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.rte ul, .rte ol {\n    margin: 0 auto;\n}\n.slick-dots {\n    position: absolute;\n    bottom: 15px;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    text-align: center;\n}\n.slick-dots li {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    cursor: pointer;\n}\n  \n  .slick-dots li button:before {\n    font-family: auto;\n    font-size: 6px;\n    line-height: 20px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 15px;\n    height: 16px;\n    content: '•';\n    text-align: center;\n    opacity: .25;\n    color: black;\n    \n\n}\n  \n.pswp img {\n    max-width: none;\n    object-fit: contain;\n}\n  \n  .pswp__img--placeholder--blank{\n    display: none !important;\n}\n    \n\u003c\/style\u003e\n\u003cdiv class=\"img\"\u003e\n\u003cdiv class=\"slider_wrap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Root element of PhotoSwipe. Must have class pswp. --\u003e\n\u003cdiv class=\"pswp\" role=\"dialog\" aria-hidden=\"true\" tabindex=\"-1\"\u003e\n\u003c!-- Background of PhotoSwipe. \n         It's a separate element as animating opacity is faster than rgba(). --\u003e\u003c!-- Slides wrapper with overflow:hidden. --\u003e\n\u003cdiv class=\"pswp__scroll-wrap\"\u003e\n\u003c!-- Container that holds slides. \n            PhotoSwipe keeps only 3 of them in the DOM to save memory.\n            Don't modify these 3 pswp__item elements, data is added later on. --\u003e\n\u003cdiv class=\"pswp__container\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --\u003e\n\u003cdiv class=\"pswp__ui pswp__ui--hidden\"\u003e\n\u003cdiv class=\"pswp__top-bar\"\u003e\n\u003c!--  Controls are self-explanatory. Order can be changed. --\u003e\n\u003cdiv class=\"pswp__counter\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--close\" title=\"Close (Esc)\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--fs\" title=\"Toggle fullscreen\"\u003e\u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--zoom\" title=\"Zoom in\/out\"\u003e\u003c\/button\u003e \u003c!-- Preloader demo https:\/\/codepen.io\/dimsemenov\/pen\/yyBWoR --\u003e \u003c!-- element will get class pswp__preloader--active when preloader is running --\u003e\n\u003cdiv class=\"pswp__preloader\"\u003e\n\u003cdiv class=\"pswp__preloader__icn\"\u003e\n\u003cdiv class=\"pswp__preloader__cut\"\u003e\n\u003cdiv class=\"pswp__preloader__donut\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"\u003e\n\u003cdiv class=\"pswp__share-tooltip\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton class=\"pswp__button pswp__button--arrow--left\" title=\"Previous (arrow left)\"\u003e \u003c\/button\u003e \u003cbutton class=\"pswp__button pswp__button--arrow--right\" title=\"Next (arrow right)\"\u003e \u003c\/button\u003e\n\u003cdiv class=\"pswp__caption\"\u003e\n\u003cdiv class=\"pswp__caption__center\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\n    \/\/slickスライダー初期化  \n    $(slider).slick({\n        autoplay: true,\n        arrows: false,\n       dots: true,\n        infinite: true \n    });\n\nvar initPhotoSwipeFromDOM = function(gallerySelector) {\n\n    \/\/ parse slide data (url, title, size ...) from DOM elements \n    \/\/ (children of gallerySelector)\n    var parseThumbnailElements = function(el) {\n        var thumbElements = el.childNodes,\n            numNodes = thumbElements.length,\n            items = [],\n            figureEl,\n            linkEl,\n            size,\n            item;\n\n        for(var i = 0; i \u003c numNodes; i++) {\n\n            figureEl = thumbElements[i]; \/\/ \u003cfigure\u003e element\n\n            \/\/ include only element nodes \n            if(figureEl.nodeType !== 1) {\n                continue;\n            }\n\n            linkEl = figureEl.children[0]; \/\/ \u003ca\u003e element\n\n            size = linkEl.getAttribute('data-size').split('x');\n\n            \/\/ create slide object\n            item = {\n                src: linkEl.getAttribute('href'),\n                w: parseInt(size[0], 10),\n                h: parseInt(size[1], 10)\n            };\n\n            if(figureEl.children.length \u003e 1) {\n                \/\/ \u003cfigcaption\u003e content\n                item.title = figureEl.children[1].innerHTML; \n            }\n\n            if(linkEl.children.length \u003e 0) {\n                \/\/ \u003cimg\u003e thumbnail element, retrieving thumbnail url\n                item.msrc = linkEl.children[0].getAttribute('src');\n            } \n\n            item.el = figureEl; \/\/ save link to element for getThumbBoundsFn\n            items.push(item);\n        }\n\n        return items;\n    };\n\n    \/\/ find nearest parent element\n    var closest = function closest(el, fn) {\n        return el \u0026\u0026 ( fn(el) ? el : closest(el.parentNode, fn) );\n    };\n\n    \/\/ triggers when user clicks on thumbnail\n    var onThumbnailsClick = function(e) {\n        e = e || window.event;\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n        var eTarget = e.target || e.srcElement;\n\n        \/\/ find root element of slide\n        var clickedListItem = closest(eTarget, function(el) {\n            return (el.tagName \u0026\u0026 el.tagName.toUpperCase() === 'FIGURE');\n        });\n\n        if(!clickedListItem) {\n            return;\n        }\n\n        \/\/ find index of clicked item by looping through all child nodes\n        \/\/ alternatively, you may define index via data- attribute\n        var clickedGallery = clickedListItem.parentNode,\n            childNodes = clickedListItem.parentNode.childNodes,\n            numChildNodes = childNodes.length,\n            nodeIndex = 0,\n            index;\n\n        for (var i = 0; i \u003c numChildNodes; i++) {\n            if(childNodes[i].nodeType !== 1) { \n                continue; \n            }\n\n            if(childNodes[i] === clickedListItem) {\n                index = nodeIndex;\n                break;\n            }\n            nodeIndex++;\n        }\n\n        if(index \u003e= 0) {\n            \/\/ open PhotoSwipe if valid index found\n            openPhotoSwipe( index, clickedGallery );\n        }\n        return false;\n    };\n\n    \/\/ parse picture index and gallery index from URL (#\u0026pid=1\u0026gid=2)\n    var photoswipeParseHash = function() {\n        var hash = window.location.hash.substring(1),\n        params = {};\n\n        if(hash.length \u003c 5) {\n            return params;\n        }\n\n        var vars = hash.split('\u0026');\n        for (var i = 0; i \u003c vars.length; i++) {\n            if(!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');  \n            if(pair.length \u003c 2) {\n                continue;\n            }           \n            params[pair[0]] = pair[1];\n        }\n\n        if(params.gid) {\n            params.gid = parseInt(params.gid, 10);\n        }\n\n        return params;\n    };\n\n    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n        var pswpElement = document.querySelectorAll('.pswp')[0],\n            gallery,\n            options,\n            items;\n\n        items = parseThumbnailElements(galleryElement);\n\n        \/\/ define options (if needed)\n        options = {\n\n            \/\/ define gallery index (for URL)\n            galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n            getThumbBoundsFn: function(index) {\n                \/\/ See Options -\u003e getThumbBoundsFn section of documentation for more info\n                var thumbnail = items[index].el.getElementsByTagName('img')[0], \/\/ find thumbnail\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                    rect = thumbnail.getBoundingClientRect(); \n\n                return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n            }\n\n        };\n\n        \/\/ PhotoSwipe opened from URL\n        if(fromURL) {\n            if(options.galleryPIDs) {\n                \/\/ parse real index when custom PIDs are used \n                \/\/ http:\/\/photoswipe.com\/documentation\/faq.html#custom-pid-in-url\n                for(var j = 0; j \u003c items.length; j++) {\n                    if(items[j].pid == index) {\n                        options.index = j;\n                        break;\n                    }\n                }\n            } else {\n                \/\/ in URL indexes start from 1\n                options.index = parseInt(index, 10) - 1;\n            }\n        } else {\n            options.index = parseInt(index, 10);\n        }\n\n        \/\/ exit if index not found\n        if( isNaN(options.index) ) {\n            return;\n        }\n\n        if(disableAnimation) {\n            options.showAnimationDuration = 0;\n        }\n\n        \/\/ Pass data to PhotoSwipe and initialize it\n        gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n        gallery.init();\n    };\n\n    \/\/ loop through all gallery elements and bind events\n    var galleryElements = document.querySelectorAll( gallerySelector );\n\n    for(var i = 0, l = galleryElements.length; i \u003c l; i++) {\n        galleryElements[i].setAttribute('data-pswp-uid', i+1);\n        galleryElements[i].onclick = onThumbnailsClick;\n    }\n\n    \/\/ Parse URL and open gallery if it contains #\u0026pid=3\u0026gid=1\n    var hashData = photoswipeParseHash();\n    if(hashData.pid \u0026\u0026 hashData.gid) {\n        openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );\n    }\n};\n\n\/\/ execute above function\ninitPhotoSwipeFromDOM('.my-gallery');\n\u003c\/script\u003e \u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/object-fit-images\/3.2.4\/ofi.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e","brand":"OOJU","offers":[{"title":"1 \/ blue","offer_id":49287286325441,"sku":"OJ-25SSOP03BL01","price":5500.0,"currency_code":"JPY","in_stock":false},{"title":"2 \/ blue","offer_id":49287286358209,"sku":"OJ-25SSOP03BL02","price":5500.0,"currency_code":"JPY","in_stock":true},{"title":"3 \/ blue","offer_id":49287286390977,"sku":"OJ-25SSOP03BL03","price":5500.0,"currency_code":"JPY","in_stock":false},{"title":"4 \/ blue","offer_id":49287286423745,"sku":"OJ-25SSOP03BL04","price":5500.0,"currency_code":"JPY","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/IMG_6975.jpg?v=1748569915"},{"product_id":"new-multi-border-dress_blue-コピー","title":"multi border dress_pink","description":"\u003cp\u003e昨シーズン好評だったマルチボーダードレスがアップデートされて登場！\u003cbr\u003eポコポコした表面のパイル調の素材感と、夏らしい爽やかなカラーリングが特徴です。\u003cbr\u003e着心地が良く動きやすいカットソー素材なので、アクティブなガールズにもピッタリの1枚。\u003cbr\u003eフレンチスリーブとウエストのシャーリングで女の子らしさもプラスされています。\u003cbr\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003emodel : Emma 102cm size2\u003cbr\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003ecolor :  pink , blue\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv style=\"text-align: start;\"\u003e\n\u003cimg style=\"margin-bottom: 16px; float: none;\" alt=\"\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/23c0862577971507dfc71cb2be83d6fa_600x600.png?v=1716360018\"\u003e\u003cbr\u003e\n\u003ctable style=\"width: 100.091%; height: 78.3752px;\" width=\"100%\"\u003e\n\u003ctbody\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003esize\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e1\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e2\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e3\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e4\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eA.総丈\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e48\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e50\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e54\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e66\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003eB.身幅\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e46\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e49\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e52\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e54\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr style=\"height: 19.5938px;\"\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e \u003cmeta charset=\"utf-8\"\u003e身長（㎝）\u003c\/td\u003e\n\u003ctd style=\"width: 19.8165%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e90\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e95-105\u003c\/td\u003e\n\u003ctd style=\"width: 19.4495%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e110-120\u003c\/td\u003e\n\u003ctd style=\"width: 20%; height: 19.5938px;\"\u003e\n\u003cmeta charset=\"utf-8\"\u003e125-135\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cstyle\u003e\n.rte ul, .rte ol {\n    margin: 0 auto;\n}\n.slick-dots {\n    position: absolute;\n    bottom: 15px;\n    display: block;\n    width: 100%;\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    text-align: center;\n}\n.slick-dots li {\n    position: relative;\n    display: inline-block;\n    width: 10px;\n    height: 25px;\n    margin: 0 5px;\n    padding: 0;\n    cursor: pointer;\n}\n  \n  .slick-dots li button:before {\n    font-family: auto;\n    font-size: 6px;\n    line-height: 20px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 15px;\n    height: 16px;\n    content: '•';\n    text-align: center;\n    opacity: .25;\n    color: black;\n    \n\n}\n  \n.pswp img {\n    max-width: none;\n    object-fit: contain;\n}\n  \n  .pswp__img--placeholder--blank{\n    display: none !important;\n}\n    \n\u003c\/style\u003e\n\u003cdiv class=\"img\"\u003e\n\u003cdiv class=\"slider_wrap\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Root element of PhotoSwipe. Must have class pswp. --\u003e\n\u003cdiv aria-hidden=\"true\" role=\"dialog\" class=\"pswp\" tabindex=\"-1\"\u003e\n\u003c!-- Background of PhotoSwipe. \n         It's a separate element as animating opacity is faster than rgba(). --\u003e\u003c!-- Slides wrapper with overflow:hidden. --\u003e\n\u003cdiv class=\"pswp__scroll-wrap\"\u003e\n\u003c!-- Container that holds slides. \n            PhotoSwipe keeps only 3 of them in the DOM to save memory.\n            Don't modify these 3 pswp__item elements, data is added later on. --\u003e\n\u003cdiv class=\"pswp__container\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. --\u003e\n\u003cdiv class=\"pswp__ui pswp__ui--hidden\"\u003e\n\u003cdiv class=\"pswp__top-bar\"\u003e\n\u003c!--  Controls are self-explanatory. Order can be changed. --\u003e\n\u003cdiv class=\"pswp__counter\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cbutton title=\"Close (Esc)\" class=\"pswp__button pswp__button--close\"\u003e\u003c\/button\u003e \u003cbutton title=\"Toggle fullscreen\" class=\"pswp__button pswp__button--fs\"\u003e\u003c\/button\u003e \u003cbutton title=\"Zoom in\/out\" class=\"pswp__button pswp__button--zoom\"\u003e\u003c\/button\u003e \u003c!-- Preloader demo https:\/\/codepen.io\/dimsemenov\/pen\/yyBWoR --\u003e \u003c!-- element will get class pswp__preloader--active when preloader is running --\u003e\n\u003cdiv class=\"pswp__preloader\"\u003e\n\u003cdiv class=\"pswp__preloader__icn\"\u003e\n\u003cdiv class=\"pswp__preloader__cut\"\u003e\n\u003cdiv class=\"pswp__preloader__donut\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"pswp__share-modal pswp__share-modal--hidden pswp__single-tap\"\u003e\n\u003cdiv class=\"pswp__share-tooltip\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cbutton title=\"Previous (arrow left)\" class=\"pswp__button pswp__button--arrow--left\"\u003e \u003c\/button\u003e \u003cbutton title=\"Next (arrow right)\" class=\"pswp__button pswp__button--arrow--right\"\u003e \u003c\/button\u003e\n\u003cdiv class=\"pswp__caption\"\u003e\n\u003cdiv class=\"pswp__caption__center\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cscript\u003e\n\n    \/\/slickスライダー初期化  \n    $(slider).slick({\n        autoplay: true,\n        arrows: false,\n       dots: true,\n        infinite: true \n    });\n\nvar initPhotoSwipeFromDOM = function(gallerySelector) {\n\n    \/\/ parse slide data (url, title, size ...) from DOM elements \n    \/\/ (children of gallerySelector)\n    var parseThumbnailElements = function(el) {\n        var thumbElements = el.childNodes,\n            numNodes = thumbElements.length,\n            items = [],\n            figureEl,\n            linkEl,\n            size,\n            item;\n\n        for(var i = 0; i \u003c numNodes; i++) {\n\n            figureEl = thumbElements[i]; \/\/ \u003cfigure\u003e element\n\n            \/\/ include only element nodes \n            if(figureEl.nodeType !== 1) {\n                continue;\n            }\n\n            linkEl = figureEl.children[0]; \/\/ \u003ca\u003e element\n\n            size = linkEl.getAttribute('data-size').split('x');\n\n            \/\/ create slide object\n            item = {\n                src: linkEl.getAttribute('href'),\n                w: parseInt(size[0], 10),\n                h: parseInt(size[1], 10)\n            };\n\n            if(figureEl.children.length \u003e 1) {\n                \/\/ \u003cfigcaption\u003e content\n                item.title = figureEl.children[1].innerHTML; \n            }\n\n            if(linkEl.children.length \u003e 0) {\n                \/\/ \u003cimg\u003e thumbnail element, retrieving thumbnail url\n                item.msrc = linkEl.children[0].getAttribute('src');\n            } \n\n            item.el = figureEl; \/\/ save link to element for getThumbBoundsFn\n            items.push(item);\n        }\n\n        return items;\n    };\n\n    \/\/ find nearest parent element\n    var closest = function closest(el, fn) {\n        return el \u0026\u0026 ( fn(el) ? el : closest(el.parentNode, fn) );\n    };\n\n    \/\/ triggers when user clicks on thumbnail\n    var onThumbnailsClick = function(e) {\n        e = e || window.event;\n        e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n        var eTarget = e.target || e.srcElement;\n\n        \/\/ find root element of slide\n        var clickedListItem = closest(eTarget, function(el) {\n            return (el.tagName \u0026\u0026 el.tagName.toUpperCase() === 'FIGURE');\n        });\n\n        if(!clickedListItem) {\n            return;\n        }\n\n        \/\/ find index of clicked item by looping through all child nodes\n        \/\/ alternatively, you may define index via data- attribute\n        var clickedGallery = clickedListItem.parentNode,\n            childNodes = clickedListItem.parentNode.childNodes,\n            numChildNodes = childNodes.length,\n            nodeIndex = 0,\n            index;\n\n        for (var i = 0; i \u003c numChildNodes; i++) {\n            if(childNodes[i].nodeType !== 1) { \n                continue; \n            }\n\n            if(childNodes[i] === clickedListItem) {\n                index = nodeIndex;\n                break;\n            }\n            nodeIndex++;\n        }\n\n        if(index \u003e= 0) {\n            \/\/ open PhotoSwipe if valid index found\n            openPhotoSwipe( index, clickedGallery );\n        }\n        return false;\n    };\n\n    \/\/ parse picture index and gallery index from URL (#\u0026pid=1\u0026gid=2)\n    var photoswipeParseHash = function() {\n        var hash = window.location.hash.substring(1),\n        params = {};\n\n        if(hash.length \u003c 5) {\n            return params;\n        }\n\n        var vars = hash.split('\u0026');\n        for (var i = 0; i \u003c vars.length; i++) {\n            if(!vars[i]) {\n                continue;\n            }\n            var pair = vars[i].split('=');  \n            if(pair.length \u003c 2) {\n                continue;\n            }           \n            params[pair[0]] = pair[1];\n        }\n\n        if(params.gid) {\n            params.gid = parseInt(params.gid, 10);\n        }\n\n        return params;\n    };\n\n    var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n        var pswpElement = document.querySelectorAll('.pswp')[0],\n            gallery,\n            options,\n            items;\n\n        items = parseThumbnailElements(galleryElement);\n\n        \/\/ define options (if needed)\n        options = {\n\n            \/\/ define gallery index (for URL)\n            galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n            getThumbBoundsFn: function(index) {\n                \/\/ See Options -\u003e getThumbBoundsFn section of documentation for more info\n                var thumbnail = items[index].el.getElementsByTagName('img')[0], \/\/ find thumbnail\n                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                    rect = thumbnail.getBoundingClientRect(); \n\n                return {x:rect.left, y:rect.top + pageYScroll, w:rect.width};\n            }\n\n        };\n\n        \/\/ PhotoSwipe opened from URL\n        if(fromURL) {\n            if(options.galleryPIDs) {\n                \/\/ parse real index when custom PIDs are used \n                \/\/ http:\/\/photoswipe.com\/documentation\/faq.html#custom-pid-in-url\n                for(var j = 0; j \u003c items.length; j++) {\n                    if(items[j].pid == index) {\n                        options.index = j;\n                        break;\n                    }\n                }\n            } else {\n                \/\/ in URL indexes start from 1\n                options.index = parseInt(index, 10) - 1;\n            }\n        } else {\n            options.index = parseInt(index, 10);\n        }\n\n        \/\/ exit if index not found\n        if( isNaN(options.index) ) {\n            return;\n        }\n\n        if(disableAnimation) {\n            options.showAnimationDuration = 0;\n        }\n\n        \/\/ Pass data to PhotoSwipe and initialize it\n        gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);\n        gallery.init();\n    };\n\n    \/\/ loop through all gallery elements and bind events\n    var galleryElements = document.querySelectorAll( gallerySelector );\n\n    for(var i = 0, l = galleryElements.length; i \u003c l; i++) {\n        galleryElements[i].setAttribute('data-pswp-uid', i+1);\n        galleryElements[i].onclick = onThumbnailsClick;\n    }\n\n    \/\/ Parse URL and open gallery if it contains #\u0026pid=3\u0026gid=1\n    var hashData = photoswipeParseHash();\n    if(hashData.pid \u0026\u0026 hashData.gid) {\n        openPhotoSwipe( hashData.pid ,  galleryElements[ hashData.gid - 1 ], true, true );\n    }\n};\n\n\/\/ execute above function\ninitPhotoSwipeFromDOM('.my-gallery');\n\u003c\/script\u003e \u003cscript src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/object-fit-images\/3.2.4\/ofi.js\"\u003e\u003c\/script\u003e\n\u003c\/div\u003e","brand":"OOJU","offers":[{"title":"1 \/ pink","offer_id":49287308443841,"sku":"OJ-25SSOP03PK01","price":5500.0,"currency_code":"JPY","in_stock":true},{"title":"2 \/ pink","offer_id":49287308476609,"sku":"OJ-25SSOP03PK02","price":5500.0,"currency_code":"JPY","in_stock":false},{"title":"3 \/ pink","offer_id":49287308509377,"sku":"OJ-25SSOP03PK03","price":5500.0,"currency_code":"JPY","in_stock":false},{"title":"4 \/ pink","offer_id":49287308542145,"sku":"OJ-25SSOP03PK04","price":5500.0,"currency_code":"JPY","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0611\/6691\/1681\/files\/IMG_6980.jpg?v=1748569854"}],"url":"https:\/\/ooju.jp\/zh\/collections\/multi-border.oembed","provider":"OOJU","version":"1.0","type":"link"}