PageSourceSearch

https://saintpain.co.kr/product/recent_view_product.html

html saintpain.co.kr collected 2026-10-08 23:36:24 UTC 205,594 bytes, 8,308 lines download raw bytes

1<!DOCTYPE html>
2<html lang="ko">
3
4
5
6<head>
6<script>(function(i, s, o, g, r) {
7    var a = s.createElement(o);
8    var m = s.getElementsByTagName(o)[0];
9    a.async = true;
10    a.src = g;
11    a.onload = function() {
12        if (i[r].init) {
13            i[r].init('https://js-error-tracer-api.cafe24.com', 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ1bHRyYWRvYzEuY2FmZTI0LmNvbSIsImF1ZCI6ImpzLWVycm9yLXRyYWNlci1hcGkuY2FmZTI0LmNvbSIsIm1hbGxfaWQiOiJ1bHRyYWRvYzEiLCJzaG9wX25vIjoxLCJwYXRoX3JvbGUiOiJQUk9EVUNUX1JFQ0VOVCIsImxhbmd1YWdlX2NvZGUiOiJrb19LUiIsImNvdW50cnlfY29kZSI6IktSIiwiaXNfeXRzIjpmYWxzZSwiaXNfY29udGFpbmVyIjpmYWxzZSwid29ya3NwYWNlIjoicHJvZHVjdGlvbiJ9.D216Qw2WeJWslfn-oM_DhWtuq5IKBLFKK3AeCPJy5Kg', {"errors":{"path":"\/api\/v1\/store","collectWindowErrors":true,"preventDuplicateReports":true,"storageKeyPrefix":"EC_JET.PRODUCT_RECENT","samplingEnabled":true,"samplingRate":0.5},"vitals":{"path":"\/api\/v1\/vitals","samplingEnabled":true,"samplingRate":0.3},"resources":{"path":"\/api\/v1\/resources","samplingEnabled":true,"samplingRate":0.5,"durationThreshold":3000}});
14        }
15    };
16    m.parentNode.insertBefore(a, m);
17}(window, document, 'script', '//assets.poxo.com/jet/jet.js', 'EC_JET'));</script>
vendor: 1 bytes, line 17
17
18<script type="text/javascript">window.CAFE24 = window.CAFE24 || {};CAFE24.ROUTE = {"is_mobile":false,"is_need_route":false,"language_code":"ZZ","path":{"origin":"\/product\/recent_view_product.html","result":"\/product\/recent_view_product.html","prefix":""},"shop_no":0,"skin_code":"default","support_language_list":{"ar":"ar_EG","ar-EG":"ar_EG","de":"de_DE","de-DE":"de_DE","en":"en_US","en-IN":"en_IN","en-PH":"en_PH","en-US":"en_US","es":"es_ES","es-ES":"es_ES","hi":"hi_IN","hi-IN":"hi_IN","id":"id_ID","id-ID":"id_ID","it":"it_IT","it-IT":"it_IT","ja":"ja_JP","ja-JP":"ja_JP","ko":"ko_KR","ko-KR":"ko_KR","ms":"ms_MY","ms-MY":"ms_MY","pt":"pt_PT","pt-PT":"pt_PT","ru":"ru_RU","ru-RU":"ru_RU","th":"th_TH","th-TH":"th_TH","tr":"tr_TR","tr-TR":"tr_TR","vi":"vi_VN","vi-VN":"vi_VN","zh":"zh_CN","zh-CN":"zh_CN","zh-HK":"zh_HK","zh-MO":"zh_MO","zh-SG":"zh_SG","zh-TW":"zh_TW"}};</script>
18<script type="text/javascript">if (typeof EC_ROUTE === "undefined") {
19    /**
20     * 프론트용 라우트 플러그인
21     * @type {{bInit: boolean, init: EC_ROUTE.init}}
22     * CAFE24.ROUTE 참조
23     */
24    var EC_ROUTE = {
25        EC_DOMAIN_PATH_INFO: 'EC_DOMAIN_PATH_INFO',
26        bInit: false,
27        aFromList: [],
28        aToList: [],
29        aCleanFilter: null,
30        init: function () {
31            if (this.bInit || typeof CAFE24.ROUTE === 'undefined') {
32                return;
33            }
34            this.bInit = true;
35            this.aCleanFilter = [
36                /^shop[1-9][0-9]*$/,
37                /^(m|p)$/,
38                new RegExp('^(' + Object.keys(CAFE24.ROUTE.support_language_list).join('|')  + ')$'),
39                /^skin-(base|skin[1-9][0-9]*|mobile[0-9]*)$/,
40            ];
41        },
42        isNeedRoute: function ()
43        {
44            return CAFE24.ROUTE.is_need_route;
45        },
46        /**
47         *
48         * @param iShopNo
49         * @param bMobile
50         * @param sFrontLanguage
51         * @param sSkinCode
52         * @returns {*|string}
53         */
54        getUrlDomain: function (iShopNo, bMobile, sFrontLanguage, sSkinCode)
55        {
56            var oRouteConfig = {};
57            if (typeof iShopNo == 'undefined') {
58                oRouteConfig.shop_no = CAFE24.SDE_SHOP_NUM;
59            } else {
60                oRouteConfig.shop_no = iShopNo;
61            }
62            if (typeof bMobile == 'undefined') {
63                oRouteConfig.is_mobile = false;
64            } else {
65                oRouteConfig.is_mobile = bMobile;
66            }
67            if (typeof sFrontLanguage == 'undefined') {
68                oRouteConfig.language_code = '';
69            }else {
70                oRouteConfig.language_code = sFrontLanguage; // 내부에서 로직으로 동작할땐 언어_지역 형태의 로케일 형태를 따른다.
71            }
72            if (typeof sSkinCode == 'undefined') {
73                oRouteConfig.skin_code = '';
74            }else {
75                oRouteConfig.skin_code = sSkinCode;
76            }
77
78            var sDomain = '';
79            if (oRouteConfig.shop_no != CAFE24.SDE_SHOP_NUM) {
80                // 접근된 다른 멀티샵 도메인 정보는 primary domain 를 조회해야함으로 ajax 를 통해 정보를 얻는다.
81                sDomain = this._getUrlDomainMultishop(oRouteConfig);
82            } else {
83                // 샵이 동일할 경우에는 접근된 domain 에 path 정보만 정리하여 반환함.
84                sDomain = this._getUrlDomain(oRouteConfig);
85            }
86            return sDomain;
87        },
88        _getUrlDomainMultishop: function (oRouteConfig)
89        {
90            var sDomain = '';
91            EC$.ajax({
92                type: 'GET',
93                url: '/exec/front/Shop/Domain',
94                data: {
95                    '_shop_no' : oRouteConfig.shop_no,
96                    'is_mobile' : oRouteConfig.is_mobile,
97                    'language_code' : oRouteConfig.language_code,
98                    'skin_code' : oRouteConfig.skin_code,
99                },
100                async: false,
101                dataType: 'json',
102                cache: true,
103                success: function(oResult) {
104                    switch (oResult.code) {
105                        case '0000' :
106                            sDomain = oResult.data;
107                            break;
108                        default :
109                            break;
110                    }
111                    return false;
112                }
113            });
114            return sDomain;
115        },
116        _getUrlDomain: function (oRouteConfig)
117        {
118            oRouteConfig.domain = this._getCreateHost(oRouteConfig);
119            return location.protocol + '//' + oRouteConfig.domain + this._getCreateUri(oRouteConfig);
120        },
121        _getCreateHost : function (oRouteConfig)
122        {
123            var sHost = location.host;
124            var aHost = sHost.split('.');
125            if (this.isBaseDomain(sHost)) {
126                if (aHost.length > 3) {
127                    aHost[0] = '';
128                }
129            } else if (oRouteConfig.is_mobile) {
130                if (this.isMobileDomain()) {
131                    oRouteConfig.is_mobile = false;
132                }
133            }
134            return aHost.filter(Boolean).join('.');
135        },
136        _getCreateUri: function (oRouteInfo)
137        {
138            var aUrl = [];
139            if (this.isBaseDomain() && oRouteInfo.shop_no > 1) {
140                aUrl.push('shop' + oRouteInfo.shop_no);
141            }
142            if (oRouteInfo.is_mobile) {
143                aUrl.push('m');
144            }
145            if (oRouteInfo.language_code != 'ZZ' && oRouteInfo.language_code != '') {
146                var iIndex = Object.values(CAFE24.ROUTE.support_language_list).indexOf(oRouteInfo.language_code);
147                if (iIndex !== -1) {
148                    aUrl.push(Object.keys(CAFE24.ROUTE.support_language_list)[iIndex]);
149                }
150            }
151            if (this.isBaseDomain() && oRouteInfo.skin_code != 'default' && oRouteInfo.skin_code != '') {
152                aUrl.push('skin-' + oRouteInfo.skin_code);
153            }
154            var sUrl= '/';
155            if (aUrl.length > 0) {
156                sUrl= '/' + aUrl.join('/');
157                sUrl = this.rtrim(sUrl, '/');
158            }
159            return sUrl;
160        },
161        /**
162         * en, en-US => en_US
163         */
164        convertValidLanguageCode: function (sUrlLanguageCode)
165        {
166            if (typeof CAFE24.ROUTE.support_language_list[sUrlLanguageCode] != 'undefined') {
167                return CAFE24.ROUTE.support_language_list[sUrlLanguageCode];
168            }
169            return false;
170        },
171        isMobileDomain: function (sHost)
172        {
173            if (typeof sHost == 'undefined') {
174                sHost = location.host;
175            }
176            var aMatched = sHost.match(/^(m|mobile|skin\-mobile|skin\-mobile[0-9]+[\-]{2}shop[0-9]+|skin\-mobile[0-9]+|mobile[\-]{2}shop[0-9]+)\./i);
177            return aMatched != null;
178        },
179        isBaseDomain: function (sHost)
180        {
181            if (typeof sHost == 'undefined') {
182                sHost = location.host;
183            }
184            return sHost.indexOf(CAFE24.GLOBAL_INFO.getRootDomain()) !== -1;
185        },
186        removePrefixUrl: function (sUrl)
187        {
188            if (this.isNeedRoute()) {
189                sUrl = sUrl.replace(this.getPrefixUrl('/'), '/'); // 자동으로  prefix 붙은 영역을 제거해준다.
190            }
191            return sUrl;
192        },
193        getPrefixUrl: function (sUrl)
194        {
195            if (this.isNeedRoute() === false) {
196                return sUrl;
197            }
198            if (sUrl.indexOf('/') !== 0) {
199                return sUrl;
200            }
201            if (sUrl.match(/^\/{2,}/) !== null) {
202                return sUrl;
203            }
204
205            var iCachedPosition = this.aFromList.indexOf(sUrl);
206            if (iCachedPosition > -1) {
207                return this.aToList[iCachedPosition];
208            }
209
210            var bTailSlash = (sCleanUrl !== '/' && sUrl.substr(-1) === '/');
211            var sCleanUrl = this.getCleanUrl(sUrl);
212            var aPrefixPart = CAFE24.ROUTE.path.prefix.split('/');
213            var aUrlPart = sCleanUrl.split('/');
214            var bMatched = true;
215            var sReturnUrl = sCleanUrl;
216            if (aUrlPart.length < aPrefixPart.length) {
217                bMatched = false;
218            } else {
219                for (var i = 0; i < aPrefixPart.length ; i++) {
220                    if (aPrefixPart[i] != aUrlPart[i]) {
221                        bMatched = false;
222                        break;
223                    }
224                }
225            }
226            if (bMatched === false) {
227                if (sCleanUrl == '/') {
228                    sReturnUrl = CAFE24.ROUTE.path.prefix;
229                } else {
230                    sReturnUrl = CAFE24.ROUTE.path.prefix +  sCleanUrl;
231                }
232                sReturnUrl = bTailSlash ? sReturnUrl : this.rtrim(sReturnUrl, '/')
233                this.aFromList.push(sUrl);
234                this.aToList.push(sReturnUrl);
235            }
236            return sReturnUrl;
237        },
238        /**
239         * document.location.pathname 이 필요할 경우 사용한다.
240         * @returns {*}
241         */
242        getPathName: function()
243        {
244            if (typeof CAFE24.ROUTE.path.result == 'undefined') {
245                return document.location.pathname;
246            }
247            return CAFE24.ROUTE.path.result;
248        },
249        rtrim: function (str, chr)
250        {
251            var rgxtrim = (!chr) ? new RegExp('\\s+$') : new RegExp(chr+'+$');
252            return str.replace(rgxtrim, '');
253        },
254        getShopNo: function ()
255        {
256            return CAFE24.ROUTE.shop_no;
257        },
258        getSkinCode: function ()
259        {
260            return CAFE24.ROUTE.skin_code;
261        },
262        getLanguageCode: function ()
263        {
264            return CAFE24.ROUTE.language_code;
265        },
266        getMobile: function ()
267        {
268            return CAFE24.ROUTE.is_mobile;
269        },
270        getIsMobile: function ()
271        {
272            return CAFE24.ROUTE.is_mobile || CAFE24.ROUTE.skin_code.match(/^mobile[0-9]*$/);
273        },
274        getCleanUrl: function (sUrl)
275        {
276            if (sUrl === '/') {
277                return sUrl;
278            }
279
280            var aUrl = sUrl.split('/');
281            aUrl.shift();
282
283            if (aUrl.length < 1) {
284                return sUrl;
285            }
286
287            // 현재 4 depth 까지 미리보기 기능이 구현되어있음
288            var iPos = 0;
289            var bFind = false;
290            for (var i = 0; i < aUrl.length ; i++) {
291                bFind = false;
292                for (var iSub = iPos, iSubCount = this.aCleanFilter.length; iSub < iSubCount ; iSub++) {
293                    if (aUrl[i].match(this.aCleanFilter[iSub]) !== null) {
294                        bFind = true;
295                        iPos = iSub + 1;
296                        aUrl.splice(i, 1);
297                        i--; // aUrl 을 삭제해 주었으니 검색 조건을 -1 제거하여 초기화 한다. 다음 for i++ 로 증감 조회됨.
298                        break;
299                    }
300                }
301                if (bFind === false) {
302                    break;
303                }
304            }
305            return '/' + aUrl.join('/');
306        },
307        getIsEasyUrl : function ()
308        {
309            return !window.location.pathname.match(/^[\w\/\-\.]+(php|html|htm)$/i);
310        }
311    };
312    EC_ROUTE.init();
313}
314</script>
314
315<meta name="path_role" content="PRODUCT_RECENT" />
316<meta name="author" content="Saintpain" />
317<meta name="description" content="SAINTPAIN. The official online store of SAINTPAIN. 세인트페인 공식 온라인 스토어." />
318<meta name="keywords" content="OUTER, TOP, BOTTOM, EYEWEAR, ACCESSORY, SALE, SAINTPAIN" /><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
319
320    <meta http-equiv="X-UA-Compatible" content="IE=edge">
321    <meta name="format-detection" content="telephone=no"/>    
322    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=1.0, user-scalable=yes"/>
323    <!-- PG 크로스브라우징 필수 -->
324    <meta http-equiv="Cache-Control" content="no-cache">
325    <meta http-equiv="Expires" content="0">
326    <meta http-equiv="Pragma" content="no-cache">
327
328    
329
330    <!-- =====================================================
331         SAINTPAIN WEB FONTS
332
333         ENGLISH : ADOBE HELVETICA NEUE WORLD
334         KOREAN  : PRETENDARD
335    ====================================================== -->
336
337    <link rel="stylesheet" href="https://use.typekit.net/fcy5mqq.css">
338
339    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/[email protected]/dist/web/static/pretendard-dynamic-subset.min.css">
340
341
342    <!-- =====================================================
343         CAFE24 BASE CSS
344    ====================================================== -->
345
346    
347    
348    
349    
350    
351    
352    
353    
354    
355    
356    
357    
358    
359    
360
361
362    <!-- Cafe24 기본 테마 폰트
363         테마 시스템 호환 때문에 유지.
364         실제 SAINTPAIN 화면 폰트는 아래 GLOBAL FONT가 우선 적용됨.
365    -->
366
367    <link rel="preconnect" href="https://fonts.googleapis.com">
368    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
369
370    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&amp;
370family=Poppins:wght@300;400;500;700&amp;display=swap" rel="stylesheet">
371
372    <link href="https://fonts.googleapis.com/css2?family=Nanum+Gothic:wght@400;700;800&amp;display=swap" rel="stylesheet">
373
374    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&amp;display=swap" rel="stylesheet">
375
376
377    <!-- =====================================================
378         CAFE24 JS / CSS
379    ====================================================== -->
380
381    
382
383    
384    
385    
386
387    
388    
389    
390
391    
391<script>
392        try {
393            window.EZST = {
394                q: [],
395                register: function (a, b) {
396                    this.push([
397                        a,
398                        (b.init || b)(),
399                        arguments
400                    ]);
401                }
402            };
403        } catch (e) {}
404    </script>
404
405
406    <!--ez-favicon[-->
407    <!--ez-favicon]-->
408
409    
410
411
412    <!-- =====================================================
413         CAFE24 THEME DATA
414    ====================================================== -->
415
416    
416<script type="text/ez-prop">
417        <ez-prop data-version="1.0.0">
418
419            <ez-var
420                data-prop="theme"
421                data-namespace="ez.layout.theme"
422                data-type="array"
423            >
424
425                <ez-item
426                    data-id="theme01"
427                    data-name="SIMPLE"
428                    data-desc="깔끔하고 심플한 스타일"
429                    data-font="Noto Sans KR"
430                    data-background-color="#000000"
431                    override-value="html"
432                    data-font-css="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&family=Poppins:wght@300;400;500;700&display=swap"
433                >
434                    깔끔하고 심플한 스타일
435
436                    <style>
437                        .theme-box.type1 .desc {
438                            color:#fff;
439                            font-weight:400;
440                        }
441
442                        .theme-box .word {
443                            color:#fff;
444                        }
445                    </style>
446                </ez-item>
447
448
449                <ez-item
450                    data-id="theme02"
451                    data-name="SIMPLE2"
452                    data-desc="깔끔하고 심플한 스타일"
453                    data-font="Nanum Gothic"
454                    data-background-color="#000000"
455                    data-font-css="https://fonts.googleapis.com/css2?family=Nanum+Gothic:wght@400;700;800&family=Poppins:wght@300;400;500;700&display=swap"
456                ></ez-item>
457
458
459                <ez-item
460                    data-id="theme03"
461                    data-name="DELICATE"
462                    data-desc="은은하고 차분한 스타일"
463                    data-font="Noto Sans KR"
464                    data-background-color="#7083ae"
465                    data-font-css="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&family=Poppins:wght@300;400;500;700&display=swap"
466                ></ez-item>
467
468
469                <ez-item
470                    data-id="theme04"
471                    data-name="LUXURY"
472                    data-desc="우아하고 럭셔리한 스타일"
473                    data-font="Noto Sans KR"
474                    data-background-color="#7b4747"
475                    data-font-css="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&family=Roboto:wght@300;400;500;700&display=swap"
476                ></ez-item>
477
478            </ez-var>
479
480        </ez-prop>
481    </script>
481
482
483
484    <style>
485    /* =========================================================
486       SAINTPAIN GLOBAL FONT
487
488       ENGLISH
489       Adobe Fonts
490       "helvetica-neue-world"
491
492       KOREAN
493       Pretendard
494
495       일반 텍스트 : 300
496       제목/강조    : 400
497    ========================================================= */
498
499
500    html,
501    body {
502        font-family:
503            "helvetica-neue-world",
504            Pretendard,
505            "Apple SD Gothic Neo",
506            Arial,
507            sans-serif;
508
509        font-weight:300;
510
511        font-synthesis:none;
512    }
513
514
515    /*
516     * #wrap을 포함하여 지정하는 이유:
517     *
518     * 상세페이지 / 게시판 / 상품목록 등에 남아 있는
519     * 기존 Helvetica, Poppins, Noto Sans 선언보다
520     * SAINTPAIN 공통 폰트를 우선 적용하기 위함.
521     */
522
523    html body #wrap a,
524    html body #wrap p,
525    html body #wrap span,
526    html body #wrap div,
527    html body #wrap li,
528    html body #wrap td,
529    html body #wrap th,
530    html body #wrap label,
531    html body #wrap em,
532    html body #wrap caption,
533    html body #wrap button,
534    html body #wrap input,
535    html body #wrap select,
536    html body #wrap textarea {
537        font-family:
538            "helvetica-neue-world",
539            Pretendard,
540            "Apple SD Gothic Neo",
541            Arial,
542            sans-serif !important;
543
544        font-weight:300 !important;
545
546        font-synthesis:none !important;
547    }
548
549
550    /*
551     * 제목 / 중요한 텍스트
552     *
553     * 너무 굵은 500~700 대신
554     * 400까지만 사용.
555     */
556
557    html body #wrap h1,
558    html body #wrap h2,
559    html body #wrap h3,
560    html body #wrap h4,
561    html body #wrap h5,
562    html body #wrap h6,
563    html body #wrap strong,
564    html body #wrap b {
565        font-family:
566            "helvetica-neue-world",
567            Pretendard,
568            "Apple SD Gothic Neo",
569            Arial,
570            sans-serif !important;
571
572        font-weight:400 !important;
573
574        font-synthesis:none !important;
575    }
576
577
578    /*
579     * Form UI
580     */
581
582    html body button,
583    html body input,
584    html body select,
585    html body textarea {
586        font-family:
587            "helvetica-neue-world",
588            Pretendard,
589            "Apple SD Gothic Neo",
590            Arial,
591            sans-serif !important;
592
593        font-weight:300 !important;
594
595        font-synthesis:none !important;
596    }
597
598
599    /* =========================================================
600       SAINTPAIN Q&A AUTHOR PRIVACY
601    ========================================================= */
602
603    .sp-qna-privacy-writer {
604        color:#000 !important;
605    }
606
607    .sp-qna-privacy-admin {
608        text-transform:uppercase !important;
609        font-weight:400 !important;
610    }
611
612
613    /* =========================================================
614       SAINTPAIN GLOBAL PAGE TRANSITION
615    ========================================================= */
616
617    #spPageTransition {
618        position:fixed;
619
620        top:0;
621        right:0;
622        bottom:0;
623        left:0;
624
625        z-index:999999;
626
627        background:#fff;
628
629        opacity:1;
630
631        pointer-events:none;
632
633        transition:
634            opacity .34s cubic-bezier(.22,.61,.36,1);
635
636        will-change:opacity;
637    }
638
639
640    html.sp-page-loaded #spPageTransition {
641        opacity:0;
642    }
643
644
645    html.sp-page-leaving #spPageTransition {
646        opacity:1;
647    }
648
649
650    @media (prefers-reduced-motion: reduce) {
651
652        #spPageTransition {
653            transition-duration:.01ms;
654        }
655
656    }
657    </style>
658
659<link rel="icon" href="/path/to/favicon.ico">
660<link rel="canonical" href="https://saintpain.co.kr/product/recent_view_product.html" />
661<meta property="og:url" content="https://saintpain.co.kr/product/recent_view_product.html" />
662<meta property="og:site_name" content="세인트페인 saintpain" />
663<meta property="og:type" content="website" />
664<meta property="og:image" content="https://saintpain.co.kr/web/upload/share-image-1-2047bb9d9a51221480ec03eb5d8dd2f2.png" />
665<meta name="google-site-verification" content="_9Ek_Q6TStB07LCecb79NTauJfFR7PC7aHUzGKBY3zI" />
666<link rel="shortcut icon" href="/web/upload/favicon-1a69594173891f34dd534159f0bafef5.ico" />
667<script type="text/javascript" src="//wcs.naver.net/wcslog.js"></script>
vendor: 1 bytes, line 667
667
668<script type="text/javascript">var CAFE24API = { instance: [], MALL_ID: 'ultradoc1', SHOP_NO: 1, basicAuthKeys: {}, setBasicAuthKey: function (clientId, basicAuthKey) { if (typeof basicAuthKey !== 'string') { return; } if (clientId) { CAFE24API.basicAuthKeys[clientId] = basicAuthKey; } else { CAFE24API.basicAuthKeys['default'] = basicAuthKey; } }, init: function (appInfo) { if (typeof appInfo == 'object') { if (appInfo.hasOwnProperty('client_id')) { var appKey = appInfo.client_id; } } else { var appKey = appInfo; } if (appKey) { if (!this.instance[appKey]) { CAFE24API.clientId = appKey; if (appInfo.hasOwnProperty('version')) { CAFE24API.version = appInfo.version; } else { if (CAFE24API.hasOwnProperty('version')) { delete CAFE24API.version; } } var copyObject = CAFE24API.constructor(); for (var attr in CAFE24API) { if (CAFE24API.hasOwnProperty(attr)) { copyObject[attr] = CAFE24API[attr]; } } this.instance[appKey] = copyObject; } return this.instance[appKey]; } }, initializeXhr: function () { try { return new XMLHttpRequest(); } catch (error) { return new window.ActiveXObject('Microsoft.XMLHTTP'); } }, fullPath: function (url) { return 'https://ultradoc1.cafe24api.com' + url; }, getLoginProvider: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'login': CAPP_ASYNC_METHODS.AppCommon.getLoginProvider() }); }, getCustomerProvider: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'login': CAPP_ASYNC_METHODS.AppCommon.getCustomerProvider() }); }, getMemberID: function (callback) { if (!CAPP_ASYNC_METHODS.IS_LOGIN) { callback(null); } else { callback(CAPP_ASYNC_METHODS.AppCommon.getMemberID()); } }, getEncryptedMemberId: function (client_id, callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, CAPP_ASYNC_METHODS.AppCommon.getEncryptedMemberId(client_id)); }, getMemberInfo: function (callback) { callback({ 'id': CAPP_ASYNC_METHODS.AppCommon.getMemberInfo() }); }, getCustomerIDInfo: function (callback) { if (!CAFE24API.__scopeErr(callback, 'application')) { return; } callback(null, { 'id': CAPP_ASYNC_METHODS.AppCommon.getCustomerIDInfo() }); }, getCustomerInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'customer': CAPP_ASYNC_METHODS.AppCommon.getCustomerInfo() }); }, getDefaultShippingAddress: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'shipping_address': CAPP_ASYNC_METHODS.AppCommon.getDefaultShippingAddress() }); }, getMileageInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'mileage': CAPP_ASYNC_METHODS.AppCommon.getMileageInfo() }); }, getPointInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'point': CAPP_ASYNC_METHODS.AppCommon.getPointInfo() }); }, getDepositInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'deposit': CAPP_ASYNC_METHODS.AppCommon.getDepositInfo() }); }, getCreditInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'customer')) { return; } callback(null, { 'credit': CAPP_ASYNC_METHODS.AppCommon.getCreditInfo() }); }, getCartList: function (callback) { if (!CAFE24API.__scopeErr(callback, 'personal')) { return; } CAPP_ASYNC_METHODS.AppCommon.getCartList().then(function (data) { callback(null, { 'carts': data }); }); }, getCartInfo: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'personal')) { return; } callback(null, { 'cart': CAPP_ASYNC_METHODS.AppCommon.getCartInfo() }); }, getCartItemList: function (callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } callback(null, { 'items': CAPP_ASYNC_METHODS.AppCommon.getCartItemList() }); }, getCartCount: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'personal')) { return; } callback(null, CAPP_ASYNC_METHODS.AppCommon.getCartCount()); }, getCouponCount: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'promotion')) { return; } callback(null, CAPP_ASYNC_METHODS.AppCommon.getCouponCount()); }, getWishCount: function (callback) { if (!CAFE24API.__chkValidSessionScope(callback, 'personal')) { return; } callback(null, CAPP_ASYNC_METHODS.AppCommon.getWishCount()); }, getShopInfo: function (callback) { if (!CAFE24API.__scopeErr(callback, 'store')) { return; } callback(null, { 'shop': CAPP_ASYNC_METHODS.AppCommon.getShopInfo() }); }, addCurrentProductToCart: function (mall_id, time, app_key, member_id, hmac, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.addCurrentProductToCart(mall_id, time, app_key, member_id, hmac).then(function (data) { callback(null, { 'cart': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error('422'), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, precreateOrder: function (mall_id, time, app_key, member_id, hmac, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.precreateOrder(mall_id, time, app_key, member_id, hmac).then(function (data) { callback(null, { 'order': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error('422'), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, calculatePayment: function (mall_id, request_time, app_key, member_id, request_data_json, hmac, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.calculatePayment(mall_id, request_time, app_key, member_id, request_data_json, hmac).then(function (data) { callback(null, { 'expected_payment': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error('422'), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, precreateOrderV2: function (mall_id, time, app_key, member_id, request_data_json, hmac, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.precreateOrderV2(mall_id, time, app_key, member_id, request_data_json, hmac).then(function (data) { callback(null, { 'order': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error('422'), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, getOrderItemList: function (start_date, end_date, order_status, page, count, order_id, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.getOrderItemList(start_date, end_date, order_status, page, count, order_id).then(function (data) { callback(null, { 'items': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, getOrderDetailInfo: function (shop_no, order_id, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.getOrderDetailInfo(shop_no, order_id).then(function (data) { callback(null, { 'orders': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, getClaimableItemList: function (order_id, customer_service_type, callback) { if (!CAFE24API.__scopeErr(callback, 'order')) { return; } CAPP_ASYNC_METHODS.AppCommon.getClaimableItemList(order_id, customer_service_type).then(function (data) { callback(null, { 'items': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, emptyCart: function (basket_shipping_type, callback) { if (!CAFE24API.__scopeErr(callback, 'personal')) { return; } CAPP_ASYNC_METHODS.AppCommon.emptyCart(basket_shipping_type).then(function (data) { callback(null, { 'result': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }
668, deleteCartItems: function (basket_shipping_type, product_list, callback) { if (!CAFE24API.__scopeErr(callback, 'personal')) { return; } CAPP_ASYNC_METHODS.AppCommon.deleteCartItems(basket_shipping_type, product_list).then(function (data) { callback(null, { 'result': data }); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }); }, addCart: function (basket_type, prepaid_shipping_fee, product_list, callback) { if (!CAFE24API.__scopeErr(callback, 'personal')) { return; } CAPP_ASYNC_METHODS.AppCommon.addCart(basket_type, prepaid_shipping_fee, product_list).then(function (data) { callback(null, data); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }) }, addBundleProductsCart: function (basket_type, prepaid_shipping_fee, product_list, callback) { if (!CAFE24API.__scopeErr(callback, 'personal')) { return; } CAPP_ASYNC_METHODS.AppCommon.addBundleProductsCart(basket_type, prepaid_shipping_fee, product_list).then(function (data) { callback(null, data); }).catch(function (data) { if (data) { callback(new Error('422'), { 'error': { code: data.code, message: data.message } }); } else { callback(new Error(422), { 'error': { code: 422, message: 'This sdk is not available on the current page' } }); } }) }, get: function (url, callback) { return CAFE24API.complete('GET', url, this, null, callback); }, post: function (url, params, callback) { return CAFE24API.complete('POST', url, this, params, callback); }, put: function (url, params, callback) { return CAFE24API.complete('PUT', url, this, params, callback); }, delete: function (url, callback) { return CAFE24API.complete('DELETE', url, this, null, callback); }, complete: function (method, url, obj, params, callback) { var xhr = CAFE24API.sendXhr(method, url, obj, params, callback); xhr.onreadystatechange = function () { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status >= 200 && xhr.status <= 208) { callback(null, JSON.parse(xhr.responseText)); } else { callback(new Error(xhr.status), JSON.parse(xhr.responseText)); } } }; }, sendXhr: function (method, url, obj, params, callback) { if (method !== 'POST') { var url = obj.fullPath(url); } var xhr = obj.initializeXhr(); var queryVars = {}; if (obj.clientId) queryVars['cafe24_app_key'] = obj.clientId; if (obj.version) queryVars['cafe24_api_version'] = obj.version; var basicAuthKey = CAFE24API.basicAuthKeys[obj.clientId] || CAFE24API.basicAuthKeys['default']; if (basicAuthKey && basicAuthKey.length > 0) { queryVars['authorization'] = 'Basic ' + basicAuthKey; } if (params === null) { var seperator = url.indexOf('?') == -1 ? '?' : '&'; var queryString = []; for (var key in queryVars) { queryString.push(key + '=' + encodeURIComponent(queryVars[key])); } if (queryString.length > 0) { url = url + seperator + queryString.join('&'); } } xhr.open(method, url, true); if (typeof params == 'object' && params !== null) { xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=utf-8'); for (var key in queryVars) { params[key] = queryVars[key]; } params = 'formData=' + JSON.stringify(params); } xhr.send(params || null); return xhr; }, __sessionErr: function (callback) { callback(new Error(403), { 'error': { code: 403, message: 'Failed to get session. Only available when log in.' } }); }, __scopeErr: function (callback, scope) { if (typeof CAFE24.APPSCRIPT_SDK_DATA != "undefined" && jQuery.inArray(scope, CAFE24.APPSCRIPT_SDK_DATA) > -1) { return true; } callback(new Error(403), { 'error': { code: 403, message: 'You do not have the necessary authority(scope) to use the SDK.' } }); }, __chkValidSessionScope: function (callback, scope) { if (!CAPP_ASYNC_METHODS.IS_LOGIN) { CAFE24API.__sessionErr(callback); return false; } if (!CAFE24API.__scopeErr(callback, scope)) { return false; } return true; } }; </script>
vendor: 1 bytes, line 668
668
669<script type="text/javascript">
670window.CAFE24 = window.CAFE24 || {};
671CAFE24.MANIFEST_CACHE_REVISION = '2610081510';
672CAFE24.getDeprecatedNamespace = function(sDeprecatedNamespace, sSupersededNamespace) {
673var sNamespace = sSupersededNamespace 
674? sSupersededNamespace 
675: sDeprecatedNamespace.replace(/^EC_/, '');
676return CAFE24[sNamespace];
677}
678CAFE24.FRONT_LANGUAGE_CODE = "ko_KR";
679CAFE24.MOBILE = false;
680CAFE24.MOBILE_DEVICE = false;
681CAFE24.MOBILE_USE = false;
682var EC_MOBILE = CAFE24.MOBILE;
683var EC_MOBILE_DEVICE = CAFE24.MOBILE_DEVICE;
684var EC_MOBILE_USE = CAFE24.MOBILE_USE;
685CAFE24.SKIN_CODE = "skin11";
686CAFE24.FRONT_EXTERNAL_SCRIPT_VARIABLE_DATA = {"common_member_id_crypt":""};
687var EC_FRONT_EXTERNAL_SCRIPT_VARIABLE_DATA = CAFE24.getDeprecatedNamespace('EC_FRONT_EXTERNAL_SCRIPT_VARIABLE_DATA');
688CAFE24.SDE_SHOP_NUM = 1;CAFE24.SHOP = {getLanguage : function() { return "ko_KR"; },getSkinLanguageCode : function() { return "ko_KR"; },getCurrency : function() { return "KRW"; },getFlagCode : function() { return "KR"; },getTimezone: function() { return "Asia/Seoul" },getDateFormat: function() { return "Y-m-d" },isMultiShop : function() { return false; },isDefaultShop : function() { return true; },isDefaultLanguageShop : function(sLanguageCode) { return SHOP.isDefaultShop() && SHOP.isLanguageShop(sLanguageCode); },isKR : function() { return true; },isUS : function() { return false; },isJP : function() { return false; },isCN : function() { return false; },isTW : function() { return false; },isES : function() { return false; },isPT : function() { return false; },isVN : function() { return false; },isPH : function() { return false; },getCountryAndLangMap : function() { return {
689"KR": "ko_KR",
690"US": "en_US",
691"JP": "ja_JP",
692"CN": "zh_CN",
693"TW": "zh_TW",
694"VN": "vi_VN",
695"PH": "en_PH"
696}},isLanguageShop : function(sLanguageCode) { return sLanguageCode === "ko_KR"; },getDefaultShopNo : function() { return 1; },getProductVer : function() { return 2; },isSDE : function() { return true; },isMode : function() {return false; },getModeName : function() {return false; },isMobileAdmin : function() {return false; },isNewProMode : function() {return true; },isExperienceMall : function() { return false; },isDcollection : function() {return false; },isYoutubeShops : function() {return false; },getYtShopsShopNo : function() {return 0; },isFrontDesignChangeRequired : function() {return false;},isG2G : function() {return false; },isGlobale : function() {return false; },getAdminID : function() {return ''},getMallID : function() {return 'ultradoc1'},getCurrencyFormat : function(sPriceTxt, bIsNumberFormat) { 
697sPriceTxt = String(sPriceTxt);
698var aCurrencySymbol = ["","\uc6d0",false];
699if (typeof CAFE24.SHOP_PRICE !== 'undefined' && isNaN(sPriceTxt.replace(/[,]/gi, '')) === false && bIsNumberFormat === true) {
700// bIsNumberFormat 사용하려면 Ui(':libUipackCurrency')->plugin('Currency') 화폐 라이브러리 추가 필요
701sPriceTxt = CAFE24.SHOP_PRICE.toShopPrice(sPriceTxt.replace(/[,]/gi, ''), true, CAFE24.SDE_SHOP_NUM);
702}
703try {
704var sPlusMinusSign = (sPriceTxt.toString()).substr(0, 1);
705if (sPlusMinusSign === '-' || sPlusMinusSign === '+') {
706sPriceTxt = (sPriceTxt.toString()).substr(1);
707return sPlusMinusSign + aCurrencySymbol[0] + sPriceTxt + aCurrencySymbol[1];
708} else {
709return aCurrencySymbol[0] + sPriceTxt + aCurrencySymbol[1];
710}
711} catch (e) {
712return aCurrencySymbol[0] + sPriceTxt + aCurrencySymbol[1];
713}
714}};CAFE24.CURRENCY_INFO = {getOriginReferenceCurrency : function() {return 'USD'},getCurrencyList : function(sCurrencyCode) { var aCurrencyList = {"AED":{"currency_symbol":"&#1601;&#1604;&#1587;","decimal_place":2,"round_method_type":"R"},"AMD":{"currency_symbol":"\u058f","decimal_place":2,"round_method_type":"R"},"AOA":{"currency_symbol":"Kz","decimal_place":2,"round_method_type":"R"},"AUD":{"currency_symbol":"A$","decimal_place":2,"round_method_type":"R"},"BDT":{"currency_symbol":"&#2547;","decimal_place":2,"round_method_type":"R"},"BHD":{"currency_symbol":".&#1583;.&#1576;","decimal_place":3,"round_method_type":"R"},"BRL":{"currency_symbol":"R$","decimal_place":2,"round_method_type":"R"},"CAD":{"currency_symbol":"C$","decimal_place":2,"round_method_type":"R"},"CHF":{"currency_symbol":"Fr","decimal_place":2,"round_method_type":"R"},"CNY":{"currency_symbol":"&yen;","decimal_place":2,"round_method_type":"R"},"CRC":{"currency_symbol":"\u20a1","decimal_place":2,"round_method_type":"R"},"CVE":{"currency_symbol":"$","decimal_place":2,"round_method_type":"R"},"CZK":{"currency_symbol":"K&#269;","decimal_place":2,"round_method_type":"R"},"DJF":{"currency_symbol":"Fdj","decimal_place":0,"round_method_type":"F"},"DKK":{"currency_symbol":"kr","decimal_place":2,"round_method_type":"R"}
714,"DZD":{"currency_symbol":"\u062f.\u062c","decimal_place":2,"round_method_type":"R"},"ETB":{"currency_symbol":"Br","decimal_place":2,"round_method_type":"R"},"EUR":{"currency_symbol":"\u20ac","decimal_place":2,"round_method_type":"R"},"GBP":{"currency_symbol":"&pound;","decimal_place":2,"round_method_type":"R"},"GEL":{"currency_symbol":"\u20be","decimal_place":2,"round_method_type":"R"},"GHS":{"currency_symbol":"GH\u20b5","decimal_place":2,"round_method_type":"R"},"GMD":{"currency_symbol":"D","decimal_place":2,"round_method_type":"R"},"GNF":{"currency_symbol":"FG","decimal_place":0,"round_method_type":"F"},"HKD":{"currency_symbol":"HK$","decimal_place":2,"round_method_type":"R"},"HUF":{"currency_symbol":"Ft","decimal_place":2,"round_method_type":"R"},"IDR":{"currency_symbol":"Rp","decimal_place":0,"round_method_type":"F"},"ILS":{"currency_symbol":"&#8362;","decimal_place":2,"round_method_type":"R"},"INR":{"currency_symbol":"&#8377;","decimal_place":2,"round_method_type":"R"},"JOD":{"currency_symbol":" &#1583;&#1610;&#1606;&#1575;&#1585;","decimal_place":3,"round_method_type":"R"},"JPY":{"currency_symbol":"&yen;","decimal_place":0,"round_method_type":"F"},"KES":{"currency_symbol":"KSh","decimal_place":2,"round_method_type":"R"},"KMF":{"currency_symbol":"CF","decimal_place":0,"round_method_type":"F"},"KWD":{"currency_symbol":"&#1583;&#1610;&#1606;&#1575;&#1585;","decimal_place":3,"round_method_type":"R"},"MAD":{"currency_symbol":"\u062f.\u0645.","decimal_place":2,"round_method_type":"R"},"MDL":{"currency_symbol":"L","decimal_place":2,"round_method_type":"R"},"MOP":{"currency_symbol":"MOP$","decimal_place":2,"round_method_type":"R"},"MVR":{"currency_symbol":"Rf","decimal_place":2,"round_method_type":"R"},"MWK":{"currency_symbol":"MK","decimal_place":2,"round_method_type":"R"},"MXN":{"currency_symbol":"Mex$","decimal_place":2,"round_method_type":"R"},"MYR":{"currency_symbol":"RM","decimal_place":2,"round_method_type":"R"},"NOK":{"currency_symbol":"kr","decimal_place":2,"round_method_type":"R"},"NZD":{"currency_symbol":"NZ$","decimal_place":2,"round_method_type":"R"},"PGK":{"currency_symbol":"K","decimal_place":2,"round_method_type":"R"},"PHP":{"currency_symbol":"&#8369;","decimal_place":2,"round_method_type":"R"},"PKR":{"currency_symbol":"&#8360;","decimal_place":2,"round_method_type":"R"},"PLN":{"currency_symbol":"z\u0142","decimal_place":2,"round_method_type":"R"},"RUB":{"currency_symbol":"\u0440\u0443\u0431","decimal_place":2,"round_method_type":"R"},"RWF":{"currency_symbol":"RF","decimal_place":0,"round_method_type":"F"},"SAR":{"currency_symbol":"&#65020;","decimal_place":2,"round_method_type":"R"},"SEK":{"currency_symbol":"kr","decimal_place":2,"round_method_type":"R"},"SGD":{"currency_symbol":"S$","decimal_place":2,"round_method_type":"R"},"SLL":{"currency_symbol":"Le","decimal_place":2,"round_method_type":"R"},"STN":{"currency_symbol":"Db","decimal_place":2,"round_method_type":"R"},"THB":{"currency_symbol":"&#3647;","decimal_place":2,"round_method_type":"R"},"TND":{"currency_symbol":"\u062f.\u062a","decimal_place":3,"round_method_type":"R"},"TOP":{"currency_symbol":"T$","decimal_place":2,"round_method_type":"R"},"TRY":{"currency_symbol":"TL","decimal_place":2,"round_method_type":"R"},"TWD":{"currency_symbol":"NT$","decimal_place":0,"round_method_type":"F"},"TZS":{"currency_symbol":"TSh","decimal_place":2,"round_method_type":"R"},"UGX":{"currency_symbol":"USh","decimal_place":0,"round_method_type":"F"},"USD":{"currency_symbol":"$","decimal_place":2,"round_method_type":"R"},"VND":{"currency_symbol":"&#8363;","decimal_place":0,"round_method_type":"F"},"VUV":{"currency_symbol":"VT","decimal_place":0,"round_method_type":"F"},"WST":{"currency_symbol":"WS$","decimal_place":2,"round_method_type":"R"},"XAF":{"currency_symbol":"FCFA","decimal_place":0,"round_method_type":"F"},"XOF":{"currency_symbol":"CFA","decimal_place":0,"round_method_type":"F"},"XPF":{"currency_symbol":"\u20a3","decimal_place":0,"round_method_type":"F"},"ZAR":{"currency_symbol":"R","decimal_place":2,"round_method_type":"R"},"ZMW":{"currency_symbol":"ZK","decimal_place":2,"round_method_type":"R"}}; return aCurrencyList[sCurrencyCode] },isUseReferenceCurrency : function() {return false }};CAFE24.COMMON_UTIL = {convertSslForString : function(sString) { return sString.replace(/http:/gi, '');},convertSslForHtml : function(sHtml) { return sHtml.replace(/((?:src|href)\s*=\s*['"])http:(\/\/(?:[a-z0-9\-_\.]+)\/)/ig, '$1$2');},getProtocol : function() { return 'https'; },moveSsl : function() { if (CAFE24.COMMON_UTIL.getProtocol() === 'http') { var oLocation = jQuery(window.location); var sUrl = 'https://' + oLocation.attr('host') + oLocation.attr('pathname') + oLocation.attr('search'); window.location.replace(sUrl); } },setEcCookie : function(sKey, sValue, iExpire) {var exdate = new Date();exdate.setDate(exdate.getDate() + iExpire);var setValue = escape(sValue) + "; domain=." + CAFE24.GLOBAL_INFO.getBaseDomain() + "; path=/;expires=" + exdate.toUTCString();document.cookie = sKey + "=" + setValue;}};CAFE24.SHOP_LIB_INFO = {getBankInfo : function() { 
715var oBankInfo = "";
716$.ajax({
717type: "GET",
718url: "/exec/front/Shop/Bankinfo",
719dataType: "json",
720async: false,
721success: function(oResponse) {
722oBankInfo = oResponse;
723}
724});
725return oBankInfo; }};            var EC_SDE_SHOP_NUM = CAFE24.SDE_SHOP_NUM;
726var SHOP = CAFE24.getDeprecatedNamespace('SHOP');
727var EC_COMMON_UTIL = CAFE24.getDeprecatedNamespace('EC_COMMON_UTIL');
728var EC_SHOP_LIB_INFO = CAFE24.getDeprecatedNamespace('EC_SHOP_LIB_INFO');
729var EC_CURRENCY_INFO = CAFE24.getDeprecatedNamespace('EC_CURRENCY_INFO');
730CAFE24.ROOT_DOMAIN = "cafe24.com";
731CAFE24.API_DOMAIN = "cafe24api.com";
732CAFE24.GLOBAL_INFO = (function() {
733var oData = {"base_domain":"ultradoc1.cafe24.com","root_domain":"cafe24.com","api_domain":"cafe24api.com","is_global":false,"is_global_standard":false,"country_code":"KR","language_code":"ko_KR","admin_language_code":"ko_KR","front_language_code":"ko_KR"};
734return {
735getBaseDomain: function() {
736return oData['base_domain'];
737},
738getRootDomain: function() {
739return oData['root_domain'];
740},
741getApiDomain: function() {
742return oData['api_domain'];
743},
744isGlobal: function() {
745return oData['is_global'];
746},
747isGlobalStandard: function() {
748return oData['is_global_standard'];
749},
750getCountryCode: function() {
751return oData['country_code'];
752},
753getLanguageCode: function() {
754return oData['language_code'];
755},
756getAdminLanguageCode: function() {
757return oData['admin_language_code'];
758},
759getFrontLanguageCode: function() {
760return oData['front_language_code'];
761}
762};
763})();
764var EC_ROOT_DOMAIN = CAFE24.ROOT_DOMAIN;
765var EC_API_DOMAIN = CAFE24.API_DOMAIN;
766var EC_TRANSLATE_LOG_STATUS = CAFE24.TRANSLATE_LOG_STATUS;
767var EC_GLOBAL_INFO = CAFE24.getDeprecatedNamespace('EC_GLOBAL_INFO');
768CAFE24.AVAILABLE_LANGUAGE = ["ko_KR","zh_CN","en_US","zh_TW","es_ES","pt_PT","vi_VN","ja_JP","en_PH"];
769CAFE24.AVAILABLE_LANGUAGE_CODES = {"ko_KR":"KOR","zh_CN":"CHN","en_US":"ENG","zh_TW":"TWN","es_ES":"ESP","pt_PT":"PRT","vi_VN":"VNM","ja_JP":"JPN","en_PH":"PHL"};
770var EC_AVAILABLE_LANGUAGE = CAFE24.AVAILABLE_LANGUAGE;
771var EC_AVAILABLE_LANGUAGE_CODES = CAFE24.AVAILABLE_LANGUAGE_CODES;
772CAFE24.GLOBAL_PRODUCT_LANGUAGE_CODES = {  
773sClearanceCategoryCode: '',
774sManualLink: '//support.cafe24.com/hc/ko/articles/7739013909529',
775sHsCodePopupLink: 'https://www.wcotradetools.org/en/harmonized-system',
776aCustomRegex: '"PHL" : "^[0-9]{8}[A-Z]?$"',
777sCountryCodeData: 'kor',
778sEnglishExampleURlForGlobal: '',
779aReverseAddressCountryCode: ["VNM","PHL"],
780aSizeGuideCountryAlign: '["US","UK","EU","KR","JP","CN"]',
781aIsSupportTran: ["ja_JP","zh_CN","zh_TW","en_US","vi_VN","en_PH","pt_PT","es_ES"]
782};
783var EC_GLOBAL_PRODUCT_LANGUAGE_CODES = CAFE24.getDeprecatedNamespace('EC_GLOBAL_PRODUCT_LANGUAGE_CODES');
784CAFE24.GLOBAL_ORDER_LANGUAGE_CODES = {
785aModifyOrderLanguage: {"KR":"ko_KR","JP":"ja_JP","CN":"zh_CN","TW":"zh_TW","VN":"vi_VN","PH":"en_PH"},
786aUseIdCardKeyCountry: ["CN","TW"],
787aLanguageWithCountryCode: {"zh_CN":["CN","CHN","HK","HNK"],"ja_JP":["JP","JPN"],"zh_TW":["TW","TW
787N"],"ko_KR":["KR","KOR"],"vi_VN":["VN","VNM"],"en_PH":["PH","PHL"]},
788aCheckDisplayRequiredIcon: ["ja_JP","zh_CN","zh_TW","en_US","vi_VN","en_PH"],
789aSetReceiverName: {"zh_CN":{"sCountry":"CN","bUseLastName":true},"zh_TW":{"sCountry":"TW","bUseLastName":false},"ja_JP":{"sCountry":"JP","bUseLastName":true}},
790aSetDeferPaymethodLanguage: {"ja_JP":"\uc77c\ubcf8","zh_CN":"\uc911\uad6d"},
791aUseDeferPaymethod: ["ja_JP","zh_CN"],
792aCheckShippingCompanyAndPaymethod: ["ja_JP","zh_CN"],
793aSetDeferPaymethodLanguageForShipping: {"ja_JP":"\u65e5\u672c","zh_CN":"\uc911\uad6d"},
794aCheckStoreByPaymethod: ["ja_JP","zh_CN"],
795aCheckIsEmailRequiredForJs: ["en_US","zh_CN","zh_TW","ja_JP","vi_VN","en_PH"],
796aSetIdCardKeyCountryLanguage: {"CN":"\uc911\uad6d\uc758","TW":"\ub300\ub9cc\uc758"},
797aReverseGlobalAddress: ["en_PH","vi_VN","PHL","VNM","VN","PH"],
798aNoCheckZipCode: ["KOR","JPN"],
799aNotPostCodeAPICountryList: ["en_US","es_ES","pt_PT","en_PH"],
800aEnableSearchExchangeAddr: ["KR","JP","CN","VN","TW","PH"],
801aDuplicatedBaseAddr: ["TW","JP"],
802aReverseAddressCountryCode: ["VN","PH"],
803aCheckZipCode: ["PHL","en_PH","PH"]
804};
805var EC_GLOBAL_ORDER_LANGUAGE_CODES = CAFE24.getDeprecatedNamespace('EC_GLOBAL_ORDER_LANGUAGE_CODES');
806CAFE24.GLOBAL_MEMBER_LANGUAGE_CODES = {  
807sAdminWebEditorLanguageCode: 'ko' ,
808oNotAvailDecimalPointLanguages: ["ko_KR","ja_JP","zh_TW","vi_VN"],
809oAddressCountryCode: {"KOR":"ko_KR","JPN":"ja_JP","CHN":"zh_CN","TWN":"zh_TW","VNM":"vi_VN","PHL":"en_PH"},
810};
811var EC_GLOBAL_MEMBER_LANGUAGE_CODES = CAFE24.getDeprecatedNamespace('EC_GLOBAL_MEMBER_LANGUAGE_CODES');
812CAFE24.GLOBAL_BOARD_LANGUAGE_CODES = {  
813bUseLegacyBoard: true
814};
815var EC_GLOBAL_BOARD_LANGUAGE_CODES = CAFE24.getDeprecatedNamespace('EC_GLOBAL_BOARD_LANGUAGE_CODES');
816CAFE24.GLOBAL_MALL_LANGUAGE_CODES = {
817oDesign: {
818oDesignAddReplaceInfo: {"group_id":"SKIN.ADD.ADMIN.DESIGNDETAIL","replacement":{"KR":"KOREAN","US":"ENGLISH","JP":"JAPANESE","CN":"SIMPLIFIED.CHINESE","TW":"TRADITIONAL.CHINESE","ES":"SPANISH","PT":"PORTUGUESE","PH":"ENGLISH"}},
819oDesignDetailLanguageCountryMap: {"KR":"ko_KR","JP":"ja_JP","CN":"zh_CN","TW":"zh_TW","US":"en_US","ES":"es_ES","PT":"pt_PT","PH":"en_PH"},
820oSmartDesignSwitchTipLink: {"edibot":{"img":"\/\/img.echosting.cafe24.com\/smartAdmin\/img\/design\/img_editor_dnd.png","link":"\/\/ecsupport.cafe24.com\/board\/free\/list.html?board_act=list&board_no=12&category_no=9&cate_no=9"},"smart":{"img":"\/\/img.echosting.cafe24.com\/smartAdmin\/img\/design\/ko_KR\/img_editor_smart.png","link":"\/\/sdsupport.cafe24.com"}},
821oSmartDesignDecoShopList: ["ko_KR","ja_JP","zh_CN","en_US","zh_TW","es_ES","pt_PT"],
822oSmartDesignDecoMultilingual: {"list":{"ko_KR":"KOREAN","en_US":"ENGLISH","ja_JP":"JAPANESE","zh_CN":"SIMPLIFIED.CHINESE","zh_TW":"TRADITIONAL.CHINESE","es_ES":"SPANISH","pt_PT":"PORTUGUESE","vi_VN":"VIETNAMESE"},"group_id":"EDITOR.LAYER.EDITING.DECO"},
823aSmartDesignModuleShopList: ["ko_KR","ja_JP","zh_CN","en_US","zh_TW","es_ES","pt_PT"]
824},
825oStore: {
826oMultiShopCurrencyInfo: {"en_US":{"currency":"USD"},"zh_CN":{"currency":"USD","sub_currency":"CNY"},"ja_JP":{"currency":"JPY"},"zh_TW":{"currency":"TWD"},"es_ES":{"currency":"EUR"},"pt_PT":{"currency":"EUR"},"ko_KR":{"currency":"KRW"},"vi_VN":{"currency":"VND"},"en_PH":{"currency":"PHP"}},
827oBrowserRedirectLanguage: {"ko":{"primary":"ko_KR","secondary":"en_US"},"en":{"detail":{"en-ph":{"primary":"en_PH","secondary":"en_US"},"en-us":{"primary":"en_US","secondary":"es_ES"},"default":{"primary":"en_US","secondary":"es_ES"}}},"ja":{"primary":"ja_JP","secondary":"en_US"},"zh":{"detail":{"zh-cn":{"primary":"zh_CN","secondary":"en_US"},"zh-tw":{"primary":"zh_TW","secondary":"zh_CN"},"default":{"primary":"en_US","secondary":"ko_KR"}}},"es":{"primary":"es_ES","secondary":"en_US"},"pt":{"primary":"pt_PT","secondary":"en_US"},"vi":{"primary":"vi_VN","secondary":"en_US"},"default":{"primary":"en_US","secondary":"ko_KR"}},
828aChangeableLanguages: ["en_US","ja_JP","ko_KR"],
829aNoZipCodeLanguage: ["ko_KR","ja_JP"]
830},
831oMobile: {
832sSmartWebAppFaqUrl: "https://support.cafe24.com/hc/ko/articles/8466586607641",
833sAmpFaqUrl: "https://ecsupport.cafe24.com/board/free/read.html?no=1864&board_no=5&category_no=13&cate_no=13&category_no=13&category_no=13",
834},
835oPromotion: {
836bQrCodeAvailable: true,
837bSnsMarketingAvailable: true
838},
839oShippingReverseAddressLanguage: ["vi_VN","en_PH"] ,
840oGlobalStandardSwitchHelpCodeLink: {"SH.DS":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/SH.DS.html"},"PR.DS":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/PR.DS.html"},"OR.SM.BO":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/OR.SM.BO.html"},"DE.DS":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/DE.DS.html"},"MB.DS":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/MB.DS.html"},"PM.DS":{"link":"\/\/serviceguide.cafe24shop.com\/en_PH\/PM.DS.html"}},
841getAdminMainLocaleLanguage: function(sSkinLocaleCode) {
842var oLocaleData = [];
843var locale = "";
844var shopLangName = "";
845if (sSkinLocaleCode == "US") {
846locale = "en_US";
847shopLangName = "ENGLISH";
848} else if (sSkinLocaleCode == "JP") {
849locale = "ja_JP";
850shopLangName = "JAPANESE";
851} else if (sSkinLocaleCode == "CN") {
852locale = "zh_CN";
853shopLangName = "SIMPLIFIED.CHINESE";
854} else if (sSkinLocaleCode == "TW") {
855locale = "zh_TW";
856shopLangName = "TRADITIONAL.CHINESE";
857} else if (sSkinLocaleCode == "ES") {
858locale = "es_ES";
859shopLangName = "SPANISH";
860} else if (sSkinLocaleCode == "PT") {
861locale = "pt_PT";
862shopLangName = "PORTUGUESE";
863} else if (sSkinLocaleCode == "VN") {
864locale = "vi_VN";
865shopLangName = "VIETNAMESE";
866} else if(sSkinLocaleCode == "PH") {
867locale = "en_PH";
868shopLangName = "ENGLISH.PH";
869}
870oLocaleData["locale"] = locale;
871oLocaleData["shopLangName"] = shopLangName;
872return oLocaleData;
873}
874};
875var EC_GLOBAL_MALL_LANGUAGE_CODES = CAFE24.getDeprecatedNamespace('EC_GLOBAL_MALL_LANGUAGE_CODES');
876CAFE24.GLOBAL_DATETIME_INFO = {
877oConstants: {"STANDARD_DATE_REGEX":"\/([12]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01]))\/","IN_ZONE":"inZone","OUT_ZONE":"outZone","IN_FORMAT":"inFormat","OUT_FORMAT":"outFormat","IN_DATE_FORMAT":"inDateFormat","IN_TIME_FORMAT":"inTimeFormat","OUT_DATE_FORMAT":"outDateFormat","OUT_TIME_FORMAT":"outTimeFormat","IN_FORMAT_DATE_ONLY":1,"IN_FORMAT_TIME_ONLY":2,"IN_FORMAT_ALL":3,"OUT_FORMAT_DATE_ONLY":1,"OUT_FORMAT_TIME_ONLY":2,"OUT_FORMAT_ALL":3,"DATE_ONLY":"YYYY-MM-DD","TIME_ONLY":"HH:mm:ss","FULL_TIME":"YYYY-MM-DD HH:mm:ss","ISO_8601":"YYYY-MM-DD[T]HH:mm:ssZ","YEAR_ONLY":"YYYY","MONTH_ONLY":"MM","DAY_ONLY":"DD","WEEK_ONLY":"e","TIME_H_I_ONLY":"HH:mm","TIME_HOUR_ONLY":"HH","TIME_MINUTE_ONLY":"mm","POSTGRE_FULL_TIME":"YYYY-MM-DD HH24:MI:SS","POSTGRE_TIME_ONLY":" HH24:MI:SS","MICRO_SECOND_ONLY":"u","SEOUL":"Asia\/Seoul","TOKYO":"Asia\/Tokyo","SHANGHAI":"Asia\/Shanghai","TAIPEI":"Asia\/Taipei","HANOI":"Asia\/Bangkok","LOS_ANGELES":"America\/Los_Angeles","LISBON":"Europe\/Lisbon","MADRID":"Europe\/Madrid","SINGAPORE":"Asia\/Singapore","UTC":"Etc\/UTC","MAX_DATETIME":"9999-12-31 23:59:59"},
878oOptions: {"inZone":"Asia\/Seoul","inFormat":"YYYY-MM-DD HH:mm:ss","inDateFormat":"YYYY-MM-DD","inTimeFormat":"HH:mm:ss","outZone":"Asia\/Seoul","outFormat":"YYYY-MM-DD HH:mm:ss","outDateFormat":"YYYY-MM-DD","outTimeFormat":"HH:mm:ss"},
879oPolicies: [],
880sOverrideTimezone: '',
881sMomentNamespace: 'EC_GLOBAL_MOMENT'
882};
883CAFE24.FRONT_JS_CONFIG_MANAGE = {"sSmartBannerScriptUrl":"https:\/\/app4you.cafe24.com\/SmartBanner\/tunnel\/scriptTags?vs=1563164396689206","sMallId":"ultradoc1","sDefaultAppDomain":"https:\/\/app4you.cafe24.com"};
884var EC_FRONT_JS_CONFIG_MANAGE = CAFE24.getDeprecatedNamespace('EC_FRONT_JS_CONFIG_MANAGE');
885CAFE24.FRONT_JS_CONFIG_MEMBER = {"sAuthUrl":"https:\/\/ipin-ec.cafe24.com\/certify\/v1\/?action=auth"};
886var EC_FRONT_JS_CONFIG_MEMBER = CAFE24.getDeprecatedNamespace('EC_FRONT_JS_CONFIG_MEMBER');
887CAFE24.FRONT_JS_CONFIG_SHOP = {"recent_period":365,"bIsRecentList":true};
888var EC_FRONT_JS_CONFIG_SHOP = CAFE24.getDeprecatedNamespace('EC_FRONT_JS_CONFIG_SHOP');
889typeof window.CAFE24 === "undefined" && (window.CAFE24 = {});
890CAFE24.FRONTEND = {"IS_RENDERED_LOGIN":"F","FW_MANIFEST_CACHE_REVISION":2610081510,"IS_WEB_VIEW":"F"};
891CAFE24.ROUTE = {"is_mobile":false,"is_need_route":false,"language_code":"ZZ","path":{"origin":"\/product\/recent_view_product.html","result":"\/product\/recent_view_product.html","prefix":""},"shop_no":0,"skin_code":"default","support_language_list":{"ar":"ar_EG","ar-EG":"ar_EG","de":"de_DE","de-DE":"de_DE","en":"en_US","en-IN":"en_IN","en-PH":"en_PH","en-US":"en_US","es":"es_ES","es-ES":"es_ES","hi":"hi_IN","hi-IN":"hi_IN","i
891d":"id_ID","id-ID":"id_ID","it":"it_IT","it-IT":"it_IT","ja":"ja_JP","ja-JP":"ja_JP","ko":"ko_KR","ko-KR":"ko_KR","ms":"ms_MY","ms-MY":"ms_MY","pt":"pt_PT","pt-PT":"pt_PT","ru":"ru_RU","ru-RU":"ru_RU","th":"th_TH","th-TH":"th_TH","tr":"tr_TR","tr-TR":"tr_TR","vi":"vi_VN","vi-VN":"vi_VN","zh":"zh_CN","zh-CN":"zh_CN","zh-HK":"zh_HK","zh-MO":"zh_MO","zh-SG":"zh_SG","zh-TW":"zh_TW"}};
892</script>
892
893
894<link rel="stylesheet" type="text/css" href="/ind-script/optimizer.php?filename=lY2xCoAwDAX34Op39JvaEqXQ5pUkBf17BWeHrMcdNxWn5pGUDUsrp2qWDoV4qhgDsr1gn_8WVzL05Q1CBVdIX-6xQc83ayTwXDqHAkzqTZhKFvleDw&type=css&k=c39ac116ce20047f7b882a469c007f7c122f68fa&t=1681776733"  /><link rel="stylesheet" type="text/css" href="/ind-script/optimizer_user.php?filename=ndTBbsMgDADQe9trv4Ol_YoeetoXEHATa4BRbNTl70ebTIq0asI9IcAPWcbAHvYeGIdk-AtT1xnHbCL5EsDkqY5OzAQOkgRkOdTdI_8xwc5UxPSW0T0P4IAerpBKK3AUI6XW6GWhNRrcrk5gV1Ar-iLSntWvEtu_QQKoEVEQzFo2QlCbGwWvLh59a0kNc1qzNqme-Uu6kZrZAZOV5rviO2aYDhHVXVQ3KnyNNm909bHUVuCR8ueIOWMamhMs_Z5lbu--B5ARYjOw3i_go9OTk56cNeTfn2RT5jg_imuiXS7yBw&type=css&k=ad713fbd8b6453b072c8c026d01010518cb89ee8&t=1787734807&user=T"  />
895
896<title>SAINTPAIN</title></head>
897
898
899<body class="theme01" data-ez-theme="theme01">
900
901    <!-- =====================================================
902         SKIP NAVIGATION
903    ====================================================== -->
904
905    <div id="skipNavigation">
906
907        <p>
908            <a href="#category">
909                전체상품목록 바로가기
910            </a>
911        </p>
912
913        <p>
914            <a href="#contents">
915                본문 바로가기
916            </a>
917        </p>
918
919    </div>
920
921
922
923    <!-- =====================================================
924         WRAP
925    ====================================================== -->
926
927    <div id="wrap">
928
929
930        <!-- HEADER -->
931        <div data-ez-module="user-defined/1" data-ez-name="USER DEFINED" data-ez-type="plain" data-ez="module-0xf8atn-1">
932
933<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/orioncactus/[email protected]/dist/web/static/pretendard-dynamic-subset.min.css">
934
935<!-- =========================================================
936     SAINTPAIN HEADER
937========================================================= -->
938
939<header id="spHeader">
940
941    <div class="sp-header-inner">
942
943        <!-- MOBILE MENU BUTTON -->
944        <button type="button" class="sp-mobile-menu-button" aria-label="Menu" aria-expanded="false">
945            <span></span>
946            <span></span>
947            <span></span>
948        </button>
949
950
951        <!-- LEFT -->
952        <nav class="sp-header-left">
953
954            <div class="sp-shop-menu">
955
956                <a href="/category/all/50/" class="sp-main-menu-link">
957                    SHOP
958                </a>
959
960                <div class="sp-shop-dropdown">
961                    <div class="sp-shop-dropdown-inner">
962
963                        <ul class="xans-element- xans-layout xans-layout-category sp-shop-root"><li class="xans-record-">
964                                <a href="/category/new/49/">
965                                    New                                </a>
966                            </li>
967<li class="xans-record-">
968                                <a href="/category/outer/24/">
969                                    Outer                                </a>
970                            </li>
971<li class="xans-record-">
972                                <a href="/category/top/25/">
973                                    Top                                </a>
974                            </li>
975<li class="xans-record-">
976                                <a href="/category/pants/26/">
977                                    Pants                                </a>
978                            </li>
979<li class="xans-record-">
980                                <a href="/category/acc/27/">
981                                    Acc                                </a>
982                            </li>
983<li class="xans-record-">
984                                <a href="/category/archives/56/">
985                                    Archives                                </a>
986                            </li>
987</ul>
988
989                    </div>
990                </div>
991
992            </div>
993
994
995        <a href="/shopinfo/company.html" class="sp-main-menu-link">
996    MEMBERSHIP
997</a>
998
999            <a href="/collection/list.html?cate_no=96" class="sp-main-menu-link">
1000                COLLECTION
1001            </a>
1002
1003            <a href="/stockists.html" class="sp-main-menu-link">
1004                STOCKISTS
1005            </a>
1006
1007            <a href="/board/index.html" class="sp-main-menu-link">
1008                BOARD
1009            </a>
1010
1011        </nav>
1012
1013
1014        <!-- LOGO -->
1015        <a href="/" class="sp-header-logo" aria-label="SAINTPAIN"><img src="https://ultradoc1.cafe24.com/logo/saint%20logo%201.png" alt="SAINTPAIN" loading="lazy" ez-prevent="img"></a>
1016
1017
1018        <!-- RIGHT -->
1019        <nav class="sp-header-right">
1020
1021            <!-- SEARCH -->
1022            <a href="/product/search.html" class="sp-header-icon sp-search-trigger" aria-label="Search">
1023
1024                <svg viewbox="0 0 24 24">
1025                    <circle cx="11" cy="11" r="6.5"></circle>
1026                    <path d="M16 16L21 21"></path>
1027                </svg>
1028
1029            </a>
1030
1031
1032            <!-- ACCOUNT -->
1033            <a href="/myshop/index.html" class="sp-header-icon" aria-label="Account">
1034
1035                <svg viewbox="0 0 24 24">
1036                    <circle cx="12" cy="8" r="3.5"></circle>
1037                    <path d="M5.5 20C5.8 15.8 8.1 13.5 12 13.5C15.9 13.5 18.2 15.8 18.5 20"></path>
1038                </svg>
1039
1040            </a>
1041
1042
1043            <!-- CART -->
1044            <a href="/order/basket.html" class="sp-header-icon sp-cart-trigger" aria-label="Cart">
1045
1046                <svg viewbox="0 0 24 24">
1047                    <path d="M6.5 8H17.5L18.5 21H5.5L6.5 8Z"></path>
1048                    <path d="M9 9V6.5C9 4.8 10.3 3.5 12 3.5C13.7 3.5 15 4.8 15 6.5V9"></path>
1049                </svg>
1050
1051                <span id="spCartCount" class="sp-cart-count"></span>
1052
1053            </a>
1054
1055        </nav>
1056
1057    </div>
1058
1059
1060    <!-- MOBILE MENU -->
1061    <div class="sp-mobile-menu">
1062
1063        <div class="sp-mobile-shop">
1064
1065            <div class="sp-mobile-shop-head">
1066
1067                <a href="/category/all/50/">
1068                    SHOP
1069                </a>
1070
1071                <button type="button" class="sp-mobile-shop-button">
1072                    +
1073                </button>
1074
1075            </div>
1076
1077
1078            <ul class="xans-element- xans-layout xans-layout-category sp-mobile-shop-root"><li class="xans-record-">
1079                    <a href="/category/new/49/">
1080                        New                    </a>
1081                </li>
1082<li class="xans-record-">
1083                    <a href="/category/outer/24/">
1084                        Outer                    </a>
1085                </li>
1086<li class="xans-record-">
1087                    <a href="/category/top/25/">
1088                        Top                    </a>
1089                </li>
1090<li class="xans-record-">
1091                    <a href="/category/pants/26/">
1092                        Pants                    </a>
1093                </li>
1094<li class="xans-record-">
1095                    <a href="/category/acc/27/">
1096                        Acc                    </a>
1097                </li>
1098<li class="xans-record-">
1099                    <a href="/category/archives/56/">
1100                        Archives                    </a>
1101                </li>
1102</ul>
1103
1104        </div>
1105
1106
1107<a href="/shopinfo/company.html">
1108    MEMBERSHIP
1109</a>
1110
1111        <a href="/collection/list.html?cate_no=96">
1112            COLLECTION
1113        </a>
1114
1115        <a href="/stockists.html">
1116            STOCKISTS
1117        </a>
1118
1119        <a href="/board/index.html">
1120            BOARD
1121        </a>
1122
1123    </div>
1124
1125</header>
1126
1127
1128
1129<!-- =========================================================
1130     SEARCH
1131========================================================= -->
1132
1133<div id="spSearchOverlay" class="sp-search-overlay" aria-hidden="true">
1134
1135    <div class="sp-search-center">
1136
1137        <button type="button" class="sp-search-close" id="spSearchClose" aria-label="Close Search">
1138            <span></span>
1139            <span></span>
1140        </button>
1141
1142
1143        <form class="sp-search-form" action="/product/search.html" method="get">
1144
1145            <input type="text" name="keyword" id="spSearchInput" class="sp-search-input" placeholder="Search" autocomplete="off">
1146
1147         </form>
1148
1149    </div>
1150
1151</div>
1152
1153
1154
1155<!-- =========================================================
1156     CART DRAWER
1157========================================================= -->
1158
1159<div id="spCartDrawer" class="sp-cart-drawer" aria-hidden="true">
1160
1161    <button type="button" id="spCartBackdrop" class="sp-cart-backdrop" aria-label="Close Cart">
1162    </button>
1163
1164
1165    <aside class="sp-cart-panel">
1166
1167        <header class="sp-cart-head">
1168
1169            <div class="sp-cart-title">
1170                CART
1171            </div>
1172
1173            <button type="button" class="sp-cart-close" id="spCartClose">
1174                <span></span>
1175                <span></span>
1176            </button>
1177
1178        </header>
1179
1180
1181        <div id="spCartBody" class="sp-cart-body">
1182
1183            <div class="sp-cart-loading">
1184                LOADING
1185            </div>
1186
1187        </div>
1188
1189
1190        <footer class="sp-cart-footer">
1191
1192            <div class="sp-cart-total">
1193                <span>TOTAL</span>
1194                <strong id="spCartTotal">-</strong>
1195            </div>
1196
1197            <button type="button" id="spCartCheckout" class="sp-cart-checkout" disabled>
1198                CHECK OUT
1199            </button>
1200
1201        </footer>
1202
1203    </aside>
1204
1205</div>
1206
1207
1208
1209<!-- =========================================================
1210     HIDDEN CAFE24 BASKET ENGINE
1211========================================================= -->
1212
1213<iframe id="spCartEngine" class="sp-cart-engine" src="about:blank" title="Cart Engine" tabindex="-1" aria-hidden="true">
1214</iframe>
1215
1216
1217
1218<style>
1219
1220/* =========================================================
1221   RESET
1222========================================================= */
1223
1224#spHeader,
1225#spHeader *,
1226#spSearchOverlay,
1227#spSearchOverlay *,
1228#spCartDrawer,
1229#spCartDrawer * {
1230    box-sizing:border-box;
1231}
1232
1233body {
1234    padding-top:54px !important;
1235}
1236
1237
1238
1239/* =========================================================
1240   HEADER
1241========================================================= */
1242
1243#spHeader {
1244    position:fixed !important;
1245
1246    top:0 !important;
1247    left:0 !important;
1248    right:0 !important;
1249
1250    z-index:999900 !important;
1251
1252    width:100% !important;
1253    height:54px !important;
1254
1255    margin:0 !important;
1256    padding:0 !important;
1257
1258    background:#fff !important;
1259
1260    border:0 !important;
1261    box-shadow:none !important;
1262}
1263
1264
1265.sp-header-inner {
1266    position:relative;
1267
1268    display:flex;
1269
1270    width:100%;
1271    height:54px;
1272
1273    padding:0 12px;
1274
1275    align-items:center;
1276
1277    background:#fff;
1278}
1279
1280
1281
1282/* =========================================================
1283   LEFT
1284========================================================= */
1285
1286.sp-header-left {
1287    display:flex;
1288
1289    height:100%;
1290
1291    align-items:center;
1292
1293    gap:27px;
1294}
1295
1296
1297.sp-main-menu-link {
1298    position:relative;
1299
1300    display:flex;
1301
1302    height:100%;
1303
1304    align-items:center;
1305
1306    padding:0;
1307
1308    font-family:
1309        "helvetica-neue-world",
1310        Helvetica,
1311        Arial,
1312        sans-serif !important;
1313
1314    font-size:12px !important;
1315    line-height:1 !important;
1316
1317    font-weight:400 !important;
1318
1319    color:#000 !important;
1320
1321    text-decoration:none !important;
1322
1323    white-space:nowrap;
1324}
1325
1326
1327.sp-main-menu-link::after {
1328    content:"";
1329
1330    position:absolute;
1331
1332    left:0;
1333    bottom:16px;
1334
1335    width:100%;
1336    height:1px;
1337
1338    background:#000;
1339
1340    transform:scaleX(0);
1341    transform-origin:left center;
1342
1343    transition:transform .22s ease;
1344}
1345
1346
1347.sp-main-menu-link:hover::after {
1348    transform:scaleX(1);
1349}
1350
1351
1352
1353/* =========================================================
1354   SHOP
1355========================================================= */
1356
1357.sp-shop-menu {
1358    position:static;
1359
1360    display:flex;
1361
1362    height:100%;
1363
1364    align-items:center;
1365}
1366
1367
1368.sp-shop-dropdown {
1369    position:absolute;
1370
1371    top:54px;
1372    left:0;
1373
1374    visibility:hidden;
1375
1376    width:100vw;
1377
1378    opacity:0;
1379
1380    pointer-events:none;
1381
1382    transform:translateY(-9px);
1383
1384    transition:
1385        opacity .17s ease,
1386        transform .22s ease,
1387        visibility 0s linear .22s;
1388}
1389
1390
1391.sp-shop-menu:hover .sp-shop-dropdown {
1392    visibility:visible;
1393
1394    opacity:1;
1395
1396    pointer-events:auto;
1397
1398    transform:translateY(0);
1399
1400    transition:
1401        opacity .17s ease,
1402        transform .22s ease,
1403        visibility 0s;
1404}
1405
1406
1407.sp-shop-dropdown-inner {
1408    width:100%;
1409
1410    min-height:100px;
1411
1412    padding:22px 14px 27px;
1413
1414    background:#fff;
1415
1416    box-shadow:0 9px 18px rgba(0,0,0,.04);
1417}
1418
1419
1420.sp-shop-root {
1421    display:flex !important;
1422
1423    width:100% !important;
1424
1425    margin:0 !important;
1426    padding:0 !important;
1427
1428    align-items:flex-start;
1429
1430    flex-wrap:wrap;
1431
1432    gap:28px 55px;
1433
1434    list-style:none !important;
1435}
1436
1437
1438.sp-shop-root > li {
1439    display:block !important;
1440
1441    min-width:100px;
1442
1443    margin:0 !important;
1444    padding:0 !important;
1445
1446    list-style:none !important;
1447}
1448
1449
1450.sp-shop-root > li > a {
1451    position:relative;
1452
1453    display:inline-block;
1454
1455    padding-bottom:3px;
1456
1457    font-family:
1458        "helvetica-neue-world",
1459        Helvetica,
1460        Arial,
1461        sans-serif !important;
1462
1463    font-size:12px !important;
1464
1465    line-height:1.3 !important;
1466
1467    font-weight:500 !important;
1468
1469    color:#000 !important;
1470
1471    text-transform:uppercase;
1472
1473    text-decoration:none !important;
1474}
1475
1476
1477.sp-shop-root > li > a::after {
1478    content:"";
1479
1480    position:absolute;
1481
1482    left:0;
1483    bottom:0;
1484
1485    width:100%;
1486    height:1px;
1487
1488    background:#000;
1489
1490    transform:scaleX(0);
1491
1492    transform-origin:left center;
1493
1494    transition:transform .2s ease;
1495}
1496
1497
1498.sp-shop-root > li > a:hover::after {
1499    transform:scaleX(1);
1500}
1501
1502
1503.sp-shop-root img,
1504.sp-mobile-shop-root img {
1505    display:none !important;
1506}
1507
1508
1509
1510/* =========================================================
1511   CHILD CATEGORY
1512========================================================= */
1513
1514.sp-shop-children {
1515    display:flex;
1516
1517    margin:10px 0 0 !important;
1518    padding:0 !important;
1519
1520    flex-direction:column;
1521
1522    gap:7px;
1523
1524    list-style:none !important;
1525}
1526
1527
1528.sp-shop-children li {
1529    margin:0 !important;
1530    padding:0 !important;
1531
1532    list-style:none !important;
1533}
1534
1535
1536.sp-shop-children a {
1537    font-family:
1538        "helvetica-neue-world",
1539        Helvetica,
1540        Arial,
1541        sans-serif !important;
1542
1543    font-size:11px !important;
1544
1545    line-height:1.3 !important;
1546
1547    color:#000 !important;
1548
1549    text-decoration:none !important;
1550
1551    text-transform:uppercase;
1552}
1553
1554
1555
1556/* =========================================================
1557   LOGO
1558========================================================= */
1559
1560.sp-header-logo {
1561    position:absolute !important;
1562
1563    top:50% !important;
1564    left:50% !important;
1565
1566    display:flex !important;
1567
1568    align-items:center;
1569
1570    transform:translate(-50%,-50%) !important;
1571}
1572
1573
1574.sp-header-logo img {
1575    display:block !important;
1576
1577    width:112px !important;
1578    height:24px !important;
1579
1580    object-fit:contain !important;
1581
1582    border:0 !important;
1583}
1584
1585
1586
1587/* =========================================================
1588   RIGHT
1589========================================================= */
1590
1591.sp-header-right {
1592    display:flex;
1593
1594    height:100%;
1595
1596    margin-left:auto;
1597
1598    align-items:center;
1599
1600    gap:18px;
1601}
1602
1603
1604.sp-header-icon {
1605    position:relative;
1606
1607    display:flex !important;
1608
1609    width:20px;
1610    height:20px;
1611
1612    align-items:center;
1613    justify-content:center;
1614
1615    color:#000 !important;
1616
1617    text-decoration:none !important;
1618}
1619
1620
1621.sp-header-icon svg {
1622    display:block;
1623
1624    width:20px;
1625    height:20px;
1626
1627    fill:none;
1628
1629    stroke:#000;
1630
1631    stroke-width:1.35;
1632
1633    stroke-linecap:round;
1634    stroke-linejoin:round;
1635}
1636
1637
1638
1639/* =========================================================
1640   CART COUNT
1641========================================================= */
1642
1643.sp-cart-count {
1644    position:absolute;
1645
1646    top:-5px;
1647    right:-7px;
1648
1649    display:none;
1650
1651    min-width:12px;
1652    height:12px;
1653
1654    padding:0 2px;
1655
1656    align-items:center;
1657    justify-content:center;
1658
1659    font-family:
1660        "helvetica-neue-world",
1661        Arial,
1662        sans-serif;
1663
1664    font-size:8px;
1665
1666    line-height:12px;
1667
1668    color:#000;
1669}
1670
1671
1672.sp-cart-count.is-visible {
1673    display:flex;
1674}
1675
1676
1677
1678/* =========================================================
1679   SEARCH
1680========================================================= */
1681
1682#spSearchOverlay {
1683    position:fixed;
1684
1685    inset:0;
1686
1687    z-index:1000000;
1688
1689    display:flex;
1690
1691    align-items:center;
1692    justify-content:center;
1693
1694    background:rgba(255,255,255,.20);
1695
1696    opacity:0;
1697
1698    visibility:hidden;
1699
1700    pointer-events:none;
1701
1702    -webkit-backdrop-filter:blur(0);
1703    backdrop-filter:blur(0);
1704
1705    transition:
1706        opacity .38s ease,
1707        visibility 0s linear .38s,
1708        backdrop-filter .4s ease;
1709}
1710
1711
1712#spSearchOverlay.is-open {
1713    opacity:1;
1714
1715    visibility:visible;
1716
1717    pointer-events:auto;
1718
1719    -webkit-backdrop-filter:blur(15px);
1720    backdrop-filter:blur(15px);
1721
1722    transition:
1723        opacity .38s ease,
1724        visibility 0s,
1725        backdrop-filter .4s ease;
1726}
1727
1728
1729.sp-search-center {
1730    position:relative;
1731
1732    width:min(560px,calc(100vw - 60px));
1733
1734    padding-top:42px;
1735}
1736
1737
1738.sp-search-form {
1739    width:100%;
1740
1741    margin:0;
1742}
1743
1744
1745.sp-search-input {
1746    display:block;
1747
1748    width:100%;
1749    height:44px;
1750
1751    padding:0 2px 8px;
1752
1753    border:0 !important;
1754    border-bottom:1px solid #000 !important;
1755
1756    border-radius:0 !important;
1757
1758    outline:0 !important;
1759
1760    background:transparent !important;
1761
1762    font-family:
1763        "helvetica-neue-world",
1764        Helvetica,
1765        Arial,
1766        Pretendard,
1767        sans-serif !important;
1768
1769    font-size:18px !important;
1770
1771    color:#000 !important;
1772}
1773
1774
1775.sp-search-input::placeholder {
1776    color:#000;
1777
1778    opacity:1;
1779}
1780
1781
1782
1783/* =========================================================
1784   CLOSE BUTTON
1785========================================================= */
1786
1787.sp-search-close,
1788.sp-cart-close {
1789    position:relative;
1790
1791    width:28px;
1792    height:28px;
1793
1794    padding:0;
1795
1796    border:0;
1797
1798    background:transparent;
1799
1800    cursor:pointer;
1801}
1802
1803
1804.sp-search-close {
1805    position:absolute;
1806
1807    top:0;
1808    right:0;
1809}
1810
1811
1812.sp-search-close span,
1813.sp-cart-close span {
1814    position:absolute;
1815
1816    top:50%;
1817    left:50%;
1818
1819    width:18px;
1820    height:1px;
1821
1822    background:#000;
1823}
1824
1825
1826.sp-search-close span:first-child,
1827.sp-cart-close span:first-child {
1828    transform:translate(-50%,-50%) rotate(45deg);
1829}
1830
1831
1832.sp-search-close span:last-child,
1833.sp-cart-close span:last-child {
1834    transform:translate(-50%,-50%) rotate(-45deg);
1835}
1836
1837
1838
1839/* =========================================================
1840   CART DRAWER
1841========================================================= */
1842
1843#spCartDrawer {
1844    position:fixed;
1845
1846    inset:0;
1847
1848    z-index:1000010;
1849
1850    visibility:hidden;
1851
1852    pointer-events:none;
1853}
1854
1855
1856#spCartDrawer.is-open {
1857    visibility:visible;
1858
1859    pointer-events:auto;
1860}
1861
1862
1863.sp-cart-backdrop {
1864    position:absolute;
1865
1866    inset:0;
1867
1868    width:100%;
1869    height:100%;
1870
1871    margin:0;
1872    padding:0;
1873
1874    border:0;
1875
1876    background:rgba(0,0,0,0);
1877
1878    opacity:0;
1879
1880    -webkit-backdrop-filter:blur(0);
1881    backdrop-filter:blur(0);
1882
1883    transition:
1884        background-color .4s ease,
1885        opacity .35s ease,
1886        backdrop-filter .4s ease;
1887}
1888
1889
1890#spCartDrawer.is-open .sp-cart-backdrop {
1891    background:rgba(0,0,0,.48);
1892
1893    opacity:1;
1894
1895    -webkit-backdrop-filter:blur(5px);
1896    backdrop-filter:blur(5px);
1897}
1898
1899
1900.sp-cart-panel {
1901    position:absolute;
1902
1903    top:0;
1904    right:0;
1905
1906    display:flex;
1907
1908    width:470px;
1909    max-width:92vw;
1910
1911    height:100%;
1912
1913    flex-direction:column;
1914
1915    background:#fff;
1916
1917    color:#000;
1918
1919    transform:translateX(100%);
1920
1921    transition:transform .45s cubic-bezier(.22,.61,.36,1);
1922
1923    overflow:hidden;
1924
1925    box-shadow:-8px 0 28px rgba(0,0,0,.08);
1926}
1927
1928
1929#spCartDrawer.is-open .sp-cart-panel {
1930    transform:translateX(0);
1931}
1932
1933
1934
1935/* =========================================================
1936   CART HEADER
1937========================================================= */
1938
1939.sp-cart-head {
1940    display:flex;
1941
1942    flex:0 0 56px;
1943
1944    height:56px;
1945
1946    padding:0 18px;
1947
1948    align-items:center;
1949    justify-content:space-between;
1950
1951    border-bottom:1px solid #000;
1952
1953    background:#fff;
1954}
1955
1956
1957.sp-cart-title {
1958    font-family:
1959        "helvetica-neue-world",
1960        Helvetica,
1961        Arial,
1962        sans-serif;
1963
1964    font-size:12px;
1965
1966    font-weight:400;
1967}
1968
1969
1970
1971/* =========================================================
1972   CART BODY
1973========================================================= */
1974
1975.sp-cart-body {
1976    flex:1 1 auto;
1977
1978    min-height:0;
1979
1980    overflow-y:auto;
1981
1982    background:#fff;
1983}
1984
1985
1986.sp-cart-loading,
1987.sp-cart-empty,
1988.sp-cart-error {
1989    display:flex;
1990
1991    width:100%;
1992
1993    min-height:220px;
1994
1995    padding:40px 20px;
1996
1997    align-items:center;
1998    justify-content:center;
1999
2000    text-align:center;
2001
2002    font-family:
2003        "helvetica-neue-world",
2004        Pretendard,
2005        Arial,
2006        sans-serif;
2007
2008    font-size:11px;
2009
2010    line-height:1.6;
2011
2012    color:#000;
2013}
2014
2015
2016
2017/* =========================================================
2018   CART ITEM
2019========================================================= */
2020
2021.sp-cart-item {
2022    position:relative;
2023
2024    display:grid;
2025
2026    grid-template-columns:82px minmax(0,1fr);
2027
2028    gap:16px;
2029
2030    width:100%;
2031
2032    padding:18px;
2033
2034    border-bottom:1px solid #000;
2035}
2036
2037
2038.sp-cart-item.is-busy {
2039    opacity:.45;
2040
2041    pointer-events:none;
2042}
2043
2044
2045.sp-cart-item-image {
2046    display:block;
2047
2048    width:82px;
2049
2050    text-decoration:none;
2051}
2052
2053
2054.sp-cart-item-image img {
2055    display:block;
2056
2057    width:82px;
2058    height:104px;
2059
2060    object-fit:cover;
2061
2062    background:#f5f5f5;
2063}
2064
2065
2066.sp-cart-item-info {
2067    display:flex;
2068
2069    min-width:0;
2070
2071    padding-right:22px;
2072
2073    flex-direction:column;
2074}
2075
2076
2077.sp-cart-item-name {
2078    display:block;
2079
2080    margin:1px 0 8px;
2081
2082    font-family:
2083        "helvetica-neue-world",
2084        Pretendard,
2085        Arial,
2086        sans-serif;
2087
2088    font-size:11px;
2089
2090    line-height:1.45;
2091
2092    color:#000;
2093
2094    text-decoration:none;
2095}
2096
2097
2098.sp-cart-item-option {
2099    display:block;
2100
2101    margin:0 0 15px;
2102
2103    font-family:
2104        "helvetica-neue-world",
2105        Pretendard,
2106        Arial,
2107        sans-serif;
2108
2109    font-size:9px;
2110
2111    line-height:1.5;
2112
2113    color:#666;
2114}
2115
2116
2117.sp-cart-item-option:empty {
2118    display:none;
2119}
2120
2121
2122.sp-cart-remove {
2123    position:absolute;
2124
2125    top:14px;
2126    right:14px;
2127
2128    width:20px;
2129    height:20px;
2130
2131    padding:0;
2132
2133    border:0;
2134
2135    background:transparent;
2136
2137    cursor:pointer;
2138}
2139
2140
2141.sp-cart-remove::before,
2142.sp-cart-remove::after {
2143    content:"";
2144
2145    position:absolute;
2146
2147    top:50%;
2148    left:50%;
2149
2150    width:13px;
2151    height:1px;
2152
2153    background:#000;
2154}
2155
2156
2157.sp-cart-remove::before {
2158    transform:translate(-50%,-50%) rotate(45deg);
2159}
2160
2161
2162.sp-cart-remove::after {
2163    transform:translate(-50%,-50%) rotate(-45deg);
2164}
2165
2166
2167
2168/* =========================================================
2169   CART ITEM BOTTOM
2170========================================================= */
2171
2172.sp-cart-item-bottom {
2173    display:flex;
2174
2175    margin-top:auto;
2176
2177    align-items:center;
2178    justify-content:space-between;
2179
2180    gap:12px;
2181}
2182
2183
2184.sp-cart-qty-control {
2185    display:flex;
2186
2187    height:27px;
2188
2189    align-items:center;
2190
2191    border:1px solid #bbb;
2192}
2193
2194
2195.sp-cart-qty-button {
2196    display:flex;
2197
2198    width:27px;
2199    height:25px;
2200
2201    padding:0;
2202
2203    align-items:center;
2204    justify-content:center;
2205
2206    border:0;
2207
2208    background:#fff;
2209
2210    font-family:Arial,sans-serif;
2211
2212    font-size:12px;
2213
2214    color:#000;
2215
2216    cursor:pointer;
2217}
2218
2219
2220.sp-cart-qty-input {
2221    width:32px;
2222    height:25px;
2223
2224    padding:0;
2225
2226    border:0;
2227
2228    border-left:1px solid #ddd;
2229    border-right:1px solid #ddd;
2230
2231    outline:0;
2232
2233    background:#fff;
2234
2235    font-family:
2236        "helvetica-neue-world",
2237        Arial,
2238        sans-serif;
2239
2240    font-size:9px;
2241
2242    text-align:center;
2243
2244    color:#000;
2245
2246    -moz-appearance:textfield;
2247}
2248
2249
2250.sp-cart-qty-input::-webkit-inner-spin-button,
2251.sp-cart-qty-input::-webkit-outer-spin-button {
2252    margin:0;
2253
2254    -webkit-appearance:none;
2255}
2256
2257
2258.sp-cart-item-price {
2259    margin-left:auto;
2260
2261    font-family:
2262        "helvetica-neue-world",
2263        Pretendard,
2264        Arial,
2265        sans-serif;
2266
2267    font-size:10px;
2268
2269    color:#000;
2270
2271    white-space:nowrap;
2272}
2273
2274
2275
2276/* =========================================================
2277   CART FOOTER
2278========================================================= */
2279
2280.sp-cart-footer {
2281    flex:0 0 auto;
2282
2283    width:100%;
2284
2285    padding:17px 18px 19px;
2286
2287    border-top:1px solid #000;
2288
2289    background:#fff;
2290}
2291
2292
2293.sp-cart-total {
2294    display:flex;
2295
2296    width:100%;
2297
2298    margin-bottom:16px;
2299
2300    align-items:center;
2301    justify-content:space-between;
2302
2303    font-family:
2304        "helvetica-neue-world",
2305        Pretendard,
2306        Arial,
2307        sans-serif;
2308
2309    font-size:11px;
2310}
2311
2312
2313.sp-cart-total strong {
2314    font-size:12px;
2315
2316    font-weight:400;
2317}
2318
2319
2320.sp-cart-checkout {
2321    display:flex;
2322
2323    width:100%;
2324    height:42px;
2325
2326    padding:0;
2327
2328    align-items:center;
2329    justify-content:center;
2330
2331    border:1px solid #000;
2332
2333    background:#000;
2334
2335    color:#fff;
2336
2337    font-family:
2338        "helvetica-neue-world",
2339        Arial,
2340        sans-serif;
2341
2342    font-size:11px;
2343
2344    cursor:pointer;
2345
2346    transition:
2347        background .2s ease,
2348        color .2s ease;
2349}
2350
2351
2352.sp-cart-checkout:hover:not(:disabled) {
2353    background:#fff;
2354
2355    color:#000;
2356}
2357
2358
2359.sp-cart-checkout:disabled {
2360    opacity:.35;
2361
2362    cursor:default;
2363}
2364
2365
2366
2367/* =========================================================
2368   CART ENGINE
2369========================================================= */
2370
2371.sp-cart-engine {
2372    position:fixed !important;
2373
2374    top:0 !important;
2375    left:-100000px !important;
2376
2377    width:1280px !important;
2378    height:900px !important;
2379
2380    border:0 !important;
2381
2382    opacity:0 !important;
2383
2384    pointer-events:none !important;
2385}
2386
2387
2388
2389/* =========================================================
2390   MOBILE
2391========================================================= */
2392
2393.sp-mobile-menu-button,
2394.sp-mobile-menu {
2395    display:none;
2396}
2397
2398
2399@media screen and (max-width:900px) {
2400
2401    body {
2402        padding-top:48px !important;
2403    }
2404
2405
2406    #spHeader,
2407    .sp-header-inner {
2408        height:48px !important;
2409    }
2410
2411
2412    .sp-header-inner {
2413        padding:0 14px;
2414    }
2415
2416
2417    .sp-header-left {
2418        display:none;
2419    }
2420
2421
2422    .sp-header-logo img {
2423        width:98px !important;
2424        height:21px !important;
2425    }
2426
2427
2428    .sp-header-right {
2429        gap:13px;
2430    }
2431
2432
2433    .sp-header-icon,
2434    .sp-header-icon svg {
2435        width:18px;
2436        height:18px;
2437    }
2438
2439
2440    .sp-mobile-menu-button {
2441        display:flex;
2442
2443        width:21px;
2444        height:16px;
2445
2446        padding:0;
2447
2448        flex-direction:column;
2449
2450        justify-content:space-between;
2451
2452        border:0;
2453
2454        background:transparent;
2455
2456        cursor:pointer;
2457    }
2458
2459
2460    .sp-mobile-menu-button span {
2461        display:block;
2462
2463        width:100%;
2464        height:1px;
2465
2466        background:#000;
2467    }
2468
2469
2470    .sp-shop-dropdown {
2471        display:none;
2472    }
2473
2474
2475    .sp-mobile-menu {
2476        position:fixed;
2477
2478        top:48px;
2479        left:0;
2480
2481        width:100%;
2482
2483        max-height:calc(100vh - 48px);
2484
2485        padding:23px 14px 30px;
2486
2487        flex-direction:column;
2488
2489        gap:20px;
2490
2491        overflow-y:auto;
2492
2493        background:#fff;
2494    }
2495
2496
2497    #spHeader.sp-menu-open .sp-mobile-menu {
2498        display:flex;
2499    }
2500
2501
2502    .sp-mobile-menu > a,
2503    .sp-mobile-shop-head > a {
2504        font-family:
2505            "helvetica-neue-world",
2506            Helvetica,
2507            Arial,
2508            sans-serif;
2509
2510        font-size:12px;
2511
2512        color:#000;
2513
2514        text-decoration:none;
2515    }
2516
2517
2518    .sp-mobile-shop-head {
2519        display:flex;
2520
2521        align-items:center;
2522        justify-content:space-between;
2523    }
2524
2525
2526    .sp-mobile-shop-button {
2527        padding:0;
2528
2529        border:0;
2530
2531        background:transparent;
2532
2533        color:#000;
2534
2535        font-size:16px;
2536
2537        cursor:pointer;
2538    }
2539
2540
2541    .sp-mobile-shop-root {
2542        display:none !important;
2543
2544        margin:18px 0 0 !important;
2545
2546        padding:0 0 0 12px !important;
2547
2548        flex-direction:column;
2549
2550        gap:17px;
2551
2552        list-style:none !important;
2553    }
2554
2555
2556    .sp-mobile-shop.sp-mobile-shop-open
2557    .sp-mobile-shop-root {
2558        display:flex !important;
2559    }
2560
2561
2562    .sp-mobile-shop-root > li > a {
2563        font-family:
2564            "helvetica-neue-world",
2565            Helvetica,
2566            Arial,
2567            sans-serif;
2568
2569        font-size:11px;
2570
2571        color:#000;
2572
2573        text-decoration:none;
2574    }
2575
2576}
2577
2578
2579@media screen and (max-width:700px) {
2580
2581    .sp-search-center {
2582        width:calc(100vw - 32px);
2583
2584        padding-top:38px;
2585    }
2586
2587
2588    .sp-search-input {
2589        font-size:16px !important;
2590    }
2591
2592
2593    .sp-cart-panel {
2594        width:calc(100vw - 28px);
2595
2596        max-width:none;
2597    }
2598
2599
2600    .sp-cart-head {
2601        height:52px;
2602
2603        flex-basis:52px;
2604
2605        padding:0 14px;
2606    }
2607
2608
2609    .sp-cart-item {
2610        grid-template-columns:72px minmax(0,1fr);
2611
2612        gap:13px;
2613
2614        padding:15px 14px;
2615    }
2616
2617
2618    .sp-cart-item-image,
2619    .sp-cart-item-image img {
2620        width:72px;
2621    }
2622
2623
2624    .sp-cart-item-image img {
2625        height:92px;
2626    }
2627
2628
2629    .sp-cart-footer {
2630        padding:15px 14px 17px;
2631    }
2632
2633}
2634
2635</style>
2636
2637
2638
2639<script>
2640(function () {
2641
2642    'use strict';
2643
2644
2645    /* =====================================================
2646       HEADER CATEGORY
2647    ===================================================== */
2648
2649    var header = document.getElementById('spHeader');
2650
2651
2652    function getCateNo(href) {
2653
2654        if (!href) {
2655            return null;
2656        }
2657
2658
2659        var query = href.match(
2660            /(?:\?|&)cate_no=(\d+)/
2661        );
2662
2663
2664        if (query) {
2665            return Number(query[1]);
2666        }
2667
2668
2669        var path = href.match(
2670            /\/(\d+)\/?(?:\?.*)?$/
2671        );
2672
2673
2674        return path
2675            ? Number(path[1])
2676            : null;
2677
2678    }
2679
2680
2681
2682    function buildCategoryTree(root, data) {
2683
2684        if (!root || !Array.isArray(data)) {
2685            return;
2686        }
2687
2688
2689        var byNo = {};
2690        var byParent = {};
2691
2692
2693        data.forEach(function (item) {
2694
2695            var no = Number(item.cate_no);
2696            var parent = Number(item.parent_cate_no);
2697
2698
2699            byNo[no] = item;
2700
2701
2702            if (!byParent[parent]) {
2703                byParent[parent] = [];
2704            }
2705
2706
2707            byParent[parent].push(item);
2708
2709        });
2710
2711
2712
2713        Array.prototype.forEach.call(
2714            root.children,
2715            function (li) {
2716
2717                var anchor =
2718                    li.children.length
2719                    ? li.children[0]
2720                    : null;
2721
2722
2723                if (!anchor || anchor.tagName !== 'A') {
2724                    return;
2725                }
2726
2727
2728                var cateNo =
2729                    getCateNo(
2730                        anchor.getAttribute('href')
2731                    );
2732
2733
2734                if (!cateNo) {
2735                    return;
2736                }
2737
2738
2739                if (cateNo === 96) {
2740
2741                    li.style.display = 'none';
2742
2743                    return;
2744
2745                }
2746
2747
2748                if (
2749                    byNo[cateNo] &&
2750                    byNo[cateNo].name
2751                ) {
2752
2753                    anchor.textContent =
2754                        byNo[cateNo].name;
2755
2756                }
2757
2758
2759                var children =
2760                    byParent[cateNo];
2761
2762
2763                if (!children || !children.length) {
2764                    return;
2765                }
2766
2767
2768                var ul =
2769                    document.createElement('ul');
2770
2771
2772                ul.className =
2773                    'sp-shop-children';
2774
2775
2776                children.forEach(function (child) {
2777
2778                    var childLi =
2779                        document.createElement('li');
2780
2781
2782                    var childA =
2783                        document.createElement('a');
2784
2785
2786                    childA.href =
2787                        child.link_product_list
2788                        ||
2789                        (
2790                            '/product/list.html?cate_no=' +
2791                            child.cate_no
2792                        );
2793
2794
2795                    childA.textContent =
2796                        child.name;
2797
2798
2799                    childLi.appendChild(childA);
2800
2801                    ul.appendChild(childLi);
2802
2803                });
2804
2805
2806                li.appendChild(ul);
2807
2808            }
2809        );
2810
2811    }
2812
2813
2814
2815    if (header) {
2816
2817        fetch(
2818            '/exec/front/Product/SubCategory',
2819            {
2820                credentials:'same-origin'
2821            }
2822        )
2823        .then(function (response) {
2824            return response.json();
2825        })
2826        .then(function (data) {
2827
2828            buildCategoryTree(
2829                header.querySelector('.sp-shop-root'),
2830                data
2831            );
2832
2833
2834            buildCategoryTree(
2835                header.querySelector('.sp-mobile-shop-root'),
2836                data
2837            );
2838
2839        })
2840        .catch(function () {});
2841
2842
2843        var mobileButton =
2844            header.querySelector(
2845                '.sp-mobile-menu-button'
2846            );
2847
2848
2849        if (mobileButton) {
2850
2851            mobileButton.addEventListener(
2852                'click',
2853                function () {
2854
2855                    var open =
2856                        !header.classList.contains(
2857                            'sp-menu-open'
2858                        );
2859
2860
2861                    header.classList.toggle(
2862                        'sp-menu-open',
2863                        open
2864                    );
2865
2866
2867                    mobileButton.setAttribute(
2868                        'aria-expanded',
2869                        open ? 'true' : 'false'
2870                    );
2871
2872                }
2873            );
2874
2875        }
2876
2877
2878        var mobileShop =
2879            header.querySelector(
2880                '.sp-mobile-shop'
2881            );
2882
2883
2884        var mobileShopButton =
2885            header.querySelector(
2886                '.sp-mobile-shop-button'
2887            );
2888
2889
2890        if (mobileShop && mobileShopButton) {
2891
2892            mobileShopButton.addEventListener(
2893                'click',
2894                function () {
2895
2896                    var open =
2897                        !mobileShop.classList.contains(
2898                            'sp-mobile-shop-open'
2899                        );
2900
2901
2902                    mobileShop.classList.toggle(
2903                        'sp-mobile-shop-open',
2904                        open
2905                    );
2906
2907
2908                    mobileShopButton.textContent =
2909                        open ? '−' : '+';
2910
2911                }
2912            );
2913
2914        }
2915
2916    }
2917
2918
2919
2920    /* =====================================================
2921       SEARCH
2922    ===================================================== */
2923
2924    var searchOverlay =
2925        document.getElementById(
2926            'spSearchOverlay'
2927        );
2928
2929
2930    var searchClose =
2931        document.getElementById(
2932            'spSearchClose'
2933        );
2934
2935
2936    var searchInput =
2937        document.getElementById(
2938            'spSearchInput'
2939        );
2940
2941
2942    function openSearch() {
2943
2944        if (!searchOverlay) {
2945            return;
2946        }
2947
2948
2949        searchOverlay.classList.add(
2950            'is-open'
2951        );
2952
2953
2954        searchOverlay.setAttribute(
2955            'aria-hidden',
2956            'false'
2957        );
2958
2959
2960        document.documentElement.style.overflow =
2961            'hidden';
2962
2963
2964        document.body.style.overflow =
2965            'hidden';
2966
2967
2968        setTimeout(function () {
2969
2970            if (searchInput) {
2971                searchInput.focus();
2972            }
2973
2974        }, 180);
2975
2976    }
2977
2978
2979
2980    function closeSearch() {
2981
2982        if (!searchOverlay) {
2983            return;
2984        }
2985
2986
2987        searchOverlay.classList.remove(
2988            'is-open'
2989        );
2990
2991
2992        searchOverlay.setAttribute(
2993            'aria-hidden',
2994            'true'
2995        );
2996
2997
2998        document.documentElement.style.overflow =
2999            '';
3000
3001
3002        document.body.style.overflow =
3003            '';
3004
3005    }
3006
3007
3008
3009    document.addEventListener(
3010        'click',
3011        function (event) {
3012
3013            var trigger =
3014                event.target.closest(
3015                    '.sp-search-trigger'
3016                );
3017
3018
3019            if (!trigger) {
3020                return;
3021            }
3022
3023
3024            event.preventDefault();
3025
3026            openSearch();
3027
3028        },
3029        true
3030    );
3031
3032
3033    if (searchClose) {
3034
3035        searchClose.addEventListener(
3036            'click',
3037            closeSearch
3038        );
3039
3040    }
3041
3042
3043    if (searchOverlay) {
3044
3045        searchOverlay.addEventListener(
3046            'click',
3047            function (event) {
3048
3049                if (
3050                    event.target ===
3051                    searchOverlay
3052                ) {
3053
3054                    closeSearch();
3055
3056                }
3057
3058            }
3059        );
3060
3061    }
3062
3063
3064
3065    /* =====================================================
3066       ESC
3067    ===================================================== */
3068
3069    document.addEventListener(
3070        'keydown',
3071        function (event) {
3072
3073            if (event.key !== 'Escape') {
3074                return;
3075            }
3076
3077
3078            closeSearch();
3079
3080        }
3081    );
3082
3083
3084})();
3085</script>
3085
3086
3087
3088
3089<script>
3090(function () {
3091
3092    'use strict';
3093
3094
3095
3096    /* =====================================================
3097       DO NOT RUN CART ENGINE INSIDE CART ENGINE
3098    ===================================================== */
3099
3100    if (
3101        window.self !== window.top &&
3102        /(?:\?|&)sp_cart_engine=1(?:&|$)/
3103            .test(window.location.search)
3104    ) {
3105        return;
3106    }
3107
3108
3109
3110    /* =====================================================
3111       ELEMENTS
3112    ===================================================== */
3113
3114    var drawer =
3115        document.getElementById(
3116            'spCartDrawer'
3117        );
3118
3119
3120    var cartBody =
3121        document.getElementById(
3122            'spCartBody'
3123        );
3124
3125
3126    var totalElement =
3127        document.getElementById(
3128            'spCartTotal'
3129        );
3130
3131
3132    var countElement =
3133        document.getElementById(
3134            'spCartCount'
3135        );
3136
3137
3138    var checkoutButton =
3139        document.getElementById(
3140            'spCartCheckout'
3141        );
3142
3143
3144    var closeButton =
3145        document.getElementById(
3146            'spCartClose'
3147        );
3148
3149
3150    var backdrop =
3151        document.getElementById(
3152            'spCartBackdrop'
3153        );
3154
3155
3156    var engine =
3157        document.getElementById(
3158            'spCartEngine'
3159        );
3160
3161
3162    if (
3163        !drawer ||
3164        !cartBody ||
3165        !engine
3166    ) {
3167        return;
3168    }
3169
3170
3171
3172    /* =====================================================
3173       STATE
3174    ===================================================== */
3175
3176    var engineItems = [];
3177
3178    var engineReady = false;
3179
3180    var currentCartQuantity = 0;
3181
3182    var reloadTimer = null;
3183
3184    var addPending = false;
3185
3186    var addBaseline = 0;
3187
3188    var addTimers = [];
3189
3190
3191
3192    /* =====================================================
3193       UTIL
3194    ===================================================== */
3195
3196    function cleanText(value) {
3197
3198        return String(value || '')
3199            .replace(/\u00a0/g,' ')
3200            .replace(/\s+/g,' ')
3201            .trim();
3202
3203    }
3204
3205
3206
3207    function escapeHtml(value) {
3208
3209        return String(value || '')
3210            .replace(/&/g,'&amp;')
3211            .replace(/</g,'&lt;')
3212            .replace(/>/g,'&gt;')
3213            .replace(/"/g,'&quot;')
3214            .replace(/'/g,'&#039;');
3215
3216    }
3217
3218
3219
3220    function absoluteUrl(url) {
3221
3222        if (!url) {
3223            return '';
3224        }
3225
3226
3227        try {
3228
3229            return new URL(
3230                url,
3231                window.location.origin
3232            ).href;
3233
3234        } catch (e) {
3235
3236            return url;
3237
3238        }
3239
3240    }
3241
3242
3243
3244    function numberOnly(value) {
3245
3246        var match =
3247            String(value || '')
3248                .replace(/,/g,'')
3249                .match(/\d+/);
3250
3251
3252        return match
3253            ? parseInt(match[0],10) || 0
3254            : 0;
3255
3256    }
3257
3258
3259
3260    function frameDoc() {
3261
3262        try {
3263
3264            return engine.contentDocument
3265                ||
3266                engine.contentWindow.document;
3267
3268        } catch (e) {
3269
3270            return null;
3271
3272        }
3273
3274    }
3275
3276
3277
3278    function frameWindow() {
3279
3280        try {
3281
3282            return engine.contentWindow;
3283
3284        } catch (e) {
3285
3286            return null;
3287
3288        }
3289
3290    }
3291
3292
3293
3294    function controlText(control) {
3295
3296        if (!control) {
3297            return '';
3298        }
3299
3300
3301        var text =
3302            cleanText(
3303                control.textContent
3304            );
3305
3306
3307        var images =
3308            control.querySelectorAll('img');
3309
3310
3311        Array.prototype.forEach.call(
3312            images,
3313            function (img) {
3314
3315                text +=
3316                    ' ' +
3317                    cleanText(
3318                        img.getAttribute('alt')
3319                        ||
3320                        img.getAttribute('title')
3321                    );
3322
3323            }
3324        );
3325
3326
3327        return cleanText(text);
3328
3329    }
3330
3331
3332
3333    /* =====================================================
3334       FIND CART ITEMS
3335    ===================================================== */
3336
3337    function collectNativeCards(doc) {
3338
3339        if (!doc || !doc.body) {
3340            return [];
3341        }
3342
3343
3344        var scope =
3345            doc.querySelector(
3346                '.xans-order-basketpackage'
3347            )
3348            ||
3349            doc.querySelector(
3350                '[class*="order-basket"]'
3351            )
3352            ||
3353            doc.querySelector(
3354                '#contents'
3355            )
3356            ||
3357            doc.body;
3358
3359
3360        var selectors = [
3361
3362            '.ec-base-prdInfo',
3363
3364            '.prdInfo',
3365
3366            '.basketItem',
3367
3368            'tbody tr',
3369
3370            'li.item'
3371
3372        ];
3373
3374
3375        var cards = [];
3376        var seen = [];
3377
3378
3379        selectors.forEach(
3380            function (selector) {
3381
3382                var candidates =
3383                    scope.querySelectorAll(
3384                        selector
3385                    );
3386
3387
3388                Array.prototype.forEach.call(
3389                    candidates,
3390                    function (card) {
3391
3392                        if (
3393                            seen.indexOf(card) !== -1
3394                        ) {
3395                            return;
3396                        }
3397
3398
3399                        var productLink =
3400                            card.querySelector(
3401                                '.prdName a,' +
3402                                'a[href*="/product/detail"],' +
3403                                'a[href*="/product/"]'
3404                            );
3405
3406
3407                        var image =
3408                            card.querySelector(
3409                                '.thumbnail img,' +
3410                                '.thumb img,' +
3411                                'a[href*="/product/"] img'
3412                            );
3413
3414
3415                        if (
3416                            !productLink ||
3417                            !image
3418                        ) {
3419                            return;
3420                        }
3421
3422
3423                        seen.push(card);
3424
3425                        cards.push(card);
3426
3427                    }
3428                );
3429
3430            }
3431        );
3432
3433
3434        return cards;
3435
3436    }
3437
3438
3439
3440    function findNameLink(card) {
3441
3442        var preferred =
3443            card.querySelector(
3444                '.prdName a,' +
3445                '.name a'
3446            );
3447
3448
3449        if (
3450            preferred &&
3451            cleanText(preferred.textContent)
3452        ) {
3453
3454            return preferred;
3455
3456        }
3457
3458
3459        var links =
3460            card.querySelectorAll(
3461                'a[href*="/product/"]'
3462            );
3463
3464
3465        for (
3466            var i = 0;
3467            i < links.length;
3468            i++
3469        ) {
3470
3471            if (
3472                cleanText(
3473                    links[i].textContent
3474                )
3475            ) {
3476
3477                return links[i];
3478
3479            }
3480
3481        }
3482
3483
3484        return null;
3485
3486    }
3487
3488
3489
3490    function findImage(card) {
3491
3492        return card.querySelector(
3493            '.thumbnail img,' +
3494            '.thumb img,' +
3495            'a[href*="/product/"] img,' +
3496            'img'
3497        );
3498
3499    }
3500
3501
3502
3503    function findQuantityInput(card) {
3504
3505        var inputs =
3506            card.querySelectorAll(
3507                '.quantity input,' +
3508                'input[name*="quantity"],' +
3509                'input[id*="quantity"],' +
3510                'input[class*="quantity"]'
3511            );
3512
3513
3514        for (
3515            var i = 0;
3516            i < inputs.length;
3517            i++
3518        ) {
3519
3520            var type =
3521                (
3522                    inputs[i].getAttribute('type')
3523                    ||
3524                    'text'
3525                ).toLowerCase();
3526
3527
3528            if (
3529                type !== 'hidden'
3530            ) {
3531
3532                return inputs[i];
3533
3534            }
3535
3536        }
3537
3538
3539        return null;
3540
3541    }
3542
3543
3544
3545    function findQuantity(card) {
3546
3547        var input =
3548            findQuantityInput(card);
3549
3550
3551        if (!input) {
3552            return 1;
3553        }
3554
3555
3556        return Math.max(
3557            1,
3558            numberOnly(input.value)
3559        );
3560
3561    }
3562
3563
3564
3565    function findOption(card) {
3566
3567        var selectors = [
3568
3569            '.optionGroup .optionStr',
3570
3571            '.option > li',
3572
3573            '.optionList > li',
3574
3575            '.option'
3576
3577        ];
3578
3579
3580        var result = [];
3581
3582
3583        selectors.forEach(
3584            function (selector) {
3585
3586                var nodes =
3587                    card.querySelectorAll(
3588                        selector
3589                    );
3590
3591
3592                Array.prototype.forEach.call(
3593                    nodes,
3594                    function (node) {
3595
3596                        var clone =
3597                            node.cloneNode(true);
3598
3599
3600                        var remove =
3601                            clone.querySelectorAll(
3602                                'a,button,script'
3603                            );
3604
3605
3606                        Array.prototype.forEach.call(
3607                            remove,
3608                            function (item) {
3609
3610                                if (item.parentNode) {
3611
3612                                    item.parentNode.removeChild(
3613                                        item
3614                                    );
3615
3616                                }
3617
3618                            }
3619                        );
3620
3621
3622                        var text =
3623                            cleanText(
3624                                clone.textContent
3625                            )
3626                            .replace(
3627                                /\(\s*\d+\s*개\s*\)/g,
3628                                ''
3629                            );
3630
3631
3632                        text =
3633                            cleanText(text);
3634
3635
3636                        if (
3637                            text &&
3638                            result.indexOf(text) === -1
3639                        ) {
3640
3641                            result.push(text);
3642
3643                        }
3644
3645                    }
3646                );
3647
3648            }
3649        );
3650
3651
3652        return result.join(' / ');
3653
3654    }
3655
3656
3657
3658    function findPrice(card) {
3659
3660        var selectors = [
3661
3662            '.sumPrice strong',
3663
3664            '.sumPrice',
3665
3666            'td.total strong',
3667
3668            '.total strong',
3669
3670            '.salePrice',
3671
3672            '.discountPrice',
3673
3674            '.price strong',
3675
3676            '.price'
3677
3678        ];
3679
3680
3681        for (
3682            var i = 0;
3683            i < selectors.length;
3684            i++
3685        ) {
3686
3687            var nodes =
3688                card.querySelectorAll(
3689                    selectors[i]
3690                );
3691
3692
3693            for (
3694                var j = 0;
3695                j < nodes.length;
3696                j++
3697            ) {
3698
3699                var text =
3700                    cleanText(
3701                        nodes[j].textContent
3702                    );
3703
3704
3705                if (
3706                    numberOnly(text) > 0
3707                ) {
3708
3709                    return text;
3710
3711                }
3712
3713            }
3714
3715        }
3716
3717
3718        return '';
3719
3720    }
3721
3722
3723
3724    function extractItems(doc) {
3725
3726        var cards =
3727            collectNativeCards(doc);
3728
3729
3730        var items = [];
3731
3732
3733        cards.forEach(
3734            function (card) {
3735
3736                var link =
3737                    findNameLink(card);
3738
3739
3740                var image =
3741                    findImage(card);
3742
3743
3744                if (!link || !image) {
3745                    return;
3746                }
3747
3748
3749                var name =
3750                    cleanText(
3751                        link.textContent
3752                    )
3753                    ||
3754                    cleanText(
3755                        image.getAttribute('alt')
3756                    );
3757
3758
3759                if (!name) {
3760                    return;
3761                }
3762
3763
3764                items.push({
3765
3766                    nativeCard:card,
3767
3768                    name:name,
3769
3770                    href:
3771                        absoluteUrl(
3772                            link.getAttribute('href')
3773                        ),
3774
3775                    image:
3776                        absoluteUrl(
3777                            image.getAttribute('src')
3778                            ||
3779                            image.getAttribute('data-src')
3780                        ),
3781
3782                    option:
3783                        findOption(card),
3784
3785                    quantity:
3786                        findQuantity(card),
3787
3788                    price:
3789                        findPrice(card)
3790
3791                });
3792
3793            }
3794        );
3795
3796
3797        return items;
3798
3799    }
3800
3801
3802
3803    function extractTotal(doc) {
3804
3805        var selectors = [
3806
3807            '#total_order_price_view',
3808
3809            '#total_order_price_front',
3810
3811            '[id*="total_order_price"]',
3812
3813            '.totalSummary .paymentPrice strong',
3814
3815            '.paymentPrice strong',
3816
3817            '.xans-order-totalsummary strong'
3818
3819        ];
3820
3821
3822        for (
3823            var i = 0;
3824            i < selectors.length;
3825            i++
3826        ) {
3827
3828            var elements =
3829                doc.querySelectorAll(
3830                    selectors[i]
3831                );
3832
3833
3834            for (
3835                var j = 0;
3836                j < elements.length;
3837                j++
3838            ) {
3839
3840                var text =
3841                    cleanText(
3842                        elements[j].textContent
3843                    );
3844
3845
3846                if (
3847                    numberOnly(text) > 0
3848                ) {
3849
3850                    return text;
3851
3852                }
3853
3854            }
3855
3856        }
3857
3858
3859        return '-';
3860
3861    }
3862
3863
3864
3865    /* =====================================================
3866       CART COUNT
3867    ===================================================== */
3868
3869    function updateCartCount(items) {
3870
3871        var quantity = 0;
3872
3873
3874        items.forEach(
3875            function (item) {
3876
3877                quantity +=
3878                    Math.max(
3879                        1,
3880                        parseInt(
3881                            item.quantity,
3882                            10
3883                        ) || 1
3884                    );
3885
3886            }
3887        );
3888
3889
3890        currentCartQuantity =
3891            quantity;
3892
3893
3894        if (!countElement) {
3895            return;
3896        }
3897
3898
3899        if (quantity <= 0) {
3900
3901            countElement.textContent = '';
3902
3903            countElement.classList.remove(
3904                'is-visible'
3905            );
3906
3907            return;
3908
3909        }
3910
3911
3912        countElement.textContent =
3913            quantity > 99
3914                ? '99+'
3915                : String(quantity);
3916
3917
3918        countElement.classList.add(
3919            'is-visible'
3920        );
3921
3922    }
3923
3924
3925
3926    /* =====================================================
3927       RENDER
3928    ===================================================== */
3929
3930    function renderCart(items,total) {
3931
3932        updateCartCount(items);
3933
3934
3935        checkoutButton.disabled =
3936            !items.length;
3937
3938
3939        if (!items.length) {
3940
3941            cartBody.innerHTML =
3942                '<div class="sp-cart-empty">' +
3943                    '장바구니에 담긴 상품이 없습니다.' +
3944                '</div>';
3945
3946
3947            totalElement.textContent =
3948                '₩0';
3949
3950
3951            return;
3952
3953        }
3954
3955
3956        var html = '';
3957
3958
3959        items.forEach(
3960            function (item,index) {
3961
3962                html +=
3963
3964                    '<article class="sp-cart-item" data-cart-item="' +
3965                    index +
3966                    '">' +
3967
3968
3969                        '<button type="button"' +
3970                            ' class="sp-cart-remove"' +
3971                            ' data-cart-remove="' +
3972                            index +
3973                            '"' +
3974                            ' aria-label="Remove">' +
3975                        '</button>' +
3976
3977
3978                        '<a class="sp-cart-item-image"' +
3979                            ' href="' +
3980                            escapeHtml(item.href) +
3981                            '">' +
3982
3983                            '<img src="' +
3984                                escapeHtml(item.image) +
3985                                '" alt loading="lazy" ez-prevent="img">' +
3986
3987                        '</a>' +
3988
3989
3990                        '<div class="sp-cart-item-info">' +
3991
3992
3993                            '<a class="sp-cart-item-name"' +
3994                                ' href="' +
3995                                escapeHtml(item.href) +
3996                                '">' +
3997
3998                                escapeHtml(item.name) +
3999
4000                            '</a>' +
4001
4002
4003                            '<span class="sp-cart-item-option">' +
4004                                escapeHtml(item.option) +
4005                            '</span>' +
4006
4007
4008                            '<div class="sp-cart-item-bottom">' +
4009
4010
4011                                '<div class="sp-cart-qty-control">' +
4012
4013                                    '<button type="button"' +
4014                                        ' class="sp-cart-qty-button"' +
4015                                        ' data-cart-minus="' +
4016                                        index +
4017                                        '">' +
4018                                        '−' +
4019                                    '</button>' +
4020
4021                                    '<input type="number"' +
4022                                        ' min="1"' +
4023                                        ' class="sp-cart-qty-input"' +
4024                                        ' data-cart-qty="' +
4025                                        index +
4026                                        '"' +
4027                                        ' value="' +
4028                                        item.quantity +
4029                                        '">' +
4030
4031                                    '<button type="button"' +
4032                                        ' class="sp-cart-qty-button"' +
4033                                        ' data-cart-plus="' +
4034                                        index +
4035                                        '">' +
4036                                        '+' +
4037                                    '</button>' +
4038
4039                                '</div>' +
4040
4041
4042                                '<span class="sp-cart-item-price">' +
4043                                    escapeHtml(item.price) +
4044                                '</span>' +
4045
4046
4047                            '</div>' +
4048
4049
4050                        '</div>' +
4051
4052
4053                    '</article>';
4054
4055            }
4056        );
4057
4058
4059        cartBody.innerHTML =
4060            html;
4061
4062
4063        totalElement.textContent =
4064            total || '-';
4065
4066    }
4067
4068
4069
4070    /* =====================================================
4071       ENGINE
4072    ===================================================== */
4073
4074    function syncEngine() {
4075
4076        var doc =
4077            frameDoc();
4078
4079
4080        if (!doc || !doc.body) {
4081            return;
4082        }
4083
4084
4085        engineItems =
4086            extractItems(doc);
4087
4088
4089        renderCart(
4090            engineItems,
4091            extractTotal(doc)
4092        );
4093
4094    }
4095
4096
4097
4098    function reloadEngine() {
4099
4100        engineReady = false;
4101
4102
4103        engine.src =
4104            '/order/basket.html' +
4105            '?delvtype=A' +
4106            '&sp_cart_engine=1' +
4107            '&sp_time=' +
4108            Date.now();
4109
4110    }
4111
4112
4113
4114    function scheduleReload(delay) {
4115
4116        if (reloadTimer) {
4117
4118            clearTimeout(
4119                reloadTimer
4120            );
4121
4122        }
4123
4124
4125        reloadTimer =
4126            setTimeout(
4127                reloadEngine,
4128                delay || 700
4129            );
4130
4131    }
4132
4133
4134
4135    engine.addEventListener(
4136        'load',
4137        function () {
4138
4139            var win =
4140                frameWindow();
4141
4142
4143            if (!win) {
4144                return;
4145            }
4146
4147
4148            try {
4149
4150                if (
4151                    !win.location.href ||
4152                    win.location.href ===
4153                    'about:blank'
4154                ) {
4155                    return;
4156                }
4157
4158            } catch (e) {
4159
4160                return;
4161
4162            }
4163
4164
4165            engineReady = true;
4166
4167            syncEngine();
4168
4169        }
4170    );
4171
4172
4173
4174    /* =====================================================
4175       OPEN / CLOSE
4176    ===================================================== */
4177
4178    function lockPage() {
4179
4180        document.documentElement.style.overflow =
4181            'hidden';
4182
4183
4184        document.body.style.overflow =
4185            'hidden';
4186
4187    }
4188
4189
4190
4191    function unlockPage() {
4192
4193        document.documentElement.style.overflow =
4194            '';
4195
4196
4197        document.body.style.overflow =
4198            '';
4199
4200    }
4201
4202
4203
4204    function showCart() {
4205
4206        drawer.classList.add(
4207            'is-open'
4208        );
4209
4210
4211        drawer.setAttribute(
4212            'aria-hidden',
4213            'false'
4214        );
4215
4216
4217        lockPage();
4218
4219    }
4220
4221
4222
4223    function openCart() {
4224
4225        showCart();
4226
4227
4228        cartBody.innerHTML =
4229            '<div class="sp-cart-loading">' +
4230                'LOADING' +
4231            '</div>';
4232
4233
4234        totalElement.textContent =
4235            '-';
4236
4237
4238        reloadEngine();
4239
4240    }
4241
4242
4243
4244    function closeCart() {
4245
4246        drawer.classList.remove(
4247            'is-open'
4248        );
4249
4250
4251        drawer.setAttribute(
4252            'aria-hidden',
4253            'true'
4254        );
4255
4256
4257        unlockPage();
4258
4259    }
4260
4261
4262
4263    /* =====================================================
4264       QUANTITY CHANGE
4265    ===================================================== */
4266
4267    function findQuantityModify(
4268        card,
4269        input
4270    ) {
4271
4272        var scope =
4273            input.closest('.quantity')
4274            ||
4275            input.parentNode
4276            ||
4277            card;
4278
4279
4280        var direct =
4281            scope.querySelector(
4282                '.sizeQty'
4283            );
4284
4285
4286        if (direct) {
4287            return direct;
4288        }
4289
4290
4291        var buttons =
4292            scope.querySelectorAll(
4293                'a,button'
4294            );
4295
4296
4297        for (
4298            var i = 0;
4299            i < buttons.length;
4300            i++
4301        ) {
4302
4303            var label =
4304                controlText(
4305                    buttons[i]
4306                );
4307
4308
4309            if (
4310                label === '변경' ||
4311                label.indexOf('수량변경') !== -1
4312            ) {
4313
4314                return buttons[i];
4315
4316            }
4317
4318        }
4319
4320
4321        return null;
4322
4323    }
4324
4325
4326
4327    function changeQuantity(
4328        index,
4329        quantity
4330    ) {
4331
4332        var item =
4333            engineItems[index];
4334
4335
4336        if (!item) {
4337            return;
4338        }
4339
4340
4341        quantity =
4342            Math.max(
4343                1,
4344                parseInt(quantity,10) || 1
4345            );
4346
4347
4348        var input =
4349            findQuantityInput(
4350                item.nativeCard
4351            );
4352
4353
4354        if (!input) {
4355            return;
4356        }
4357
4358
4359        var drawerItem =
4360            cartBody.querySelector(
4361                '[data-cart-item="' +
4362                index +
4363                '"]'
4364            );
4365
4366
4367        if (drawerItem) {
4368
4369            drawerItem.classList.add(
4370                'is-busy'
4371            );
4372
4373        }
4374
4375
4376        input.value =
4377            quantity;
4378
4379
4380        var win =
4381            frameWindow();
4382
4383
4384        if (win) {
4385
4386            try {
4387
4388                input.dispatchEvent(
4389                    new win.Event(
4390                        'input',
4391                        {
4392                            bubbles:true
4393                        }
4394                    )
4395                );
4396
4397
4398                input.dispatchEvent(
4399                    new win.Event(
4400                        'change',
4401                        {
4402                            bubbles:true
4403                        }
4404                    )
4405                );
4406
4407            } catch (e) {}
4408
4409        }
4410
4411
4412        var modify =
4413            findQuantityModify(
4414                item.nativeCard,
4415                input
4416            );
4417
4418
4419        if (modify) {
4420
4421            modify.click();
4422
4423            scheduleReload(750);
4424
4425        } else {
4426
4427            reloadEngine();
4428
4429        }
4430
4431    }
4432
4433
4434
4435    /* =====================================================
4436       REMOVE
4437    ===================================================== */
4438
4439    function findRemove(card) {
4440
4441        var direct =
4442            card.querySelector(
4443                '.btnDelete'
4444            );
4445
4446
4447        if (direct) {
4448            return direct;
4449        }
4450
4451
4452        var controls =
4453            card.querySelectorAll(
4454                'a,button'
4455            );
4456
4457
4458        for (
4459            var i = 0;
4460            i < controls.length;
4461            i++
4462        ) {
4463
4464            var label =
4465                controlText(
4466                    controls[i]
4467                );
4468
4469
4470            if (
4471                label === '삭제' ||
4472                label.indexOf('삭제') !== -1
4473            ) {
4474
4475                return controls[i];
4476
4477            }
4478
4479        }
4480
4481
4482        return null;
4483
4484    }
4485
4486
4487
4488    function removeItem(index) {
4489
4490        var item =
4491            engineItems[index];
4492
4493
4494        if (!item) {
4495            return;
4496        }
4497
4498
4499        var remove =
4500            findRemove(
4501                item.nativeCard
4502            );
4503
4504
4505        if (!remove) {
4506
4507            window.location.href =
4508                '/order/basket.html';
4509
4510            return;
4511
4512        }
4513
4514
4515        var win =
4516            frameWindow();
4517
4518
4519        if (win) {
4520
4521            try {
4522
4523                win.confirm =
4524                    function () {
4525                        return true;
4526                    };
4527
4528            } catch (e) {}
4529
4530        }
4531
4532
4533        cartBody.innerHTML =
4534            '<div class="sp-cart-loading">' +
4535                'LOADING' +
4536            '</div>';
4537
4538
4539        remove.click();
4540
4541        scheduleReload(700);
4542
4543    }
4544
4545
4546
4547    /* =====================================================
4548       CHECKOUT
4549    ===================================================== */
4550
4551    function findCheckout(doc) {
4552
4553        var controls =
4554            doc.querySelectorAll(
4555                '.xans-order-totalorder a,' +
4556                '.xans-order-totalorder button,' +
4557                'a[link-order*="/order/orderform"],' +
4558                'a[href*="/order/orderform"]'
4559            );
4560
4561
4562        for (
4563            var i = 0;
4564            i < controls.length;
4565            i++
4566        ) {
4567
4568            var label =
4569                controlText(
4570                    controls[i]
4571                );
4572
4573
4574            if (
4575                label.indexOf(
4576                    '전체상품주문'
4577                ) !== -1
4578                ||
4579                label.indexOf(
4580                    '전체 상품 주문'
4581                ) !== -1
4582            ) {
4583
4584                return controls[i];
4585
4586            }
4587
4588        }
4589
4590
4591        return null;
4592
4593    }
4594
4595
4596
4597    function checkout() {
4598
4599        if (!engineReady) {
4600
4601            reloadEngine();
4602
4603            return;
4604
4605        }
4606
4607
4608        var doc =
4609            frameDoc();
4610
4611
4612        var button =
4613            findCheckout(doc);
4614
4615
4616        if (!button) {
4617
4618            window.location.href =
4619                '/order/basket.html';
4620
4621            return;
4622
4623        }
4624
4625
4626        var win =
4627            frameWindow();
4628
4629
4630        var before =
4631            '';
4632
4633        try {
4634
4635            before =
4636                win.location.href;
4637
4638        } catch (e) {}
4639
4640
4641        button.click();
4642
4643
4644        var tries = 0;
4645
4646
4647        var timer =
4648            setInterval(
4649                function () {
4650
4651                    tries++;
4652
4653
4654                    try {
4655
4656                        var now =
4657                            win.location.href;
4658
4659
4660                        if (
4661                            now &&
4662                            now !== before &&
4663                            now.indexOf(
4664                                '/order/basket'
4665                            ) === -1
4666                        ) {
4667
4668                            clearInterval(timer);
4669
4670                            window.location.href =
4671                                now;
4672
4673                            return;
4674
4675                        }
4676
4677                    } catch (e) {}
4678
4679
4680                    if (tries >= 20) {
4681
4682                        clearInterval(timer);
4683
4684                        window.location.href =
4685                            '/order/basket.html';
4686
4687                    }
4688
4689                },
4690                100
4691            );
4692
4693    }
4694
4695
4696
4697    /* =====================================================
4698       DRAWER EVENTS
4699    ===================================================== */
4700
4701    cartBody.addEventListener(
4702        'click',
4703        function (event) {
4704
4705            var minus =
4706                event.target.closest(
4707                    '[data-cart-minus]'
4708                );
4709
4710
4711            if (minus) {
4712
4713                var index =
4714                    parseInt(
4715                        minus.getAttribute(
4716                            'data-cart-minus'
4717                        ),
4718                        10
4719                    );
4720
4721
4722                var input =
4723                    cartBody.querySelector(
4724                        '[data-cart-qty="' +
4725                        index +
4726                        '"]'
4727                    );
4728
4729
4730                var quantity =
4731                    input
4732                        ? parseInt(input.value,10) || 1
4733                        : 1;
4734
4735
4736                quantity =
4737                    Math.max(
4738                        1,
4739                        quantity - 1
4740                    );
4741
4742
4743                if (input) {
4744                    input.value = quantity;
4745                }
4746
4747
4748                changeQuantity(
4749                    index,
4750                    quantity
4751                );
4752
4753
4754                return;
4755
4756            }
4757
4758
4759            var plus =
4760                event.target.closest(
4761                    '[data-cart-plus]'
4762                );
4763
4764
4765            if (plus) {
4766
4767                var plusIndex =
4768                    parseInt(
4769                        plus.getAttribute(
4770                            'data-cart-plus'
4771                        ),
4772                        10
4773                    );
4774
4775
4776                var plusInput =
4777                    cartBody.querySelector(
4778                        '[data-cart-qty="' +
4779                        plusIndex +
4780                        '"]'
4781                    );
4782
4783
4784                var plusQty =
4785                    plusInput
4786                        ? parseInt(
4787                            plusInput.value,
4788                            10
4789                        ) || 1
4790                        : 1;
4791
4792
4793                plusQty++;
4794
4795
4796                if (plusInput) {
4797                    plusInput.value = plusQty;
4798                }
4799
4800
4801                changeQuantity(
4802                    plusIndex,
4803                    plusQty
4804                );
4805
4806
4807                return;
4808
4809            }
4810
4811
4812            var remove =
4813                event.target.closest(
4814                    '[data-cart-remove]'
4815                );
4816
4817
4818            if (remove) {
4819
4820                var removeIndex =
4821                    parseInt(
4822                        remove.getAttribute(
4823                            'data-cart-remove'
4824                        ),
4825                        10
4826                    );
4827
4828
4829                removeItem(
4830                    removeIndex
4831                );
4832
4833            }
4834
4835        }
4836    );
4837
4838
4839
4840    cartBody.addEventListener(
4841        'change',
4842        function (event) {
4843
4844            var input =
4845                event.target.closest(
4846                    '[data-cart-qty]'
4847                );
4848
4849
4850            if (!input) {
4851                return;
4852            }
4853
4854
4855            var index =
4856                parseInt(
4857                    input.getAttribute(
4858                        'data-cart-qty'
4859                    ),
4860                    10
4861                );
4862
4863
4864            var quantity =
4865                Math.max(
4866                    1,
4867                    parseInt(
4868                        input.value,
4869                        10
4870                    ) || 1
4871                );
4872
4873
4874            input.value =
4875                quantity;
4876
4877
4878            changeQuantity(
4879                index,
4880                quantity
4881            );
4882
4883        }
4884    );
4885
4886
4887
4888    /* =====================================================
4889       HEADER CART ICON
4890    ===================================================== */
4891
4892    document.addEventListener(
4893        'click',
4894        function (event) {
4895
4896            var trigger =
4897                event.target.closest(
4898                    '.sp-cart-trigger'
4899                );
4900
4901
4902            if (!trigger) {
4903                return;
4904            }
4905
4906
4907            event.preventDefault();
4908
4909            event.stopPropagation();
4910
4911            openCart();
4912
4913        },
4914        true
4915    );
4916
4917
4918
4919    /* =====================================================
4920       CLOSE
4921    ===================================================== */
4922
4923    if (closeButton) {
4924
4925        closeButton.addEventListener(
4926            'click',
4927            closeCart
4928        );
4929
4930    }
4931
4932
4933    if (backdrop) {
4934
4935        backdrop.addEventListener(
4936            'click',
4937            closeCart
4938        );
4939
4940    }
4941
4942
4943    document.addEventListener(
4944        'keydown',
4945        function (event) {
4946
4947            if (
4948                event.key === 'Escape' &&
4949                drawer.classList.contains(
4950                    'is-open'
4951                )
4952            ) {
4953
4954                closeCart();
4955
4956            }
4957
4958        }
4959    );
4960
4961
4962
4963    /* =====================================================
4964       CHECKOUT BUTTON
4965    ===================================================== */
4966
4967    checkoutButton.addEventListener(
4968        'click',
4969        function () {
4970
4971            if (
4972                checkoutButton.disabled
4973            ) {
4974                return;
4975            }
4976
4977
4978            checkout();
4979
4980        }
4981    );
4982
4983
4984
4985    /* =====================================================
4986       ADD TO CART WATCH
4987    ===================================================== */
4988
4989    function requestBasketSnapshot() {
4990
4991        return fetch(
4992            '/order/basket.html' +
4993            '?delvtype=A' +
4994            '&sp_snapshot=' +
4995            Date.now(),
4996            {
4997                credentials:'same-origin',
4998                cache:'no-store'
4999            }
5000        )
5001        .then(function (response) {
5002
5003            if (!response.ok) {
5004
5005                throw new Error(
5006                    'basket load error'
5007                );
5008
5009            }
5010
5011
5012            return response.text();
5013
5014        })
5015        .then(function (html) {
5016
5017            var parser =
5018                new DOMParser();
5019
5020
5021            var doc =
5022                parser.parseFromString(
5023                    html,
5024                    'text/html'
5025                );
5026
5027
5028            var items =
5029                extractItems(doc);
5030
5031
5032            var quantity = 0;
5033
5034
5035            items.forEach(
5036                function (item) {
5037
5038                    quantity +=
5039                        Math.max(
5040                            1,
5041                            parseInt(
5042                                item.quantity,
5043                                10
5044                            ) || 1
5045                        );
5046
5047                }
5048            );
5049
5050
5051            return {
5052                quantity:quantity
5053            };
5054
5055        });
5056
5057    }
5058
5059
5060
5061    function clearAddTimers() {
5062
5063        addTimers.forEach(
5064            function (timer) {
5065
5066                clearTimeout(timer);
5067
5068            }
5069        );
5070
5071
5072        addTimers = [];
5073
5074    }
5075
5076
5077
5078    function finishAdd() {
5079
5080        if (!addPending) {
5081            return;
5082        }
5083
5084
5085        addPending = false;
5086
5087        clearAddTimers();
5088
5089
5090        var confirmLayer =
5091            document.getElementById(
5092                'confirmLayer'
5093            );
5094
5095
5096        if (confirmLayer) {
5097
5098            confirmLayer.style.display =
5099                'none';
5100
5101        }
5102
5103
5104        openCart();
5105
5106    }
5107
5108
5109
5110    function checkBasketChanged() {
5111
5112        if (!addPending) {
5113            return;
5114        }
5115
5116
5117        requestBasketSnapshot()
5118        .then(function (result) {
5119
5120            if (
5121                result.quantity >
5122                addBaseline
5123            ) {
5124
5125                finishAdd();
5126
5127            }
5128
5129        })
5130        .catch(function () {});
5131
5132    }
5133
5134
5135
5136    function startAddWatch() {
5137
5138        addPending = true;
5139
5140        addBaseline =
5141            currentCartQuantity;
5142
5143
5144        clearAddTimers();
5145
5146
5147        [
5148            250,
5149            450,
5150            700,
5151            1000,
5152            1400,
5153            2000,
5154            2800,
5155            3800
5156        ]
5157        .forEach(
5158            function (delay) {
5159
5160                addTimers.push(
5161                    setTimeout(
5162                        checkBasketChanged,
5163                        delay
5164                    )
5165                );
5166
5167            }
5168        );
5169
5170
5171        addTimers.push(
5172            setTimeout(
5173                function () {
5174
5175                    addPending = false;
5176
5177                    clearAddTimers();
5178
5179                },
5180                5000
5181            )
5182        );
5183
5184    }
5185
5186
5187
5188    /* =====================================================
5189       CAFE24 SUCCESS LAYER OBSERVER
5190    ===================================================== */
5191
5192    var observer =
5193        new MutationObserver(
5194            function () {
5195
5196                if (!addPending) {
5197                    return;
5198                }
5199
5200
5201                var layer =
5202                    document.getElementById(
5203                        'confirmLayer'
5204                    );
5205
5206
5207                if (!layer) {
5208                    return;
5209                }
5210
5211
5212                var text =
5213                    cleanText(
5214                        layer.textContent
5215                    );
5216
5217
5218                var success =
5219                    layer.querySelector(
5220                        '.xans-product-basketadd,' +
5221                        '.xans-order-layerbasket'
5222                    )
5223                    ||
5224                    text.indexOf(
5225                        '장바구니에 담'
5226                    ) !== -1
5227                    ||
5228                    text.indexOf(
5229                        '정상적으로 담겼'
5230                    ) !== -1;
5231
5232
5233                if (!success) {
5234                    return;
5235                }
5236
5237
5238                setTimeout(
5239                    checkBasketChanged,
5240                    120
5241                );
5242
5243            }
5244        );
5245
5246
5247    observer.observe(
5248        document.body,
5249        {
5250            childList:true,
5251            subtree:true
5252        }
5253    );
5254
5255
5256
5257    /* =====================================================
5258       PRODUCT DETAIL ADD TO CART
5259    ===================================================== */
5260
5261    document.addEventListener(
5262        'click',
5263        function (event) {
5264
5265            var button =
5266                event.target.closest(
5267                    '#actionCart,' +
5268                    '.actionCart,' +
5269                    '.sp-product-detail-section .actionCart'
5270                );
5271
5272
5273            if (!button) {
5274                return;
5275            }
5276
5277
5278            /*
5279             * 중요:
5280             * preventDefault 하지 않음.
5281             *
5282             * Cafe24 원래 장바구니 등록 기능이
5283             * 그대로 먼저 실행된다.
5284             */
5285            startAddWatch();
5286
5287        },
5288        true
5289    );
5290
5291
5292
5293    /* =====================================================
5294       INITIALIZE
5295    ===================================================== */
5296
5297    function initCart() {
5298
5299        reloadEngine();
5300
5301    }
5302
5303
5304    if (
5305        document.readyState ===
5306        'loading'
5307    ) {
5308
5309        document.addEventListener(
5310            'DOMContentLoaded',
5311            initCart
5312        );
5313
5314    } else {
5315
5316        initCart();
5317
5318    }
5319
5320
5321})();
5322</script>
5322
5323<!-- =========================================================
5324     SAINTPAIN SMOOTH PAGE TRANSITION
5325========================================================= -->
5326
5327<style>
5328
5329/* ---------------------------------------------------------
5330   기본 배경
5331--------------------------------------------------------- */
5332
5333html,
5334body {
5335    background:#fff;
5336}
5337
5338
5339/* ---------------------------------------------------------
5340   CHROME / MODERN BROWSER
5341   실제 페이지 간 View Transition
5342--------------------------------------------------------- */
5343
5344@view-transition {
5345    navigation:auto;
5346}
5347
5348
5349/* 기존 페이지가 사라질 때 */
5350::view-transition-old(root) {
5351    animation:
5352        sp-page-old
5353        120ms
5354        cubic-bezier(.4,0,1,1)
5355        both;
5356}
5357
5358
5359/* 새로운 페이지가 나타날 때 */
5360::view-transition-new(root) {
5361    animation:
5362        sp-page-new
5363        210ms
5364        cubic-bezier(.22,.61,.36,1)
5365        both;
5366}
5367
5368
5369@keyframes sp-page-old {
5370
5371    from {
5372        opacity:1;
5373    }
5374
5375    to {
5376        opacity:0;
5377    }
5378
5379}
5380
5381
5382@keyframes sp-page-new {
5383
5384    from {
5385        opacity:0;
5386    }
5387
5388    to {
5389        opacity:1;
5390    }
5391
5392}
5393
5394
5395/* ---------------------------------------------------------
5396   FALLBACK TRANSITION
5397
5398   View Transition을 지원하지 않는 브라우저에서도
5399   흰 화면이 순간적으로 번쩍거리는 현상을 줄인다.
5400--------------------------------------------------------- */
5401
5402#spPageTransition {
5403
5404    position:fixed;
5405
5406    top:0;
5407    right:0;
5408    bottom:0;
5409    left:0;
5410
5411    z-index:2147483000;
5412
5413    width:100%;
5414    height:100%;
5415
5416    background:#fff;
5417
5418    opacity:0;
5419
5420    pointer-events:none;
5421
5422    visibility:hidden;
5423
5424    transition:
5425        opacity 120ms cubic-bezier(.4,0,1,1),
5426        visibility 0s linear 120ms;
5427
5428}
5429
5430
5431#spPageTransition.is-leaving {
5432
5433    opacity:1;
5434
5435    visibility:visible;
5436
5437    transition:
5438        opacity 120ms cubic-bezier(.4,0,1,1),
5439        visibility 0s;
5440
5441}
5442
5443
5444/* ---------------------------------------------------------
5445   모션 최소화 설정 사용자
5446--------------------------------------------------------- */
5447
5448@media (prefers-reduced-motion:reduce) {
5449
5450    ::view-transition-old(root),
5451    ::view-transition-new(root) {
5452        animation-duration:1ms !important;
5453    }
5454
5455    #spPageTransition {
5456        transition-duration:1ms !important;
5457    }
5458
5459}
5460
5461</style>
5462
5463
5464<div id="spPageTransition" aria-hidden="true">
5465</div>
5466
5467
5468<script>
5469(function () {
5470
5471    'use strict';
5472
5473
5474    /* =====================================================
5475       HIDDEN CART ENGINE에서는 실행하지 않음
5476
5477       중요:
5478       장바구니 iframe 내부의 Cafe24 기능과
5479       충돌하지 않도록 차단한다.
5480    ===================================================== */
5481
5482    if (
5483        window.self !== window.top
5484    ) {
5485        return;
5486    }
5487
5488
5489
5490    var transitionLayer =
5491        document.getElementById(
5492            'spPageTransition'
5493        );
5494
5495
5496    if (!transitionLayer) {
5497        return;
5498    }
5499
5500
5501
5502    var navigating =
5503        false;
5504
5505
5506
5507    /* =====================================================
5508       VIEW TRANSITION 지원 여부
5509    ===================================================== */
5510
5511    var nativeViewTransition =
5512        (
5513            'startViewTransition' in document
5514        );
5515
5516
5517
5518    /* =====================================================
5519       FALLBACK FADE OUT
5520    ===================================================== */
5521
5522    function showTransitionLayer() {
5523
5524        if (
5525            nativeViewTransition
5526        ) {
5527            return;
5528        }
5529
5530
5531        transitionLayer.classList.add(
5532            'is-leaving'
5533        );
5534
5535    }
5536
5537
5538
5539    function hideTransitionLayer() {
5540
5541        transitionLayer.classList.remove(
5542            'is-leaving'
5543        );
5544
5545    }
5546
5547
5548
5549    /* =====================================================
5550       SMOOTH NAVIGATION
5551
5552       다른 코드에서도 사용할 수 있도록
5553       window에 공개한다.
5554    ===================================================== */
5555
5556    function smoothNavigate(url) {
5557
5558        if (
5559            !url ||
5560            navigating
5561        ) {
5562            return;
5563        }
5564
5565
5566        navigating =
5567            true;
5568
5569
5570        /*
5571         * Chrome 등 View Transition 지원 브라우저에서는
5572         * 브라우저 자체 기능이 페이지 전환을 처리하므로
5573         * 인위적인 딜레이를 주지 않는다.
5574         */
5575
5576        if (
5577            nativeViewTransition
5578        ) {
5579
5580            window.location.href =
5581                url;
5582
5583
5584            return;
5585
5586        }
5587
5588
5589        /*
5590         * 지원하지 않는 브라우저에서는
5591         * 아주 짧은 흰색 Fade 후 페이지 이동.
5592         */
5593
5594        showTransitionLayer();
5595
5596
5597        window.setTimeout(
5598            function () {
5599
5600                window.location.href =
5601                    url;
5602
5603            },
5604            115
5605        );
5606
5607    }
5608
5609
5610
5611    window.spSmoothNavigate =
5612        smoothNavigate;
5613
5614
5615
5616    /* =====================================================
5617       NORMAL INTERNAL LINKS
5618
5619       카테고리
5620       상품 상세
5621       ABOUT
5622       COLLECTION
5623       STOCKISTS
5624       BOARD
5625       MY PAGE
5626       LOGIN
5627       ORDER 관련 링크 등
5628
5629       같은 쇼핑몰 내부의 일반 링크에 적용.
5630    ===================================================== */
5631
5632    document.addEventListener(
5633        'click',
5634        function (event) {
5635
5636            /*
5637             * 마우스 왼쪽 클릭만 처리.
5638             */
5639            if (
5640                event.button !== 0
5641            ) {
5642                return;
5643            }
5644
5645
5646            /*
5647             * 새 탭 / 새 창 단축키는 건드리지 않는다.
5648             */
5649            if (
5650                event.ctrlKey ||
5651                event.metaKey ||
5652                event.shiftKey ||
5653                event.altKey
5654            ) {
5655                return;
5656            }
5657
5658
5659            if (
5660                event.defaultPrevented
5661            ) {
5662                return;
5663            }
5664
5665
5666            var anchor =
5667                event.target.closest(
5668                    'a[href]'
5669                );
5670
5671
5672            if (!anchor) {
5673                return;
5674            }
5675
5676
5677
5678            /* -------------------------------------------------
5679               SEARCH 버튼은 기존 Overlay 기능 유지
5680            ------------------------------------------------- */
5681
5682            if (
5683                anchor.classList.contains(
5684                    'sp-search-trigger'
5685                )
5686            ) {
5687                return;
5688            }
5689
5690
5691
5692            /* -------------------------------------------------
5693               CART 버튼은 기존 Drawer 기능 유지
5694            ------------------------------------------------- */
5695
5696            if (
5697                anchor.classList.contains(
5698                    'sp-cart-trigger'
5699                )
5700            ) {
5701                return;
5702            }
5703
5704
5705
5706            /* -------------------------------------------------
5707               다운로드 링크 제외
5708            ------------------------------------------------- */
5709
5710            if (
5711                anchor.hasAttribute(
5712                    'download'
5713                )
5714            ) {
5715                return;
5716            }
5717
5718
5719
5720            /* -------------------------------------------------
5721               target="_blank" 등 제외
5722            ------------------------------------------------- */
5723
5724            var target =
5725                anchor.getAttribute(
5726                    'target'
5727                );
5728
5729
5730            if (
5731                target &&
5732                target.toLowerCase() !==
5733                '_self'
5734            ) {
5735                return;
5736            }
5737
5738
5739
5740            /* -------------------------------------------------
5741               Cafe24 onclick 기능이 붙은 특수 버튼은
5742               원래 Cafe24 기능을 우선한다.
5743            ------------------------------------------------- */
5744
5745            if (
5746                anchor.hasAttribute(
5747                    'onclick'
5748                )
5749            ) {
5750                return;
5751            }
5752
5753
5754
5755            var rawHref =
5756                anchor.getAttribute(
5757                    'href'
5758                );
5759
5760
5761            if (!rawHref) {
5762                return;
5763            }
5764
5765
5766
5767            /* -------------------------------------------------
5768               특수 링크 제외
5769            ------------------------------------------------- */
5770
5771            if (
5772                rawHref === '#' ||
5773
5774                rawHref.charAt(0) === '#'
5775            ) {
5776                return;
5777            }
5778
5779
5780            if (
5781                /^(?:javascript:|mailto:|tel:)/i
5782                    .test(
5783                        rawHref
5784                    )
5785            ) {
5786                return;
5787            }
5788
5789
5790
5791            var url;
5792
5793
5794            try {
5795
5796                url =
5797                    new URL(
5798                        anchor.href,
5799                        window.location.href
5800                    );
5801
5802            } catch (e) {
5803
5804                return;
5805
5806            }
5807
5808
5809
5810            /* -------------------------------------------------
5811               외부 사이트 제외
5812            ------------------------------------------------- */
5813
5814            if (
5815                url.origin !==
5816                window.location.origin
5817            ) {
5818                return;
5819            }
5820
5821
5822
5823            /* -------------------------------------------------
5824               현재 페이지의 Anchor 이동은 제외
5825            ------------------------------------------------- */
5826
5827            if (
5828                url.pathname ===
5829                    window.location.pathname &&
5830
5831                url.search ===
5832                    window.location.search &&
5833
5834                url.hash &&
5835                url.hash !==
5836                    window.location.hash
5837            ) {
5838                return;
5839            }
5840
5841
5842
5843            /* -------------------------------------------------
5844               완전히 같은 주소를 다시 클릭하는 경우 제외
5845            ------------------------------------------------- */
5846
5847            if (
5848                url.href ===
5849                window.location.href
5850            ) {
5851                return;
5852            }
5853
5854
5855
5856            /*
5857             * Cafe24의 일반 링크 이동 대신
5858             * 우리가 페이지 전환을 관리한다.
5859             */
5860
5861            event.preventDefault();
5862
5863
5864            smoothNavigate(
5865                url.href
5866            );
5867
5868        },
5869        false
5870    );
5871
5872
5873
5874    /* =====================================================
5875       SEARCH FORM
5876
5877       검색창에서 ENTER 입력 후 검색 페이지로 넘어갈 때도
5878       동일한 페이지 전환 적용.
5879    ===================================================== */
5880
5881    var searchForm =
5882        document.querySelector(
5883            '.sp-search-form'
5884        );
5885
5886
5887    if (searchForm) {
5888
5889        searchForm.addEventListener(
5890            'submit',
5891            function (event) {
5892
5893                event.preventDefault();
5894
5895
5896                var input =
5897                    searchForm.querySelector(
5898                        '[name="keyword"]'
5899                    );
5900
5901
5902                var keyword =
5903                    input
5904                    ? input.value.trim()
5905                    : '';
5906
5907
5908                var searchUrl =
5909                    '/product/search.html';
5910
5911
5912                if (keyword) {
5913
5914                    searchUrl +=
5915                        '?keyword=' +
5916                        encodeURIComponent(
5917                            keyword
5918                        );
5919
5920                }
5921
5922
5923                smoothNavigate(
5924                    searchUrl
5925                );
5926
5927            }
5928        );
5929
5930    }
5931
5932
5933
5934    /* =====================================================
5935       PROGRAMMATIC NAVIGATION / FORM / CHECKOUT FALLBACK
5936
5937       Cafe24가 Javascript로 직접 페이지를 바꾸는 경우
5938       unload 직전 전환막을 준비한다.
5939
5940       일반 링크는 위 코드가 처리하며,
5941       이것은 주문/로그인 등 특수 이동에 대한 보조 기능.
5942    ===================================================== */
5943
5944    window.addEventListener(
5945        'beforeunload',
5946        function () {
5947
5948            showTransitionLayer();
5949
5950        }
5951    );
5952
5953
5954
5955    /* =====================================================
5956       BACK / FORWARD CACHE
5957
5958       뒤로가기·앞으로가기 후
5959       흰 화면이 남는 현상 방지.
5960    ===================================================== */
5961
5962    window.addEventListener(
5963        'pageshow',
5964        function () {
5965
5966            navigating =
5967                false;
5968
5969
5970            hideTransitionLayer();
5971
5972        }
5973    );
5974
5975
5976})();
5977</script>
5977
5978</div>
5979<!--#ez="1/1"-->
5980
5981
5982        <!-- SIDEBAR -->
5983        <aside id="aside" data-ez="contents-0k79dnd-1" class="xans-element- xans-layout xans-layout-slidepackage "><nav class="navigation-menu" role="navigation">
5984		<div class="slide_top_inner">
5985			<div class="xans-element- xans-layout xans-layout-logotop slide_logo "><a href="/"><img src="/web/upload/category/logo/v2_43a8b2a70dafa1e1602207d36dd9a51f_SFB8qzYBU_top.jpg" alt="세인트페인 saintpain"></a>
5986</div>
5987<!-- //slide_logo -->
5988			<button type="button" class="btnClose"><i aria-hidden="true" class="icon icoClose"></i>닫기</button>
5989
5990			<div class="navigation_state" data-ez-group="top-util-menu" data-ez-role="list">
5991				<a data-ez-item="join" href="/member/agreement.html" class="xans-element- xans-layout xans-layout-statelogoff ">회원가입
5992</a>
5993				<a data-ez-item="login" href="/member/login.html" class="xans-element- xans-layout xans-layout-statelogoff ">로그인
5994</a>
5995												<a data-ez-item="order" href="/myshop/order/list.html">주문조회</a>
5996								<a data-ez-item="recent" href="/product/recent_view_product.html">최근본상품</a>
5997			</div>
5998<!-- //navigation_state -->
5999		</div>
6000<!-- //navigation-menu -->
6001
6002		<div class="nav_inner">
6003			<div class="tab_inner">
6004				<div data-ez-module="menu-side/1"><div id="slideCateList" class="navigation-menu__category">
6005  <ul id="slide_add_category">
6006<li><a href="/category/New/49/" class="view">New</a></li>
6007<li><a href="/category/All/50/" class="view">All</a></li>
6008<li><a href="/category/Outer/24/" class="view">Outer</a></li>
6009<li>
6010<a href="/category/Top/25/" class="view">Top</a><ul class="sub_cate01">
6011<li><a href="/category/Hoodie/79/" class="view">Hoodie</a></li>
6012<li><a href="/category/Sweat/80/" class="view">Sweat</a></li>
6013<li><a href="/category/Shirts/77/" class="view">Shirts</a></li>
6014<li><a href="/category/T-Shirts/81/" class="view">T-Shirts</a></li>
6015</ul>
6016</li>
6017<li>
6018<a href="/category/Pants/26/" class="view">Pants</a><ul class="sub_cate01">
6019<li><a href="/category/Long/83/" class="view">Long</a></li>
6020<li><a href="/category/Short/82/" class="view">Short</a></li>
6021</ul>
6022</li>
6023<li><a href="/category/Acc/27/" class="view">Acc</a></li>
6024<li><a href="/category/Archives/56/" class="view">Archives</a></li>
6025</ul>
6026  </div></div>
6027<!-- //menu-side/1 -->
6028
6029				<div class="community_tab">
6030					<div class="side_title">고객센터<span></span>
6031</div>
6032					<div class="board cboth">
6033						<ul class="xans-element- xans-layout xans-layout-boardinfo"><!-- 슬라이드 게시판 자동출력 -->
6034<li class="xans-record-"><a href="/board/product/list.html?board_no=6">Q&A</a></li>
6035<li class="xans-record-"><a href="/board/free/list.html?board_no=1">Notice</a></li>
6036</ul>
6037					</div>
6038				</div>
6039<!-- //community_tab -->
6040			</div>
6041<!-- //tab_inner -->
6042
6043					</div>
6044<!-- //nav_inner -->
6045	</nav>
6046</aside>
6047<!--#ez="1/2"-->
6048
6049
6050        <!-- CONTENT -->
6051
6052        <div id="container" data-ez="layout-11n7aep-1">
6053
6054            <div id="contents">
6055
6056                <span class="xans-element- xans-layout xans-layout-mobileaction RTMB "><a href="#none" onclick="history.go(-1);return false;">
6057                        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewbox="0 0 24 24" class="icon">
6058	<path d="M7.29976 12.5L14.9998 20.1C15.3998 20.5 15.9998 20.5 16.3998 20.1C16.7998 19.7 16.7998 19.1 16.3998 18.7L9.49976 11.7L16.3998 4.7C16.7998 4.3 16.7998 3.7 16.3998 3.3C16.1998 3.1 15.9998 3 15.6998 3C15.3998 3 15.1998 3.1 14.9998 3.3L7.29976 10.9C6.89976 11.4 6.89976 12 7.29976 12.5C7.29976 12.4 7.29976 12.4 7.29976 12.5Z" fill="#000000"></path>
6059</svg>
6060
6061
6062                        뒤로가기
6063                    </a>
6064</span>
6065
6066
6067                
6068<div class="section path">
6069    <span>현재 위치</span>
6070    <ol>
6071        <li><a href="/">홈</a></li>
6072        <li title="현재 위치"><strong>최근 본 상품</strong></li>
6073    </ol>
6074</div>
6075
6076<div class="myshopArea">
6077    <div class="titleArea titleArea--myshop">
6078        <h2>최근 본 상품</h2>
6079    </div>
6080
6081    <div class="xans-element- xans-product xans-product-recentlist xans-record-"><!--
6082            $count = 10
6083        -->
6084<p class="ec-base-prdEmpty ">최근본 상품 내역이 없습니다.</p>
6085</div>
6086
6087        <div id="myshopMain" class="xans-element- xans-myshop xans-myshop-main "><div class="subTitle">
6088        <h3>나의 쇼핑 정보</h3>
6089    </div>
6090<ul class="menu">
6091        <li>
6092            <a href="/myshop/order/list.html">주문내역 조회</a>
6093        </li>
6094        <li>
6095            <a href="/myshop/mileage/historyList.html">적립금 내역</a>
6096        </li>
6097        <li class="">
6098            <a href="/myshop/deposits/historyList.html">예치금 내역</a>
6099        </li>
6100        <li class="">
6101            <a href="/myshop/coupon/coupon.html">쿠폰 내역</a>
6102        </li>
6103        <li>
6104            <a href="/myshop/addr/list.html">배송 주소록 관리</a>
6105        </li>
6106                <li class="displaynone">
6107            <a href="/myshop/regular_delivery.html">정기배송 관리</a>
6108        </li>
6109    </ul>
6110<div class="subTitle">
6111        <h3>활동 정보</h3>
6112    </div>
6113<ul class="menu">
6114        <li>
6115            <a href="/product/recent_view_product.html">최근 본 상품</a>
6116        </li>
6117        <li>
6118            <a href="/myshop/wish_list.html">나의 위시리스트</a>
6119        </li>
6120        <li class="displaynone">
6121            <a href="">좋아요</a>
6122        </li>
6123        <li class="">
6124            <a href="/myshop/board_list.html">나의 게시글</a>
6125        </li>
6126    </ul>
6127<div class="subTitle">
6128        <h3>나의 정보</h3>
6129    </div>
6130<ul class="menu">
6131        <li>
6132            <a href="/member/modify.html">회원 정보 수정</a>
6133        </li>
6134            </ul>
6135<div class="consult displaynone">
6136        <a href="/board/consult/list.html" class="btnNormal sizeM">1:1 문의하기</a>
6137    </div>
6138</div>
6139</div>
6140
6141            </div>
6142
6143        </div>
6144
6145
6146        <!-- FOOTER -->
6147        <footer id="footer" data-ez="module-0j0l4fv-1" class="xans-element- xans-layout xans-layout-footer sp-footer "><div class="sp-footer-grid">
6148
6149
6150        <!-- SOCIAL -->
6151        <div class="sp-footer-col sp-footer-social">
6152
6153            <a href="https://www.instagram.com/saintpain_official/" target="_blank">
6154                INSTAGRAM
6155            </a>
6156
6157        </div>
6158
6159
6160
6161        <!-- POLICY -->
6162        <div class="sp-footer-col sp-footer-policy">
6163
6164            <a href="/member/mall_agreement.html">
6165                TERMS OF USE
6166            </a>
6167
6168            <a href="/member/privacy.html">
6169                PRIVACY POLICY
6170            </a>
6171
6172            <a href="/shopinfo/guide.html">
6173                SHOP GUIDE
6174            </a>
6175
6176        </div>
6177
6178
6179
6180        <!-- COMPANY -->
6181        <div class="sp-footer-col sp-footer-company">
6182
6183            <div>
6184                COMPANY:
6185                <span>미케닉스</span>
6186            </div>
6187
6188            <div>
6189                OWNER:
6190                <span>성동욱</span>
6191            </div>
6192
6193            <div>
6194                BUSINESS NUMBER:
6195                <span>104-06-96737</span>
6196            </div>
6197
6198            <div>
6199                MAIL:
6200                <a href="mailto:[email protected]">
6201                    [email protected]
6202                </a>
6203                <span></span>
6204            </div>
6205
6206            <div>
6207                ADDRESS:
6208                <span>
6209                    13326 경기 성남시 수정구 산성대로 91 성호빌딩 8층 미케닉스                </span>
6210            </div>
6211
6212            <div>
6213                CS:
6214                <span>070-8814-0972</span>
6215            </div>
6216
6217        </div>
6218
6219
6220
6221        <!-- LEGAL -->
6222        <div class="sp-footer-col sp-footer-legal">
6223
6224            <div>
6225                MAIL-ORDER LICENSE:
6226                <span>2024-성남분당A-0302</span>
6227                <a href="#none" onclick="window.open('http://www.ftc.go.kr/bizCommPop.do?wrkr_no=1040696737', 'bizCommPop', 'width=750, height=950;');return false;">[사업자정보확인]</a>            </div>
6228
6229            <div>
6230                PRIVACY MANAGER:
6231                <span>성동욱</span>
6232            </div>
6233
6234            <div class="sp-footer-copy">
6235                COPYRIGHT © SAINTPAIN. ALL RIGHTS RESERVED.
6236            </div>
6237
6238        </div>
6239
6240
6241    </div>
6242</footer>
6243
6244
6245<div data-ez-module="user-defined/1" data-ez-name="USER DEFINED" data-ez-type="plain" data-ez="module-1o2fgn4-1">
6246
6247<style>
6248
6249/* =========================================================
6250   SAINTPAIN FOOTER
6251========================================================= */
6252
6253#footer.sp-footer {
6254
6255    position: relative;
6256
6257    width: 100% !important;
6258    max-width: 100% !important;
6259
6260    margin: 0 !important;
6261
6262    padding:
6263        42px
6264        14px
6265        38px !important;
6266
6267    background: #fff !important;
6268
6269    border: 0 !important;
6270    border-top: 0 !important;
6271    border-right: 0 !important;
6272    border-bottom: 0 !important;
6273    border-left: 0 !important;
6274
6275    outline: 0 !important;
6276
6277    box-shadow: none !important;
6278
6279    box-sizing: border-box !important;
6280
6281    overflow: hidden;
6282
6283    font-family:
6284        Helvetica,
6285        "Helvetica Neue",
6286        Arial,
6287        Pretendard,
6288        "Apple SD Gothic Neo",
6289        sans-serif !important;
6290
6291    color: #000 !important;
6292}
6293
6294
6295
6296/* pseudo line 제거 */
6297
6298#footer.sp-footer::before,
6299#footer.sp-footer::after {
6300
6301    display: none !important;
6302
6303    content: none !important;
6304
6305    width: 0 !important;
6306    height: 0 !important;
6307
6308    border: 0 !important;
6309
6310    background: none !important;
6311
6312    box-shadow: none !important;
6313}
6314
6315
6316
6317/* =========================================================
6318   RESET
6319========================================================= */
6320
6321#footer.sp-footer *,
6322#footer.sp-footer *::before,
6323#footer.sp-footer *::after {
6324
6325    box-sizing: border-box;
6326}
6327
6328
6329
6330/* =========================================================
6331   GRID
6332========================================================= */
6333
6334/*
6335    중요
6336
6337    기존:
6338    12% + 17% + 39% + 27% + 120px gap
6339
6340    → 작은 PC / MacBook에서 100% 초과
6341
6342    변경:
6343    같은 비율을 fr로 유지하되
6344    gap을 제외한 실제 남은 공간 안에서 자동 계산
6345*/
6346
6347#footer.sp-footer .sp-footer-grid {
6348
6349    display: grid !important;
6350
6351    grid-template-columns:
6352        minmax(0, 12fr)
6353        minmax(0, 17fr)
6354        minmax(0, 39fr)
6355        minmax(0, 27fr) !important;
6356
6357    width: 100% !important;
6358    max-width: 100% !important;
6359
6360    margin: 0 !important;
6361    padding: 0 !important;
6362
6363    column-gap: 40px !important;
6364    row-gap: 0 !important;
6365
6366    align-items: start !important;
6367
6368    border: 0 !important;
6369
6370    outline: 0 !important;
6371
6372    box-shadow: none !important;
6373}
6374
6375
6376
6377/* =========================================================
6378   COMMON COLUMN
6379========================================================= */
6380
6381#footer.sp-footer .sp-footer-col {
6382
6383    position: static !important;
6384
6385    display: block !important;
6386
6387    float: none !important;
6388
6389    width: auto !important;
6390
6391    min-width: 0 !important;
6392    max-width: 100% !important;
6393
6394    margin: 0 !important;
6395    padding: 0 !important;
6396
6397    border: 0 !important;
6398
6399    font-size: 10px !important;
6400
6401    line-height: 1.65 !important;
6402
6403    font-weight: 400 !important;
6404
6405    letter-spacing: 0 !important;
6406
6407    color: #000 !important;
6408}
6409
6410
6411
6412#footer.sp-footer .sp-footer-col div,
6413#footer.sp-footer .sp-footer-col span {
6414
6415    max-width: 100% !important;
6416
6417    font-size: inherit !important;
6418
6419    line-height: inherit !important;
6420
6421    font-weight: inherit !important;
6422
6423    color: #000 !important;
6424}
6425
6426
6427
6428/* =========================================================
6429   TEXT OVERFLOW SAFETY
6430========================================================= */
6431
6432/*
6433    긴 사업자번호 / 주소 / 이메일 등이
6434    화면 밖으로 나가지 않게 함
6435*/
6436
6437#footer.sp-footer .sp-footer-company,
6438#footer.sp-footer .sp-footer-legal {
6439
6440    overflow: visible !important;
6441}
6442
6443
6444
6445#footer.sp-footer .sp-footer-company div,
6446#footer.sp-footer .sp-footer-legal div {
6447
6448    max-width: 100% !important;
6449
6450    white-space: normal !important;
6451
6452    overflow: visible !important;
6453
6454    text-overflow: clip !important;
6455
6456    overflow-wrap: break-word !important;
6457
6458    word-break: keep-all;
6459}
6460
6461
6462
6463#footer.sp-footer .sp-footer-company a,
6464#footer.sp-footer .sp-footer-legal a {
6465
6466    max-width: 100% !important;
6467
6468    white-space: normal !important;
6469
6470    overflow-wrap: anywhere !important;
6471
6472    word-break: break-word !important;
6473}
6474
6475
6476
6477/* =========================================================
6478   1. SOCIAL
6479========================================================= */
6480
6481#footer.sp-footer .sp-footer-social {
6482
6483    min-width: 0 !important;
6484}
6485
6486
6487
6488/* =========================================================
6489   2. POLICY
6490========================================================= */
6491
6492#footer.sp-footer .sp-footer-policy {
6493
6494    display: flex !important;
6495
6496    min-width: 0 !important;
6497
6498    flex-direction: column !important;
6499
6500    align-items: flex-start !important;
6501
6502    gap: 2px !important;
6503}
6504
6505
6506
6507/* =========================================================
6508   3. COMPANY
6509========================================================= */
6510
6511#footer.sp-footer .sp-footer-company {
6512
6513    min-width: 0 !important;
6514
6515    text-align: left !important;
6516}
6517
6518
6519
6520/* =========================================================
6521   4. LEGAL
6522========================================================= */
6523
6524#footer.sp-footer .sp-footer-legal {
6525
6526    min-width: 0 !important;
6527
6528    margin: 0 !important;
6529
6530    text-align: right !important;
6531}
6532
6533
6534
6535#footer.sp-footer .sp-footer-copy {
6536
6537    margin-top: 10px !important;
6538}
6539
6540
6541
6542/* =========================================================
6543   LINKS
6544========================================================= */
6545
6546#footer.sp-footer a {
6547
6548    color: #000 !important;
6549
6550    text-decoration: none !important;
6551
6552    border: 0 !important;
6553
6554    outline: 0 !important;
6555}
6556
6557
6558
6559#footer.sp-footer a:hover {
6560
6561    color: #000 !important;
6562
6563    text-decoration: none !important;
6564
6565    opacity: .5;
6566}
6567
6568
6569
6570/* =========================================================
6571   CAFE24 OLD FOOTER ELEMENTS
6572========================================================= */
6573
6574.bottom-nav,
6575.footer_margin,
6576.bt_util,
6577.bt_top,
6578.bt_bottom {
6579
6580    display: none !important;
6581}
6582
6583
6584
6585/* =========================================================
6586   OLD FOOTER LINE REMOVE
6587========================================================= */
6588
6589.xans-layout-footer,
6590.xans-layout-footerpackage,
6591.xans-layout-footerpackage .inner,
6592#wrap > footer,
6593#wrap #footer {
6594
6595    max-width: 100% !important;
6596
6597    border-top: 0 !important;
6598
6599    border-bottom: 0 !important;
6600
6601    outline: 0 !important;
6602
6603    box-shadow: none !important;
6604}
6605
6606
6607
6608.xans-layout-footer::before,
6609.xans-layout-footer::after,
6610.xans-layout-footerpackage::before,
6611.xans-layout-footerpackage::after {
6612
6613    display: none !important;
6614
6615    content: none !important;
6616
6617    border: 0 !important;
6618}
6619
6620
6621
6622/* =========================================================
6623   SMALL DESKTOP / MACBOOK
6624========================================================= */
6625
6626/*
6627    901 ~ 1250px 구간
6628
6629    기존 PC 디자인은 유지하면서
6630    gap만 조금 줄여 공간 확보
6631*/
6632
6633@media screen and (max-width: 1250px) {
6634
6635    #footer.sp-footer {
6636
6637        padding-left: 14px !important;
6638        padding-right: 14px !important;
6639    }
6640
6641
6642    #footer.sp-footer .sp-footer-grid {
6643
6644        column-gap: 24px !important;
6645    }
6646
6647
6648    #footer.sp-footer .sp-footer-col {
6649
6650        font-size: 9px !important;
6651    }
6652
6653}
6654
6655
6656
6657/* =========================================================
6658   TABLET
6659========================================================= */
6660
6661@media screen and (max-width: 900px) {
6662
6663    #footer.sp-footer {
6664
6665        padding:
6666            32px
6667            12px
6668            30px !important;
6669
6670        border: 0 !important;
6671    }
6672
6673
6674    #footer.sp-footer .sp-footer-grid {
6675
6676        display: grid !important;
6677
6678        grid-template-columns:
6679            minmax(0, 1fr)
6680            minmax(0, 1fr) !important;
6681
6682        gap:
6683            28px
6684            20px !important;
6685    }
6686
6687
6688    #footer.sp-footer .sp-footer-social,
6689    #footer.sp-footer .sp-footer-policy,
6690    #footer.sp-footer .sp-footer-company,
6691    #footer.sp-footer .sp-footer-legal {
6692
6693        width: auto !important;
6694
6695        min-width: 0 !important;
6696
6697        margin: 0 !important;
6698
6699        text-align: left !important;
6700    }
6701
6702
6703    #footer.sp-footer .sp-footer-col {
6704
6705        font-size: 9px !important;
6706    }
6707
6708}
6709
6710
6711
6712/* =========================================================
6713   MOBILE
6714========================================================= */
6715
6716@media screen and (max-width: 540px) {
6717
6718    #footer.sp-footer {
6719
6720        padding:
6721            28px
6722            12px
6723            30px !important;
6724
6725        border: 0 !important;
6726    }
6727
6728
6729    #footer.sp-footer .sp-footer-grid {
6730
6731        grid-template-columns:
6732            minmax(0, 1fr) !important;
6733
6734        gap: 20px !important;
6735    }
6736
6737
6738    #footer.sp-footer .sp-footer-social,
6739    #footer.sp-footer .sp-footer-policy,
6740    #footer.sp-footer .sp-footer-company,
6741    #footer.sp-footer .sp-footer-legal {
6742
6743        width: 100% !important;
6744
6745        min-width: 0 !important;
6746
6747        max-width: 100% !important;
6748
6749        text-align: left !important;
6750    }
6751
6752
6753    #footer.sp-footer .sp-footer-company div,
6754    #footer.sp-footer .sp-footer-legal div {
6755
6756        overflow-wrap: anywhere !important;
6757    }
6758
6759}
6760
6761</style>
6762
6763</div>
6764
6765<!--#ez="1/1"-->
6766
6767
6768        <!--#ez="1/1"-->
6769
6770    </div>
6771    <!-- //wrap -->
6772
6773
6774
6775    <!-- =====================================================
6776         PAYMENT PROGRESS
6777    ====================================================== -->
6778
6779    <div id="progressPaybar" style="display:none;">
6780
6781        <div id="progressPaybarBackground" class="layerProgress"></div>
6782
6783
6784        <div id="progressPaybarView">
6785
6786            <div class="box">
6787
6788                <h3>
6789                    현재 결제가 진행중입니다.
6790                </h3>
6791
6792                <p class="txt">
6793                    본 결제 창은 결제완료 후 자동으로 닫히며,
6794                    결제 진행 중에 본 결제 창을 닫으시면<br>
6795                    주문이 되지 않으니 결제 완료 될 때 까지
6796                    닫지 마시기 바랍니다.
6797                </p>
6798
6799                <div class="progressbar">
6800
6801                    <img src="//img.echosting.cafe24.com/skin/skin/common/img_loading.gif" alt="loading" loading="lazy">
6802
6803                 </div>
6804
6805            </div>
6806
6807        </div>
6808
6809    </div>
6810
6811
6812
6813    <!-- =====================================================
6814         WORLD SHIPPING
6815    ====================================================== -->
6816
6817    
6818
6819
6820    <div class="layer_shadow" id="layer_shadow"></div>
6821
6822    <div id="layoutDimmed" class="dimmed"></div>
6823
6824
6825
6826    <!-- =====================================================
6827         CAFE24 ADDITIONAL CSS
6828    ====================================================== -->
6829
6830    
6831    
6832    
6833    
6834    
6835    
6836
6837
6838
6839    <!-- =====================================================
6840         SAINTPAIN Q&A PRIVACY
6841    ====================================================== -->
6842
6843    
6843<script>
6844    (function () {
6845
6846        function cleanText(text) {
6847
6848            return String(text || '')
6849                .replace(/\s+/g, ' ')
6850                .trim();
6851
6852        }
6853
6854
6855        function isSaintpainAdmin(text) {
6856
6857            var value =
6858                cleanText(text)
6859                .toLowerCase();
6860
6861
6862            return (
6863                value.indexOf('saintpain') !== -1 ||
6864                value.indexOf('ultradoc1') !== -1
6865            );
6866
6867        }
6868
6869
6870        function maskSingle(value) {
6871
6872            value =
6873                cleanText(value);
6874
6875
6876            if (!value) {
6877                return '';
6878            }
6879
6880
6881            if (
6882                isSaintpainAdmin(value)
6883            ) {
6884
6885                return 'SAINTPAIN';
6886
6887            }
6888
6889
6890            if (
6891                value.indexOf('@') !== -1
6892            ) {
6893
6894                var emailParts =
6895                    value.split('@');
6896
6897
6898                return (
6899                    maskSingle(emailParts[0])
6900                    +
6901                    '@'
6902                    +
6903                    emailParts[1]
6904                );
6905
6906            }
6907
6908
6909            var chars =
6910                Array.from(value);
6911
6912
6913            if (
6914                chars.length === 1
6915            ) {
6916
6917                return chars[0];
6918
6919            }
6920
6921
6922            if (
6923                chars.length === 2
6924            ) {
6925
6926                return (
6927                    chars[0]
6928                    +
6929                    '*'
6930                );
6931
6932            }
6933
6934
6935            /*
6936             * 한글 이름
6937             * 김도현 → 김*현
6938             */
6939
6940            if (
6941                /^[가-힣]+$/.test(value)
6942                &&
6943                chars.length <= 4
6944            ) {
6945
6946                return (
6947                    chars[0]
6948                    +
6949                    '*'.repeat(
6950                        Math.max(
6951                            1,
6952                            chars.length - 2
6953                        )
6954                    )
6955                    +
6956                    chars[chars.length - 1]
6957                );
6958
6959            }
6960
6961
6962            /*
6963             * 일반 ID
6964             */
6965
6966            if (
6967                chars.length <= 4
6968            ) {
6969
6970                return (
6971                    chars[0]
6972                    +
6973                    '*'.repeat(
6974                        chars.length - 1
6975                    )
6976                );
6977
6978            }
6979
6980
6981            return (
6982                chars
6983                    .slice(0, 2)
6984                    .join('')
6985                +
6986                '*'.repeat(
6987                    Math.max(
6988                        2,
6989                        chars.length - 3
6990                    )
6991                )
6992                +
6993                chars[chars.length - 1]
6994            );
6995
6996        }
6997
6998
6999        function maskWriter(text) {
7000
7001            text =
7002                cleanText(text);
7003
7004
7005            if (!text) {
7006                return '';
7007            }
7008
7009
7010            if (
7011                isSaintpainAdmin(text)
7012            ) {
7013
7014                return 'SAINTPAIN';
7015
7016            }
7017
7018
7019            var match =
7020                text.match(
7021                    /^(.+?)\s*\((.+?)\)$/
7022                );
7023
7024
7025            if (match) {
7026
7027                return (
7028                    maskSingle(match[1])
7029                    +
7030                    ' ('
7031                    +
7032                    maskSingle(match[2])
7033                    +
7034                    ')'
7035                );
7036
7037            }
7038
7039
7040            return maskSingle(text);
7041
7042        }
7043
7044
7045        function applyWriter(element) {
7046
7047            if (
7048                !element ||
7049                element.dataset.spPrivacyDone === '1'
7050            ) {
7051
7052                return;
7053
7054            }
7055
7056
7057            var original =
7058                cleanText(
7059                    element.textContent
7060                );
7061
7062
7063            if (!original) {
7064                return;
7065            }
7066
7067
7068            if (
7069                /^\d{2,4}[.\-\/]\d/.test(original)
7070                ||
7071                original.length > 50
7072            ) {
7073
7074                return;
7075
7076            }
7077
7078
7079            var admin =
7080                isSaintpainAdmin(original);
7081
7082
7083            element.textContent =
7084                admin
7085                    ? 'SAINTPAIN'
7086                    : maskWriter(original);
7087
7088
7089            element.dataset.spPrivacyDone =
7090                '1';
7091
7092
7093            element.classList.add(
7094                'sp-qna-privacy-writer'
7095            );
7096
7097
7098            if (admin) {
7099
7100                element.classList.add(
7101                    'sp-qna-privacy-admin'
7102                );
7103
7104            }
7105
7106        }
7107
7108
7109        function applyPrivacy() {
7110
7111            var selectors = [
7112
7113                '#spBoardHome .sp-board-qna-author',
7114                '#spBoardHome .sp-board-author',
7115                '#spBoardHome .sp-board-writer',
7116                '#spBoardHome .sp-qna-author',
7117                '#spBoardHome .sp-qna-writer',
7118
7119                '#spQnaBoard .sp-board-writer',
7120                '#spQnaBoard .sp-qna-writer',
7121                '#spQnaBoard .sp-qna-author',
7122
7123                '#spQnaList .sp-board-writer',
7124                '#spQnaList .sp-qna-writer',
7125                '#spQnaList .sp-qna-author',
7126
7127                '#spQnaRead .sp-qna-writer',
7128                '#spQnaRead .sp-qna-reply-writer',
7129
7130                '#spBoardRead .sp-qna-writer',
7131                '#spBoardRead .sp-board-writer',
7132
7133                '.xans-board-list-4 tbody tr td.writer',
7134                '.xans-board-list-4 tbody tr td.name',
7135
7136                '.xans-board-read-4 .name'
7137
7138            ];
7139
7140
7141            var elements =
7142                document.querySelectorAll(
7143                    selectors.join(',')
7144                );
7145
7146
7147            Array.prototype.forEach.call(
7148                elements,
7149                applyWriter
7150            );
7151
7152
7153            var qnaRows =
7154                document.querySelectorAll(
7155                    '.xans-board-list-4 table tbody tr'
7156                );
7157
7158
7159            Array.prototype.forEach.call(
7160                qnaRows,
7161                function (row) {
7162
7163                    var cells =
7164                        row.querySelectorAll(
7165                            'td'
7166                        );
7167
7168
7169                    if (
7170                        cells.length >= 5
7171                    ) {
7172
7173                        applyWriter(
7174                            cells[4]
7175                        );
7176
7177                    }
7178
7179                }
7180            );
7181
7182        }
7183
7184
7185        function initQnaPrivacy() {
7186
7187            applyPrivacy();
7188
7189
7190            var observer =
7191                new MutationObserver(
7192                    function () {
7193
7194                        applyPrivacy();
7195
7196                    }
7197                );
7198
7199
7200            observer.observe(
7201                document.body,
7202                {
7203                    childList:true,
7204                    subtree:true
7205                }
7206            );
7207
7208        }
7209
7210
7211        if (
7212            document.readyState ===
7213            'loading'
7214        ) {
7215
7216            document.addEventListener(
7217                'DOMContentLoaded',
7218                initQnaPrivacy
7219            );
7220
7221        } else {
7222
7223            initQnaPrivacy();
7224
7225        }
7226
7227    })();
7228    </script>
7228
7229
7230
7231
7232    <!-- =====================================================
7233         SAINTPAIN PAGE TRANSITION
7234    ====================================================== -->
7235
7236    
7236<script>
7237    (function () {
7238
7239        var html =
7240            document.documentElement;
7241
7242
7243        function createTransitionLayer() {
7244
7245            var layer =
7246                document.getElementById(
7247                    'spPageTransition'
7248                );
7249
7250
7251            if (layer) {
7252                return layer;
7253            }
7254
7255
7256            layer =
7257                document.createElement(
7258                    'div'
7259                );
7260
7261
7262            layer.id =
7263                'spPageTransition';
7264
7265
7266            layer.setAttribute(
7267                'aria-hidden',
7268                'true'
7269            );
7270
7271
7272            document.body.appendChild(
7273                layer
7274            );
7275
7276
7277            return layer;
7278
7279        }
7280
7281
7282        function pageEnter() {
7283
7284            createTransitionLayer();
7285
7286
7287            html.classList.remove(
7288                'sp-page-leaving'
7289            );
7290
7291
7292            requestAnimationFrame(
7293                function () {
7294
7295                    requestAnimationFrame(
7296                        function () {
7297
7298                            html.classList.add(
7299                                'sp-page-loaded'
7300                            );
7301
7302                        }
7303                    );
7304
7305                }
7306            );
7307
7308        }
7309
7310
7311        function isSaintpainTopNavigation(link) {
7312
7313            if (!link) {
7314                return false;
7315            }
7316
7317
7318            var text =
7319                (
7320                    link.textContent || ''
7321                )
7322                .replace(/\s+/g, '')
7323                .toUpperCase();
7324
7325
7326            return (
7327
7328                text === 'SHOP'
7329                ||
7330                text === 'ABOUT'
7331                ||
7332                text === 'COLLECTION'
7333                ||
7334                text === 'STOCKISTS'
7335                ||
7336                text === 'BOARD'
7337
7338            );
7339
7340        }
7341
7342
7343        document.addEventListener(
7344            'click',
7345            function (event) {
7346
7347                if (
7348                    event.button !== 0
7349                    ||
7350                    event.metaKey
7351                    ||
7352                    event.ctrlKey
7353                    ||
7354                    event.shiftKey
7355                    ||
7356                    event.altKey
7357                ) {
7358
7359                    return;
7360
7361                }
7362
7363
7364                var link =
7365                    event.target.closest(
7366                        'a'
7367                    );
7368
7369
7370                if (!link) {
7371                    return;
7372                }
7373
7374
7375                if (
7376                    !isSaintpainTopNavigation(
7377                        link
7378                    )
7379                ) {
7380
7381                    return;
7382
7383                }
7384
7385
7386                var href =
7387                    link.getAttribute(
7388                        'href'
7389                    );
7390
7391
7392                if (
7393                    !href
7394                    ||
7395                    href === '#'
7396                    ||
7397                    href === '#none'
7398                    ||
7399                    href.indexOf('javascript:') === 0
7400                ) {
7401
7402                    return;
7403
7404                }
7405
7406
7407                if (
7408                    link.target === '_blank'
7409                ) {
7410
7411                    return;
7412
7413                }
7414
7415
7416                var targetUrl;
7417
7418
7419                try {
7420
7421                    targetUrl =
7422                        new URL(
7423                            href,
7424                            window.location.href
7425                        );
7426
7427                } catch (e) {
7428
7429                    return;
7430
7431                }
7432
7433
7434                if (
7435                    targetUrl.origin !==
7436                    window.location.origin
7437                ) {
7438
7439                    return;
7440
7441                }
7442
7443
7444                if (
7445                    targetUrl.href ===
7446                    window.location.href
7447                ) {
7448
7449                    return;
7450
7451                }
7452
7453
7454                event.preventDefault();
7455
7456
7457                html.classList.remove(
7458                    'sp-page-loaded'
7459                );
7460
7461
7462                html.classList.add(
7463                    'sp-page-leaving'
7464                );
7465
7466
7467                setTimeout(
7468                    function () {
7469
7470                        window.location.href =
7471                            targetUrl.href;
7472
7473                    },
7474                    300
7475                );
7476
7477            },
7478            true
7479        );
7480
7481
7482        if (
7483            document.readyState ===
7484            'loading'
7485        ) {
7486
7487            document.addEventListener(
7488                'DOMContentLoaded',
7489                pageEnter
7490            );
7491
7492        } else {
7493
7494            pageEnter();
7495
7496        }
7497
7498
7499        window.addEventListener(
7500            'pageshow',
7501            function () {
7502
7503                html.classList.remove(
7504                    'sp-page-leaving'
7505                );
7506
7507
7508                setTimeout(
7509                    function () {
7510
7511                        html.classList.add(
7512                            'sp-page-loaded'
7513                        );
7514
7515                    },
7516                    20
7517                );
7518
7519            }
7520        );
7521
7522    })();
7523    </script>
7523
7524<!-- =====================================================
7525     SAINTPAIN SILVER SPARKLE CURSOR
7526====================================================== -->
7527<style>
7528#spSparkleLayer{
7529    position:fixed;
7530    inset:0;
7531    z-index:999998;
7532    pointer-events:none;
7533    overflow:hidden;
7534}
7535
7536.spSparkle{
7537    position:fixed;
7538    width:12px;
7539    height:12px;
7540    pointer-events:none;
7541    opacity:0;
7542    will-change:transform,opacity;
7543}
7544
7545.spSparkle::before,
7546.spSparkle::after{
7547    content:"";
7548    position:absolute;
7549    left:50%;
7550    top:50%;
7551    transform:translate(-50%,-50%);
7552    border-radius:999px;
7553
7554    background:linear-gradient(
7555        90deg,
7556        rgba(255,255,255,0),
7557        rgba(255,255,255,.95) 35%,
7558        rgba(190,190,190,1) 50%,
7559        rgba(255,255,255,.95) 65%,
7560        rgba(255,255,255,0)
7561    );
7562
7563    box-shadow:
7564        0 0 3px rgba(255,255,255,.75),
7565        0 0 7px rgba(210,210,210,.45);
7566}
7567
7568.spSparkle::before{
7569    width:100%;
7570    height:1px;
7571}
7572
7573.spSparkle::after{
7574    width:1px;
7575    height:100%;
7576}
7577
7578@media (pointer:coarse),(hover:none){
7579    #spSparkleLayer{
7580        display:none !important;
7581    }
7582}
7583</style>
7584
7585<script>
7586(function(){
7587
7588    if(
7589        !window.matchMedia('(pointer:fine) and (hover:hover)').matches
7590    ){
7591        return;
7592    }
7593
7594    var layer=document.createElement('div');
7595    layer.id='spSparkleLayer';
7596    document.body.appendChild(layer);
7597
7598    var lastX=0;
7599    var lastY=0;
7600    var lastTime=0;
7601
7602    function random(min,max){
7603        return Math.random()*(max-min)+min;
7604    }
7605
7606    function sparkle(x,y,speed){
7607
7608        var star=document.createElement('span');
7609        star.className='spSparkle';
7610
7611        /*
7612         * 크기 랜덤
7613         * 작은 별이 대부분이고
7614         * 가끔 큰 별 등장
7615         */
7616        var size;
7617
7618        if(Math.random()>.82){
7619            size=random(16,24);
7620        }else{
7621            size=random(5,14);
7622        }
7623
7624        star.style.width=size+'px';
7625        star.style.height=size+'px';
7626
7627        /*
7628         * 커서 중심에서 자유롭게 흩어짐
7629         */
7630        var startX=x+random(-22,22);
7631        var startY=y+random(-22,22);
7632
7633        star.style.left=startX+'px';
7634        star.style.top=startY+'px';
7635
7636        layer.appendChild(star);
7637
7638        /*
7639         * 진행 방향도 제각각
7640         */
7641        var driftX=random(-32,32);
7642        var driftY=random(-28,28);
7643
7644        /*
7645         * 빠르게 움직일 때 살짝 더 흩어짐
7646         */
7647        var extra=Math.min(speed*.35,18);
7648
7649        driftX+=random(-extra,extra);
7650        driftY+=random(-extra,extra);
7651
7652        var rotate=random(-35,35);
7653
7654        var duration=random(520,900);
7655
7656        star.animate(
7657            [
7658                {
7659                    opacity:0,
7660                    transform:
7661                        'translate(0px,0px) ' +
7662                        'scale(.25) ' +
7663                        'rotate('+rotate+'deg)'
7664                },
7665
7666                {
7667                    opacity:1,
7668                    offset:.12,
7669                    transform:
7670                        'translate('+
7671                        (driftX*.15)+'px,'+
7672                        (driftY*.15)+'px) '+
7673                        'scale(1.15) '+
7674                        'rotate('+(rotate+15)+'deg)'
7675                },
7676
7677                {
7678                    opacity:.75,
7679                    offset:.45,
7680                    transform:
7681                        'translate('+
7682                        (driftX*.55)+'px,'+
7683                        (driftY*.55)+'px) '+
7684                        'scale(.95) '+
7685                        'rotate('+(rotate+35)+'deg)'
7686                },
7687
7688                {
7689                    opacity:0,
7690                    transform:
7691                        'translate('+
7692                        driftX+'px,'+
7693                        driftY+'px) '+
7694                        'scale(.35) '+
7695                        'rotate('+(rotate+65)+'deg)'
7696                }
7697            ],
7698            {
7699                duration:duration,
7700                easing:'cubic-bezier(.22,.61,.36,1)',
7701                fill:'forwards'
7702            }
7703        ).onfinish=function(){
7704            star.remove();
7705        };
7706    }
7707
7708    document.addEventListener(
7709        'pointermove',
7710        function(e){
7711
7712            if(
7713                e.pointerType &&
7714                e.pointerType!=='mouse'
7715            ){
7716                return;
7717            }
7718
7719            var now=performance.now();
7720
7721            var dx=e.clientX-lastX;
7722            var dy=e.clientY-lastY;
7723
7724            var speed=Math.sqrt(
7725                dx*dx+
7726                dy*dy
7727            );
7728
7729            lastX=e.clientX;
7730            lastY=e.clientY;
7731
7732            /*
7733             * 너무 촘촘하게 생성하지 않음
7734             */
7735            if(now-lastTime<22){
7736                return;
7737            }
7738
7739            lastTime=now;
7740
7741            /*
7742             * 기본 1~2개,
7743             * 빠르게 움직이면 2~4개
7744             */
7745            var count=
7746                speed>18
7747                ? Math.floor(random(2,5))
7748                : Math.floor(random(1,3));
7749
7750            for(
7751                var i=0;
7752                i<count;
7753                i++
7754            ){
7755                sparkle(
7756                    e.clientX,
7757                    e.clientY,
7758                    speed
7759                );
7760            }
7761
7762        },
7763        {passive:true}
7764    );
7765
7766})();
7767</script>
7767
7768
7769<span itemscope="" itemtype="https://schema.org/Organization">
7770<link itemprop="url" href="https://saintpain.co.kr">
7771<a itemprop="sameAs" href="https://www.instagram.com/saintpain_official/"></a>
7772<a itemprop="sameAs" href="https://www.facebook.com/Saintpainworks/"></a>
7773</span>
7774<script type="text/javascript" src="/app/Eclog/js/cid.generate.js?vs=3d0b473968a0ec4ec41e3bf59df3aa51&u=ultradoc1.1"></script>
vendor: 1 bytes, line 7774
7774
7775<script type="text/javascript" src="/app/Manage/js/inflowbeacon.js?vs=3d0b473968a0ec4ec41e3bf59df3aa51&u=ultradoc1.1"></script>
vendor: 1 bytes, line 7775
7775
7776<script>        (function (i, s, o, g) {
7777            var a = s.createElement(o), m = s.getElementsByTagName(o)[0];
7778            var initialized = false;
7779            var interval = null;
7780
7781            function safeInit() {
7782              if (initialized) return;
7783              if (typeof i.initCaWebAnalytics === 'function') {
7784                try {
7785                  i.initCaWebAnalytics({"mid":"ultradoc1","stype":"e","domain":"","shop_no":1,"lang":"ko_KR","mobile_flag":"F","send_endpoint":"https://ca-log.cafe24data.com","path_role":"PRODUCT_RECENT"});
7786                  initialized = true;
7787                } finally {
7788                  if (interval) clearInterval(interval);
7789                  a.onload = a.onreadystatechange = a.onerror = null;
7790                }
7791              }
7792            }
7793
7794            a.onload = a.onreadystatechange = function () {
7795              if (!a.readyState || a.readyState === 'loaded' || a.readyState === 'complete') {
7796                safeInit();
7797              }
7798            };
7799
7800            a.onerror = function () {
7801              if (interval) { clearInterval(interval); interval = null; }
7802              a.onload = a.onreadystatechange = a.onerror = null;
7803            };
7804
7805            interval = setInterval(safeInit, 200);
7806            setTimeout(function () {
7807              if (interval) { clearInterval(interval); interval = null; }
7808            }, 10000);
7809
7810            safeInit();
7811
7812            a.async = 1;
7813            a.setAttribute('crossorigin', 'anonymous');
7814            a.src = g;
7815            m.parentNode.insertBefore(a, m);
7816        })(window, document, 'script', "//optimizer.poxo.com/ca2/analytics.js?v=20261009");</script>
7816
7817
7818                
7818<script>
7819                try {
7820                    // Account ID 적용
7821                    if (!wcs_add) var wcs_add = {};
7822                    wcs_add["wa"] = "s_313dc9c371a5";
7823            
7824                    // 네이버 페이 White list가 있을 경우
7825                    wcs.checkoutWhitelist = ["ultradoc1.cafe24.com", "www.ultradoc1.cafe24.com", "m.ultradoc1.cafe24.com", "master-mechanics.com", "www.master-mechanics.com", "m.master-mechanics.com", "saintpain.co.kr", "www.saintpain.co.kr", "m.saintpain.co.kr"];
7826                
7827                    // 레퍼러 
7828                    wcs.setReferer("");
7829
7830                    // 유입 추적 함수 호출
7831                    wcs.inflow("saintpain.co.kr");
7832
7833                    // 로그수집
7834                    wcs_do();
7835                } catch (e) {};
7836                </script>
7836
7837            
7838
7839<!-- External Script Start -->
7840
7841<!-- fbe -->
7842<!-- CMC3 script -->
7843<div id="fbe_common_top_script" style="display:none;">
7844  
7844<script type="text/javascript">
7845if (typeof facebookChannel === 'undefined') {
7846  var facebookChannel = {
7847    mall_id: CAFE24.SHOP.getMallID(),
7848    shop_no: CAFE24.SDE_SHOP_NUM,
7849    shop_id: CAFE24.SHOP.getMallID() + '.' + CAFE24.SDE_SHOP_NUM,
7850    external_id: null,
7851    event_id: null,
7852
7853    setInitActivated: function(is_activated) {
7854      window.top.fbe_init_activated = !!is_activated;
7855    },
7856    getInitActivated: function() {
7857      return !!window.top.fbe_init_activated;
7858    },
7859    setEventActivated: function(event_type, is_activated) {
7860      if (typeof event_type === 'string' && event_type) {
7861        let key = 'fbe_' + event_type + '_activated'
7862        window.top[key] = !!is_activated;
7863      }
7864    },
7865    getEventActivated: function(event_type) {
7866      if (typeof event_type === 'string' && event_type) {
7867        let key = 'fbe_' + event_type + '_activated'
7868        return !!window.top[key];
7869      }
7870      return false;
7871    },
7872    getCookie: function(name) {
7873      return (name = (document.cookie + ';').match(name + '=.*;')) && name[0].split(/=|;/)[1];
7874    },
7875    getExternalId: function() {
7876      return facebookChannel.getCookie('fb_external_id');
7877    },
7878    getEventId: function() {
7879      return facebookChannel.getCookie('fb_event_id');
7880    },
7881    getInt: function(value) {
7882      let value_int = parseInt(value);
7883      value_int = isNaN(value_int) ? 0 : value_int;
7884      return value_int;
7885    },
7886    getFloat: function(value) {
7887      let value_float = parseFloat(value);
7888      value_float = isNaN(value_float) ? 0.00 : value_float.toFixed(2);
7889      return value_float;
7890    },
7891    init: function() {
7892      if (facebookChannel.getInitActivated()) {
7893        return;
7894      }
7895      facebookChannel.setInitActivated(true);
7896
7897      !function(f,b,e,v,n,t,s)
7898      {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
7899        n.callMethod.apply(n,arguments):n.queue.push(arguments)};
7900        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
7901        n.queue=[];t=b.createElement(e);t.async=!0;
7902        t.src=v;s=b.getElementsByTagName(e)[0];
7903        s.parentNode.insertBefore(t,s)}(window,document,'script',
7904        'https://connect.facebook.net/en_US/fbevents.js');
7905
7906      if ((typeof EC_GLOBAL_INFO !== 'undefined' && EC_GLOBAL_INFO.getCountryCode() === 'US') || (typeof SHOP !== 'undefined' && SHOP.getLanguage() === 'en_US')) {
7907        fbq('dataProcessingOptions', ['LDU'], 0, 0);
7908      }
7909
7910      if (typeof ECLOG !== 'undefined' && !!ECLOG.EXTERNAL_ID) {
7911        ECLOG.EXTERNAL_ID.chk(facebookChannel.shop_id, function(error, external_id) {
7912          if (error || !external_id) {
7913            external_id = facebookChannel.getExternalId();
7914            console.info('external_id is cookie value.', '(1)');
7915          }
7916          fbq('init', '761457469011527',{external_id: external_id}, {agent: 'plcafe24'});
7917          fbq('trackSingle', '761457469011527', 'PageView');
7918          facebookChannel.external_id = external_id;
7919          facebookChannel.basketEvent();
7920        });
7921      } else {
7922        let external_id = facebookChannel.getExternalId();
7923        console.info('external_id is cookie value.', '(2)');
7924
7925        fbq('init', '761457469011527',{external_id: external_id}, {agent: 'plcafe24'});
7926        fbq('trackSingle', '761457469011527', 'PageView');
7927        facebookChannel.external_id = external_id;
7928        facebookChannel.basketEvent();
7929      }
7930    },
7931    pixelEvent: function(event_type, callback, is_cookie_event) {
7932      if (facebookChannel.getEventActivated(event_type)) {
7933        return;
7934      }
7935      facebookChannel.setEventActivated(event_type, true);
7936      is_cookie_event = !!is_cookie_event;
7937
7938      let retry = 0;
7939      let execute = function() {
7940        if (!facebookChannel.external_id) {
7941          if (retry < 300) {
7942            retry++;
7943            if (retry >= 5) {
7944              console.warn('retry #' + retry, event_type);
7945            }
7946            setTimeout(execute, 1000);
7947          } else {
7948            console.warn('external_id is empty.');
7949          }
7950          return;
7951        }
7952
7953        if (callback.length === 0) {
7954          callback();
7955        }
7956        else if (!is_cookie_event && typeof ECLOG !== 'undefined' && !!ECLOG.EVENT_ID) {
7957          ECLOG.EVENT_ID.chk(facebookChannel.shop_id, function(error, event_id) {
7958            if (error || !event_id) {
7959              event_id = facebookChannel.getEventId();
7960              console.info('event_id is cookie value.', '(1)');
7961            }
7962            facebookChannel.event_id = event_id;
7963            if (event_id) {
7964              callback(event_id);
7965            } else {
7966              console.warn('event_id is empty.', '(1)');
7967            }
7968          });
7969        }
7970        else {
7971          let event_id = facebookChannel.getEventId();
7972          console.info('event_id is cookie value.', '(2)');
7973          facebookChannel.event_id = event_id;
7974          if (event_id) {
7975            callback(event_id);
7976          } else {
7977            console.warn('event_id is empty.', '(2)');
7978          }
7979        }
7980      };
7981      execute();
7982    },
7983    messengerChatPlugin: function() {
7984      let event_type = 'messenger';
7985      let sdk_version = '';
7986      let locale = '';
7987      if (!sdk_version) {
7988        console.warn('sdk_version is empty.');
7989        return;
7990      }
7991      if (!locale) {
7992        console.warn('locale is empty.');
7993        return;
7994      }
7995      if (facebookChannel.getEventActivated(event_type)) {
7996        return;
7997      }
7998      facebookChannel.setEventActivated(event_type, true);
7999
8000      window.fbAsyncInit = function() {
8001        FB.init({
8002          appId : '216637735743129',
8003          autoLogAppEvents : true,
8004          xfbml : true,
8005          version : sdk_version
8006        });
8007      };
8008      (function(d, s, id) {
8009        var js, fjs = d.getElementsByTagName(s)[0];
8010        if (d.getElementById(id)) return;
8011        js = d.createElement(s); js.id = id;
8012        js.src = 'https://connect.facebook.net/' + locale + '/sdk/xfbml.customerchat.js';
8013        fjs.parentNode.insertBefore(js, fjs);
8014      }(document, 'script', 'facebook-jssdk'));
8015    },
8016    basketEvent: function() {
8017      let event_key = 'AddToCart';
8018      if (facebookChannel.getEventActivated(event_key + '_listener')) {
8019        return;
8020      }
8021      facebookChannel.setEventActivated(event_key + '_listener', true);
8022
8023      facebookChannel.pixelEvent(event_key, function(event_id) {
8024        EC$("body").bind("EC_PRODUCT_ACTION_BASKET", function(e, params) {
8025          try {
8026            // 필수 데이터 검증
8027            let validation_error = null;
8028
8029            if (!params || typeof params !== 'object') {
8030              validation_error = 'params가 없거나 유효하지 않음';
8031            } else if (!params.product_no) {
8032              validation_error = 'product_no가 없음';
8033            } else if (!params.contents || params.contents.length === 0) {
8034              validation_error = 'contents가 비어있음';
8035            } else if (typeof params.total_price === 'undefined' || params.total_price === null) {
8036              validation_error = 'total_price가 없음';
8037            } else {
8038              // contents 배열의 각 항목 검증
8039              for (let i = 0; i < params.contents.length; i++) {
8040                let item = params.contents[i];
8041                if (!item.variant_code) {
8042                  validation_error = 'contents[' + i + '].variant_code가 없음';
8043                  break;
8044                }
8045                if (!item.quantity) {
8046                  validation_error = 'contents[' + i + '].quantity가 없음';
8047                  break;
8048                }
8049                if (typeof item.price === 'undefined' || item.price === null) {
8050                  validation_error = 'contents[' + i + '].price가 없음';
8051                  break;
8052                }
8053              }
8054            }
8055
8056            // 검증 실패 시 로그 전송 후 종료
8057            if (validation_error) {
8058              console.warn('AddToCart 이벤트 무시: ' + validation_error);
8059              window.EC_JET?.message?.({
8060                mall_id: facebookChannel.mall_id,
8061                shop_no: facebookChannel.shop_no,
8062                pixel_id: 761457469011527,
8063                external_id: facebookChannel.external_id,
8064                event_id: event_id,
8065                validation_error: validation_error,
8066                params: params
8067              }, 'MBE_ADDTOCART_VALIDATION_ERROR');
8068              return;
8069            }
8070
8071            let event_data = {
8072              contents: params.contents.map(function(v) {
8073                return {
8074                  id: params.product_no + '.' + v.variant_code,
8075                  quantity: facebookChannel.getInt(v.quantity),
8076                  item_price: facebookChannel.getFloat(v.price)
8077                };
8078              }),
8079              content_type: 'product',
8080              value: facebookChannel.getFloat(params.total_price),
8081              currency: params.currency
8082            };
8083
8084            let event_log_data = Object.assign({
8085              mall_id: facebookChannel.mall_id,
8086              shop_no: facebookChannel.shop_no,
8087              pixel_id: 761457469011527,
8088              external_id: facebookChannel.external_id,
8089              event_id: event_id
8090            }, event_data);
8091
8092            window.EC_JET?.message?.(event_log_data, 'MBE_ADDTOCART_EVENT');
8093            fbq('trackSingle', '761457469011527', event_key, event_data, {eventID: event_id});
8094          } catch (e) { console.error(e); }
8095        });
8096      });
8097    }
8098  };
8099
8100  window.addEventListener('load', facebookChannel.init, false);
8101}
8102</script>
8102
8103<noscript><img height="1" width="1" style="display:none"
8104  src="https://www.facebook.com/tr?id=761457469011527&ev=PageView&noscript=1"
8105/></noscript>
8106</div>
8107<!-- CMC3 script -->
8108
8109<!-- External Script End -->
8110
8111<script type="text/javascript" src="//t1.kakaocdn.net/kakao_js_sdk/v1/kakao.min.js" charset="utf-8"></script>
vendor: 1 bytes, line 8111
8111
8112<script type="text/javascript" src="/ind-script/i18n.php?v=2610081510&lang=ko_KR&domain=front&type=" charset="utf-8"></script>
8112
8113
8114<script src="/ind-script/optimizer.php?filename=vZhLc6M4EMfvMdf9HMzUVm3t1Y_JbmqSjSvOTM5CNLZiSa3VIzbz6acBTzYYEyOc2oMfQP-6JfFXd0NhmYId2m1qwWGwHNJnl4rPf-rk2f1WdK8GYRjfps__BrDl4ef35I_k0yB72Huwmkl3OJFwxK2AcWywMmKQCfCk0JEAk4K5GIauerT1hIzFNVGthc2ZBy8UpAoVaJ8Cv6v_PAm_efyxYJ4lSuiztBQZ2cIj_e-zdcYK7YteV8hDFfgarZqj9halBNtnvZTBTY2ZWZGveyMGL2TftcJiPdsrh5LsUF95NFdSaLjKmNb9kRuQo1Ko37fZM03C1aQRY8Gf81hbe1BG0jq-NWXGpHeYCQnpwxuqGUFnjj3WCvNAp9xOmCHOi6B5tSgp2eWB-0QdSWgo1wlIQkm_NTp9C0r2o5TI8gGmKnhWxbjPHNiX9rL2IAZlWQh5Rgw5FCxIX03NKWb9rKOD6tJqg6bl_LqGv7Itw3RbfS_FHmRXme_A8_pefjtxK3uABWRhPdQ56WmNtrwVzg9EHqAAC5rDPNjqt1xawUfmxGwtauj_z8Y5JSPtSCluHA_MCb0exyrwLK-S59GCz5DZvLXidDbJqrMD780_sPsV5Nm1U1AE9VpGBrL0WTZbOkJGB_Be6m0EcW_qDPJl7y2r8fq4PlyhzDH4j3H2qunLXd0otv4gVwvhqAKUgirBxQ5vyMmKJCxhBRLqxPxRg7TkbsbcFj7oZlwHnR822-XOnpSLd_TqYt4p7dEO9CXxZ0LnF-CLE1knAv9OmSFnx1Lpqau_ykPqKMDEHG-oQRQ_HE0KavyYHxf1MjgML7ztXBgtlf_Qaex2pM-TcBsZnX4fgFNbfcy9bX82XkkyEV6A67OZ29J4_AplpwtkmpJfuwuswk8ctWkwWYcTpe0Ew1ypefMdaa1AZd027Qx0b3OwXPtIrEl5YzlzquIMIg-iiWTnGAzq-NHeUVt_oqCdoRZg0InYWJWmT7UUAzCOIXpqtt4MkVCzg7ZQUguYj2If0TM5HzHeWqexkgENhRgn0VtWRsf7y7I8VizT4JEStuA1TAlsF6tRelITSzTBxG6K4Cg0WNpSLyJ-cRfNQ-JqI4yhhmWa55QlXezg6WFsC69FJF4WLQcjtk8tq79F9WaoHC3LA__IsgvoqkcdO4EFPWQJeaMLjNWAZEKxTEJ0dMP8xqKEyUvTJ2Gsfm6PXnL0IGZwwm_K30TiWugB5m6XcHb8Zq2y_XJ4hO1W8uqy41YYP4ipXmOk06otMcDr118F65a9k2grQxgzf_clm6UnQbgWe7r-Ew&type=js&k=76ece9a03757b0f3ba3984f8e8ea04003fde1092&t=1790658558" ></script>
8114<script src="/ind-script/optimizer_user.php?filename=jY9BDsIwDATvtFfeYfUtvKBJrNYlcUwcC5XXExVOiKo92ZZmNV4N2AVUmhj0TjwMEMc1WwU3KnlYFDRSYxKy9Yte9Zh_kmC5OOMQsU_E_2ONTDlYRJDSpq-gY8ROCnk8J1oehmXtnWQx2Rf9xrblHPq5d__3OaW8Y8UXEFM96v41JouVdM5ym0mEeGq5Nw&type=js&k=329de5ed8fa07f49159d0c20cf44b9369711bd0c&t=1787734807&user=T" ></script>
vendor: 1 bytes, line 8114
8114
8115<script type="text/javascript">
8116var sIsFrontDesignChangeRequired = 'F';
8117var sYtshopping = 'F';
8118var sIsYoutubeShops = 'F';
8119var sIsValidChRef = 'F';
8120var sChRef = '';
8121var sIsDropshipping = 'F';
8122if (sIsValidChRef === 'T') {
8123sessionStorage.setItem('ch_ref', sChRef);
8124}
8125// ch_ref 존재 여부 체크
8126CAFE24.hasChRef = function() {
8127if (sIsValidChRef === 'T' && sessionStorage.getItem('ch_ref')) {
8128return true;
8129}
8130return false;
8131}
8132// ch_ref 데이터 조회
8133CAFE24.getChRefData = function() {
8134if (sIsValidChRef === 'T') {
8135return sessionStorage.getItem('ch_ref');
8136}
8137}
8138// 프론트 디자인 변경이 필요한지 여부 반환
8139CAFE24.checkChannelUI = function() {
8140// [ECHOSTING-598429] 드롭쉬핑은 항상 전체 UI 노출
8141if (sIsDropshipping === 'T') {
8142return false;
8143}
8144if ((sIsFrontDesignChangeRequired === 'T' && sessionStorage.getItem('ch_ref')) || sIsYoutubeShops === 'T') {
8145return true;
8146} else {
8147return false;
8148}
8149}
8150// 파라미터에 ch_ref 추가
8151CAFE24.attachChRef = function(sUrl) {
8152if (sUrl) {
8153var sChRef = CAFE24.getChRefData();
8154if (sChRef) {
8155var sSeparator = (sUrl.includes('?')) ? '&' : '?';
8156sUrl += sSeparator + 'ch_ref=' + sChRef;
8157}
8158}
8159return sUrl;
8160}
8161var sIsCheckout = 'F';
8162var sCheckoutToken = '';
8163if (sIsCheckout === 'T') {
8164sessionStorage.setItem('checkoutToken', sCheckoutToken);
8165} else {
8166sessionStorage.removeItem('checkoutToken');
8167}
8168CAFE24.getCheckoutToken = function() {
8169if (sIsCheckout === 'T') {
8170return sessionStorage.getItem('checkoutToken');
8171}
8172}
8173CAFE24.attachCheckoutParam = function(sUrl) {
8174if (sUrl) {
8175var sCheckoutToken = CAFE24.getCheckoutToken();
8176if (sCheckoutToken) {
8177var sSeparator = (sUrl.includes('?')) ? '&' : '?';
8178sUrl += sSeparator + 'checkoutToken=' + sCheckoutToken;
8179}
8180}
8181return sUrl;
8182}
8183CAFE24.MOBILE_WEB = false; var mobileWeb = CAFE24.MOBILE_WEB;
8184try {
8185var isUseLoginKeepingSubmit = false;
8186// isSeqNoKeyExpiretime
8187function isSeqNoKeyExpiretime(iExpiretime)
8188{
8189var sDate = new Date();
8190var iNow = Math.floor(sDate.getTime() / 1000);
8191// 유효시간 확인
8192if (iExpiretime > iNow) {
8193return false;
8194}
8195return true;
8196}
8197function isUseLoginKeeping()
8198{
8199// 디바이스 확인
8200if (EC_MOBILE_DEVICE === false) {
8201return;
8202}
8203// 로그인 여부
8204var isLogin = document.cookie.match(/(?:^| |;)iscache=F/) ? true : false
8205if (isLogin) {
8206return;
8207}
8208var sLoginKeepingInfo = localStorage.getItem('use_login_keeping_info');
8209var iSeqnoExpiretime;
8210var iSeqNoKey;
8211if (sLoginKeepingInfo == null) {
8212iSeqnoExpiretime = localStorage.getItem('seq_no_key_expiretime');
8213iSeqNoKey = localStorage.getItem('seq_no_key');
8214// 유효시간, key 값 확인
8215if (iSeqnoExpiretime === null || iSeqNoKey === null) {
8216return;
8217}
8218} else {
8219var oLoginKeepingInfo = JSON.parse(sLoginKeepingInfo);
8220iSeqNoKey = oLoginKeepingInfo.seq_no_key;
8221iSeqnoExpiretime = oLoginKeepingInfo.seq_no_key_expiretime;
8222if (isNaN(iSeqNoKey) === true || isNaN(iSeqnoExpiretime) === true) {
8223return;
8224}
8225}
8226if (isSeqNoKeyExpiretime(iSeqnoExpiretime) === false) {
8227return;
8228}
8229useLoginKeepingSubmit();
8230}
8231function findGetParamValue(paramKey)
8232{
8233var result = null,
8234tmp = [];
8235location.search.substr(1).split('&').forEach(function (item) {
8236tmp = item.split('=');
8237if (tmp[0] === paramKey) result = decodeURIComponent(tmp[1]);
8238});
8239return result;
8240}
8241function useLoginKeepingSubmit()
8242{
8243var iSeqnoExpiretime;
8244var iSeqNoKey;
8245var sUseLoginKeepingIp;
8246var sLoginKeepingInfo = localStorage.getItem('use_login_keeping_info');
8247if (sLoginKeepingInfo == null) {
8248iSeqnoExpiretime = localStorage.getItem('seq_no_key_expiretime');
8249iSeqNoKey = localStorage.getItem('seq_no_key');
8250} else {
8251var oLoginKeepingInfo = JSON.parse(sLoginKeepingInfo);
8252iSeqNoKey = oLoginKeepingInfo.seq_no_key;
8253iSeqnoExpiretime = oLoginKeepingInfo.seq_no_key_expiretime;
8254sUseLoginKeepingIp = oLoginKeepingInfo.use_login_keeping_ip;
8255}
8256var oForm = document.createElement('form');
8257oForm.method = 'post';
8258oForm.action = '/exec/front/member/LoginKeeping';
8259document.body.appendChild(oForm);
8260var oSeqNoObj = document.createElement('input');
8261oSeqNoObj.name = 'seq_no_key';
8262oSeqNoObj.type = 'hidden';
8263oSeqNoObj.value = iSeqNoKey;
8264oForm.appendChild(oSeqNoObj);
8265oSeqNoObj = document.createElement('input');
8266oSeqNoObj.name = 'seq_no_key_expiretime';
8267oSeqNoObj.type = 'hidden';
8268oSeqNoObj.value = iSeqnoExpiretime;
8269oForm.appendChild(oSeqNoObj);
8270var returnUrl = findGetParamValue('returnUrl');
8271if (returnUrl == '' || returnUrl == null) {
8272returnUrl = location.pathname + location.search;
8273}
8274oSeqNoObj = document.createElement('input');
8275oSeqNoObj.name = 'returnUrl';
8276oSeqNoObj.type = 'hidden';
8277oSeqNoObj.value = returnUrl;
8278oForm.appendChild(oSeqNoObj);
8279if (sUseLoginKeepingIp != undefined) {
8280oSeqNoObj = document.createElement('input');
8281oSeqNoObj.name = 'use_login_keeping_ip';
8282oSeqNoObj.type = 'hidden';
8283oSeqNoObj.value = sUseLoginKeepingIp;
8284oForm.appendChild(oSeqNoObj);
8285}
8286oForm.submit();
8287isUseLoginKeepingSubmit = true;
8288}
8289isUseLoginKeeping();
8290} catch(e) {
8291}
8292CAFE24.SHOP_CURRENCY_INFO = {"1":{"aShopCurrencyInfo":{"currency_code":"KRW","currency_no":"410","currency_symbol":"\uffe6","currency_name":"South Korean won","currency_desc":"\uffe6 \uc6d0 (\ud55c\uad6d)","decimal_place":0,"round_method_type":"F"},"aShopSubCurrencyInfo":null,"aBaseCurrencyInfo":{"currency_code":"KRW","currency_no":"410","currency_symbol":"\uffe6","currency_name":"South Korean won","currency_desc":"\uffe6 \uc6d0 (\ud55c\uad6d)","decimal_place":0,"round_method_type":"F"},"fExchangeRate":1,"fExchangeSubRate":null,"aFrontCurrencyFormat":{"head":"&#8361;","tail":""},"aFrontSubCurrencyFormat":{"head":"","tail":""},"bPresentmentEnabled":false,"aPresentmentCurrencyInfo":null,"fExchangePresentmentRate":null,"aFrontPresentmentCurrencyFormat":null,"bGlobaleEnabled":false}}; var SHOP_CURRENCY_INFO = CAFE24.SHOP_CURRENCY_INFO;
8293if (typeof CAFE24.SHOP_FRONT_NEW_OPTION_COMMON !== "undefined") {CAFE24.SHOP_FRONT_NEW_OPTION_COMMON.initObject();}
8294if (typeof CAFE24.SHOP_FRONT_NEW_OPTION_BIND !== "undefined") {CAFE24.SHOP_FRONT_NEW_OPTION_BIND.initChooseBox();}
8295if (typeof CAFE24.SHOP_FRONT_NEW_OPTION_DATA !== "undefined") {CAFE24.SHOP_FRONT_NEW_OPTION_DATA.initData();}
8296var sBlackType = ""
8297var set_option = {"setproduct_require":"setproduct_require","setproduct_option":"setproduct_option","setproduct_add_option":"setproduct_add_option","addproduct_option":"addproduct_option","addproduct_add_option":"addproduct_add_option","code_setproduct":"setproduct","code_addproduct":"addproduct"};
8298var aWishlistProductData = [];
8299var sMileageName = '적립금';
8300var sMileageUnit = '[:PRICE:]원';
8301var sDepositName = '예치금';
8302var sDepositUnit = '원';
8303CAFE24.APPSCRIPT_ASSIGN_DATA = CAFE24.APPSCRIPT_ASSIGN_DATA || [{'src':'https://calendar-app.cafe24.com/openapi/inject.js?vs=20240919102943.1&client_id=A8RQp67UIt9nBlqvThz2jC'},{'src':'https://cax.channel.io/cafe24/plugins/c64d415a-ac9c-4900-9842-eeaed0b16ff7.js?vs=20250417162013.1&client_id=QKWiDNLcK9koJO0swpfnuE'}];
8304CAFE24.APPSCRIPT_SDK_DATA = CAFE24.APPSCRIPT_SDK_DATA || ['product','store','category','collection','supply','order','shipping','application','customer','promotion','community','design','notification','personal','privacy'];
8305var EC_APPSCRIPT_ASSIGN_DATA = CAFE24.getDeprecatedNamespace('EC_APPSCRIPT_ASSIGN_DATA');
8306var EC_APPSCRIPT_SDK_DATA = CAFE24.getDeprecatedNamespace('EC_APPSCRIPT_SDK_DATA');
8307</script>
8307</body>
8308</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.