PageSourceSearch

https://www.hiver.co.kr/_next/static/chunks/pages/coordi/[coordiId]-92a32aeac81132cd.js

js hiver.co.kr collected 2026-10-05 18:41:08 UTC 87,631 bytes, 1,693 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7730],{2875:(e,t,i)=>{"use strict";i.d(t,{Og:()=>o,Qw:()=>l,tN:()=>n});var r=i(64427);let n=["7048","7049"],l={"최소 주문수량 미만":"최소 구매가능 수량을 충족하지 못했습니다."},o={1001:"필수값이 누락되었습니다",1002:"실행 권한이 없습니다",1003:"중복된 요청입니다",1004:"비회원은 실행 권한이 없습니다",1006:"미인증회원은 결제할 수 없습니다",1007:`잘못된 접근입니다. 해당 기획전은 ${r.OX.KR}에서 진행하는 기획전이 아닙니다`,1011:"해당 기획전은 앱에서만 확인 가능합니다.",2001:"존재하지 않는 상품입니다",2002:"구매할 수 없는 상품이 포함되어 있어 주문이 불가합니다",2003:"품절된 상품이 있어 주문이 불가합니다",2004:"구매 불가능한 상품이 포함되어 있습니다",2005:"구매 가능 수량을 충족하지 못한 상품이 있습니다",3001:"가격정보가 일치하지 않습니다",3002:"포인트 조회에 실패했습니다",3003:"사용할 포인트가 보유한 포인트보다 많습니다",3004:"사용 가능한 포인트 범위를 초과했습니다",3005:"쿠폰사용 최소 금액 미달입니다",3006:"쿠폰사용 불가 상품이 포함되어 있습니다",3007:"쿠폰 할인 금액이 일치하지 않습니다",3008:"상품 가격이 변경되어 예상 결제 금액과 일치하지 않습니다. 새로고침 후에 다시 진행해 주세요",3009:"존재하지 않는 계좌입니다",3014:"유효하지 않은 배송지 정보입니다",3020:"배송지 주소를 도로명 주소로 수정해 주세요",3023:"해당 상품의 해외배송여부가 변경되었습니다",3024:"존재하지 않는 개인통관고유부호입니다",3025:"현재 사용 중이 아닌 개인통관고유부호입니다",3026:"개인통관고유부호의 발급자명과 상품을 받는 분(배송지)의 이름이 일치하지 않습니다",4001:"닉네임 형식이 올바르지 않아요",4002:"이메일 형식이 올바르지 않아요",4003:"이미 사용 중인 닉네임이에요",4004:"SNS로 가입된 회원이에요",4005:"존재하지 않는 이메일 주소예요",4006:"SNS로 가입된 사용자예요",4007:"이미 사용 중인 이메일 주소예요",4008:"유효하지 않은 본인인증 번호예요",4009:"중복된 본인인증 번호예요",4010:"요청 주신 정보와 동일한 회원 정보가 없어요.\n다시 한 번 확인해 주세요",4011:"기존 비밀번호를 다시 확인해 주세요",4012:"8~20자 영문 대소문자, 숫자, 특수문자를 사용해 주세요",4013:"처리할 수 없어요",4014:"주문 진행 상태이므로 탈퇴가 불가능해요.\n주문 상태가 완료되면 탈퇴 신청해 주세요",4015:"탈퇴 후 한달 이내에는 재가입할 수 없어요",4016:"서비스 계정 사용 동의가 필요해요",4017:"페이스북 아이디 정보가 누락됐어요",4018:"브랜디 이용약관, 개인정보수집이용 동의 필요",4019:"야간 혜택 알림 수신 동의 시 이벤트/마케팅 수신 동의 필수",4020:"탈퇴 후 한 달간 재가입 불가 상태예요",4021:"이메일 계정 전환이 필요해요",4022:"비밀번호를 다시 확인해 주세요",4023:"동일한 SNS계정으로 이미 가입되어 있어, 해당 계정에 연동이 불가해요",4024:"기존과 다른 번호를 입력해 주세요",4025:"SNS계정으로 추가 가입이 불가해요",4026:"카카오 계정 연동이 해제되어 이용이 어려워요. 카카오 고객센터로 문의 후 이용해 주세요",4027:"만 14세 이상인 사용자만 서비스 이용이 가능해요",4028:"카카오 계정이 사용 중지됐어요. 카카오 고객센터로 문의 후 이용해 주세요",4030:"추천인 코드가 올바르지 않아요",4031:"자신의 추천인 코드는 입력할 수 없어요",4032:"추천인 코드 등록 기간이 지났어요",4036:"찾으신 아이디와 입력하신 아이디가 일치하지 않아요",5001:"존재하지 않는 포인트코드입니다",5002:"유효하지 않은 포인트코드입니다",5003:"유효기간이 지난 포인트코드입니다",5004:"준비된 포인트가 소진되었어요.",5005:"이미 사용한 포인트코드입니다",6001:"적용 가능한 쿠폰이 없습니다",6002:"이미 사용한 쿠폰입니다",6003:"유효기간이 지난 쿠폰입니다",6004:"준비된 쿠폰이 소진되었어요.",6005:"이미 등록된 쿠폰입니다",6006:"파라미터가 유효하지 않은 제휴쿠폰입니다",6007:"데이터가 유효하지 않는 제휴쿠폰입니다",6008:"할인율이 20%를 초과하는 제휴쿠폰입니다",6009:"유효하지 않은 쿠폰입니다. 고객센터로 문의 부탁드립니다",7001:"존재하지 않는 주문정보입니다",7002:"요청한 회원의 주문건이 아닙니다",7003:"체크아웃 정보가 존재하지 않습니다",7004:"배송준비 일정 정보가 없습니다",7005:"배송준비상태 변경 후 3영업일 이내에는 취소를 진행할 수 없습니다",7006:"현재 주문상태에서는 취소를 진행할 수 없습니다",7007:"현재 주문상태에서는 환불을 진행할 수 없습니다",7008:"금액 계산 오류입니다",7009:"주문취소 유형이 없습니다",7010:"주문취소 정보 입력 오류입니다",7011:"주문상세 주문취소 정보 갱신 오류입니다",7012:"취소 정보 입력 오류입니다",7013:"올바르지 않은 은행 코드입니다",7014:"계좌정보 입력 오류입니다",7015:"취소 정보 입력 오류입니다",7016:"회원 포인트 환급 오류입니다",7017:"결제 수단에 맞지 않는 포인트 환급액입니다",7018:"지원하지 않는 주문취소 타입입니다",7019:"주문상세 변경이력 입력 오류입니다",7020:"주문상세 주문상태 수정 오류입니다",7021:"존재하지 않는 PG 승인결과 정보입니다",7022:"주문 취소 금액이 결제금액과 일치하지 않습니다",7023:"PG사측 주문 취소 처리에 실패하였습니다",7024:"PG사측 부분 취소 처리에 실패하였습니다",7025:"서비스 노출 정보 생성에 실패하였습니다",7026:"지원하지 않는 취소/환불정보 조회 타입입니다",7027:"환불 정보 입력 오류입니다",7028:"올바르지 않은 환불사유 코드입니다",7029:"현재 주문상태에서는 요청을 진행할 수 없습니다",7030:"주문 진행중인 선택형 상품이 있어 요청을 진행할 수 없습니다",7031:"선택형 상품 우선 철회 불가합니다",7032:"필수옵션상품이 선택되지 않았습니다",7033:"필수옵션상품 삭제가 불가능합니다",7034:"네이버페이 결제 요청 중 오류가 발생하였습니다",7035:"지원하지 않는 PG타입입니다",7036:"카카오페이 요청 실패했습니다",7037:"비회원 주문 시 쿠폰, 포인트를 사용할 수 없습니다",7038:"입력정보와 일치하는 비회원 주문건이 존재하지 않습니다",7039:"유효하지 않은 휴대폰 인증결과코드입니다",7040:"지원하지 않는 에스크로 결제정보입니다",7043:"동일 옵션의 최대 구매 수량을 초과하였습니다. 장바구니를 확인해주세요",7046:"품절상품이 없습니다",7047:"첫구매 쿠폰 선취소가 필요합니다",7048:"장바구니 담기에 실패했습니다",7049:"구매 가능 수량을 초과한 상품이 있습니다",7050:"최소 구매가능 수량을 충족하지 못했습니다",7063:"은행 점검(23:50 ~ 00:10)으로 \n 주문취소가 일시적으로 불가능합니다. \n 점검 이후 다시 시도해 주세요.",8003:"할부 또는 무이자 할부가\n지원되지 않는 카드입니다.",8005:"카드 사용이 거절되었습니다.\n카드사로 문의 바랍니다.",8009:"한도초과 혹은 잔액부족으로\n결제에 실패했습니다.",8010:"할인 적용 시\n주문 최소 금액을 넘어야\n결제가 가능합니다.",8012:"해당 은행 시스템 점검 시간입니다.\n잠시 후 다시 시도해 주세요."}},9220:(e,t,i)=>{"use strict";i.d(t,{A:()=>h});var r=i(18153),n=i(38993),l=i(47740),o=i(14232);let a=(0,n.AH)`
2  position: fixed;
3  top: 0;
4  left: 0;
5  display: flex;
6  align-items: center;
7  justify-content: center;
8  width: 100%;
9  height: 100%;
10  padding: 20px;
11  box-sizing: border-box;
12  z-index: 300;
13  opacity: 0;
14  transition: opacity 0.2s ease;
15
16  &.modal-open {
17    opacity: 1;
18  }
19`,d=(0,n.AH)`
20  position: fixed;
21  top: 0;
22  left: 0;
23  width: 100vw;
24  height: 100vh;
25  background: rgba(0, 0, 0, 0.4);
26  z-index: 301;
27`,s=(0,n.AH)`
28  position: relative;
29  display: flex;
30  flex-direction: column;
31  width: 100%;
32  max-width: 480px;
33  max-height: 85vh;
34  background: #fff;
35  border-radius: 16px;
36  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.16);
37  z-index: 302;
38  overflow: hidden;
39`,p=(0,n.AH)`
40  display: flex;
41  align-items: flex-start;
42  justify-content: space-between;
43  flex: 0 0 auto;
44  padding: 16px;
45
46  .modal-title {
47    margin: 0;
48    font-weight: bold;
49    font-size: 18px;
50    line-height: 26px;
51    color: #202429;
52  }
53  .modal-close {
54    display: inline-block;
55    width: 24px;
56    height: 24px;
57    margin-left: auto;
58    padding: 0;
59    border: none;
60    background: transparent;
61    cursor: pointer;
62
63    svg path {
64      stroke: #989ca1;
65    }
66  }
67`,c=(0,n.AH)`
68  flex: 1 1 auto;
69  min-height: 0;
70  overflow-y: auto;
71  padding: 0 16px;
72
73  &::-webkit-scrollbar {
74    width: 3px;
75  }
76  &::-webkit-scrollbar-thumb {
77    border-radius: 4px;
78    background-color: #e4e6e9;
79  }
80`,u=(0,n.AH)`
81  flex: 0 0 auto;
82  padding: 12px 16px;
83  border-top: 1px solid #f2f3f5;
84  background: #fff;
85
86  /* BottomModal 이 footerButtonStyle(radiusStyle.default.lg) 로 footer 버튼에 8px 라운드를 주던 것과 동일.
87     (초기화/적용 버튼 둥근 모서리) */
88  button {
89    border-radius: 8px;
90  }
91`,h=({isOpen:e,title:t="",onClose:i,children:n,footer:h,className:m="",showCloseButton:g=!0,closeOnDimmedClick:f=!0})=>{let x=(0,o.useRef)(!1),[b,y]=(0,o.useState)(!1),[w,v]=(0,o.useState)(!1),k=(0,o.useRef)(void 0);return((0,o.useEffect)(()=>{e&&document.body.classList.contains("modal-open")&&(x.current=!0)},[e]),(0,o.useEffect)(()=>{let t=window.pageYOffset;return e?(document.body.classList.add("modal-open"),setTimeout(()=>{document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${t}px`},1),y(!0),k.current=setTimeout(()=>v(!0),16)):(v(!1),x.current||document.body.classList.remove("modal-open"),k.current=setTimeout(()=>y(!1),200)),()=>{k.current&&clearTimeout(k.current),e&&setTimeout(()=>{x.current||(document.body.style.removeProperty("overflow"),document.body.style.removeProperty("position"),document.body.style.removeProperty("top"),window.scrollTo(0,t))},1)}},[e]),b)?(0,r.FD)("div",{className:`center-modal modal-wrap ${w?"modal-open":""} ${m}`,css:a,children:[(0,r.Y)("div",{css:d,className:"modal-mask","aria-hidden":"true",onClick:()=>{f&&i&&i()}}),(0,r.FD)("div",{className:"modal-content",css:s,children:[(t||g)&&(0,r.FD)("div",{className:"modal-header",css:p,children:[t&&(0,r.Y)("p",{className:"modal-title",children:t}),g&&(0,r.Y)("button",{type:"button",className:"modal-close",onClick:i,children:(0,r.Y)(l.Br_,{label:"close"})})]}),(0,r.Y)("div",{className:"modal-body",css:c,children:n}),h&&(0,r.Y)("div",{className:"modal-footer",css:u,children:h})]})]}):null}},18466:(e,t,i)=>{"use strict";i.d(t,{k6:()=>s,SU:()=>c,Rk:()=>p,nm:()=>u});var r,n=i(44632),l=i(2875),o=i(59943),a=i(22157),d=i(64427),s=((r={}).REFERRENCE="referrence",r.PRIMITIVE="primitive",r);function p(e){return e instanceof Array?["referrence","array"]:e instanceof Object?["referrence","object"]:e instanceof Function?["referrence","function"]:null===e?["primitive","null"]:["primitive",typeof e]}function c(e,t=!0){if(o.j$.isHttpError(e)){if(e instanceof o.Dr)return e.message}else{let i=n.A.isAxiosError(e)?e.response.data.meta:e;if(i.error_code){if(l.tN.includes(i.error_code))return i.error_message??"";if(l.Og[i.error_code])return l.Og[i.error_code]}if(t&&(i.code||i.error_code)&&i.error_data?.message){let[e]=i?.error_data?.message?.split?.("@@")??[];if(e)return e}}return null}let u=(e,t)=>{let i={target:""},r=t?{...i,"search-word":t}:i,n=(()=>{let t=[];try{if(e){let i=JSON.parse(e);i&&(i=(0,a.a9)(i,d.KY),parseInt(i.expiry_time)>new Date().getTime()&&t.push({source:"naver_ep",product_id:i.productid,coupon_id:i.couponid,price:i.price,make_time:i.make_time}))}return t}catch(e){return console.log(e),null}})();return n&&(r.target=JSON.stringify(n)),r}},32283:()=>{},34462:(e,t,i)=>{"use strict";i.d(t,{O:()=>d,f:()=>s});var r=i(18153),n=i(38695),l=i(47740),o=i(58191),a=i(29174);let d=({title:e,onBack:t,border:i=!1,actionItems:n,showBack:d=!0})=>(0,a.p)()?null:(0,r.Y)(o.A,{className:"navBar",border:i,title:(0,r.Y)("h2",{children:e}),actionItems:n,navigationItems:d?(0,r.Y)(l.T_T,{label:"arrowleft",cursor:"pointer",onClick:t}):void 0}),s=({title:e,onBack:t,rightAction:i})=>(0,a.p)()?(0,r.FD)(p,{children:[(0,r.FD)("div",{className:"titleGroup",children:[(0,r.Y)("button",{type:"button",className:"iconButton",onClick:t,"aria-label":"뒤로가기",children:(0,r.Y)(l.T_T,{label:"arrowleft"})}),(0,r.Y)("h2",{children:e})]}),i]}):null,p=n.A.div`
92  display: flex;
93  align-items: center;
94  justify-content: space-between;
95  gap: 12px;
96  margin: 0 0 20px;
97
98  .titleGroup {
99    display: flex;
100    align-items: center;
101    gap: 12px;
102    min-width: 0;
103  }
104
105  h2 {
106    margin: 0;
107    color: #202429;
108    font-size: 24px;
109    font-weight: 700;
110    line-height: 32px;
111  }
112
113  .iconButton,
114  .moreButton {
115    width: 32px;
116    height: 32px;
117    padding: 0;
118    border: 0;
119    background: transparent;
120    color: #202429;
121    display: inline-flex;
122    align-items: center;
123    justify-content: center;
124    cursor: pointer;
125  }
126
127  .moreButton {
128    font-size: 24px;
129    line-height: 1;
130  }
131`},48151:(e,t,i)=>{"use strict";i.d(t,{A:()=>w});var r=i(18153),n=i(38993),l=i(14232),o=i(96705),a=i(38695),d=i(47740
131),s=i(15039),p=i.n(s),c=i(60241);let u=({title:e,isRequired:t,isAdditional:i,options:n,value:a,isOpen:s=!1,onChange:u,toggleOptionGroup:h,wornOptionValues:x})=>{let b=(0,l.useMemo)(()=>n?.filter(e=>e.value===a)?.[0]??null,[n,a]),y=(0,l.useMemo)(()=>b?.value??"옵션을 선택해 주세요.",[b]);return(0,r.FD)(f,{className:"product-option",open:s,children:[(0,r.FD)("summary",{onClick:t=>{t.preventDefault(),n&&h(e)},children:[(0,r.FD)("p",{className:"title",children:[t&&(0,r.Y)("em",{className:"body3",children:"(필수)"}),i&&(0,r.Y)("small",{className:"body3",children:"(추가)"}),(0,r.Y)("strong",{className:"body3 bold",children:e})]}),(0,r.Y)("p",{className:p()("text body1",{selected:!!b}),children:y}),(0,r.Y)("i",{children:(0,r.Y)(d.AiD,{width:"16px"})})]}),n&&(0,r.Y)("ul",{children:n.map(t=>{let{id:i,value:n,addPrice:l,isSoldout:a}=t;return(0,r.FD)(g,{className:p()({soldout:a}),onClick:i=>{i.preventDefault();let r=(0,o.fi)(t);r&&u?.(e,n,r)},children:[(0,r.FD)("p",{className:"name",children:[n," ",a&&"(품절)",x?.has(n)&&(0,r.Y)(m,{children:"모델 착용"})]}),!!l&&(0,r.FD)("p",{className:"price",children:[l>0&&"+"," ",(0,c.nM)(l)]})]},`${n}-${i}`)})})]})};u.displayName="ProductOption";let h=(0,l.memo)(u),m=a.A.span`
132  display: inline-flex;
133  align-items: center;
134  margin-left: 6px;
135  padding: 1px 4px;
136  border-radius: 4px;
137  background: #f2f3f5;
138  color: #5b6166;
139  font-size: 10px;
140  font-weight: 500;
141  line-height: 14px;
142  vertical-align: middle;
143  white-space: nowrap;
144`,g=a.A.li`
145  list-style: none;
146  padding: 16px 0;
147  display: flex;
148  width: 100%;
149  align-items: center;
150  justify-content: space-between;
151  border-top: 1px solid #f2f3f5;
152  cursor: pointer;
153  word-break: break-all;
154  &:first-of-type {
155    border-top: none;
156  }
157  font-size: 14px;
158  line-height: 20px;
159  .name {
160    font-weight: 500;
161    width: 100%;
162  }
163  .price {
164    color: #3e4145;
165    margin-left: 27px;
166    white-space: nowrap;
167  }
168  &.soldout {
169    cursor: default;
170    p {
171      color: #989ca1;
172    }
173  }
174
175  @media (min-width: 640px) {
176    .name {
177      font-size: 16px;
178      line-height: 22px;
179    }
180    .price {
181      font-size: 16px;
182      line-height: 24px;
183    }
184  }
185`,f=a.A.details`
186  border: 1px solid #e4e6e9;
187  border-radius: 4px;
188  margin-bottom: 10px;
189  &:last-of-type {
190    margin-bottom: 16px;
191  }
192  summary {
193    position: relative;
194    padding: 12px 32px 12px 16px;
195    list-style: none;
196    outline: none;
197    word-break: break-all;
198    &::marker,
199    &::-webkit-details-marker {
200      display: none;
201    }
202
203    cursor: pointer;
204    .title {
205      margin-bottom: 2px;
206      strong {
207        color: #7a7f86;
208        margin-bottom: 2px;
209      }
210      em {
211        font-style: normal;
212        color: #ff203b;
213        margin-right: 3px;
214      }
215      small {
216        color: #5b6166;
217        margin-right: 3px;
218      }
219    }
220    .text {
221      color: #b7bbbf;
222      &.selected {
223        color: #5b6166;
224      }
225    }
226    i {
227      position: absolute;
228      right: 16px;
229      top: 50%;
230      margin-top: -8px;
231      cursor: pointer;
232      font-size: 0;
233    }
234  }
235
236  ul {
237    border-top: 1px solid #989ca1;
238    padding: 0 16px;
239    margin: 0;
240    display: none;
241  }
242  &[open] {
243    border: 1px solid #989ca1;
244    summary {
245      i {
246        transform: rotate(180deg);
247      }
248    }
249    ul {
250      display: block;
251    }
252  }
253
254  @media (min-width: 640px) {
255    &:last-of-type {
256      margin-bottom: 20px;
257    }
258    summary {
259      .title {
260        strong,
261        em,
262        small {
263          font-size: 14px;
264          line-height: 20px;
265        }
266      }
267      .text {
268        font-size: 16px;
269        line-height: 24px;
270      }
271    }
272  }
273`,x=({title:e,parentTitle:t,items:i,valueMap:n,isDependency:a,index:d,isLastOption:s,...p})=>{let c=(0,l.useCallback)(e=>{let t=Object.values(n);for(let i=0;i<d;i++){let r=t[i];if(r){let t=r.value,i=e.meta.attributes.find(({title:e})=>e===r.title);if(i?.value!==t)return!1}}return!0},[d,n]),u=(0,l.useMemo)(()=>{if(a&&t){let e=n[t];return e?i.filter(t=>t.parentValue===e.value&&c(t)):null}return i},[t,i,a,n,c]),m=(0,l.useMemo)(()=>{if(u)return(0,o.dL)({items:u,isDependency:a,isLastOption:s})},[a,s,u]);return(0,r.Y)(h,{...p,title:e,value:n[e]?.value,options:m})};x.displayName="ProductOption";let b=(0,l.memo)(x),y=({optionMap:e,isDependency:t,isAdditional:i,onSelect:o,...a})=>{let d=(0,l.useMemo)(()=>[...e.keys()],[e]),s=(0,l.useMemo)(()=>d.reduce((e,t)=>({...e,[t]:null}),{}),[d]),[p,c]=(0,l.useState)(s),u=(0,l.useMemo)(()=>t,[t]),[h,m]=(0,l.useState)(u?0:null),g=(e,r,n)=>{let l=!!p[e],a={id:n.product_id,title:e,value:r,data:n},g={...p,[e]:a},f=Object.values(g),x=f.filter(e=>null!==e);if(i||x.length===f.length){let e=t||i?[a]:x;o?.(e),c(s),m(u?-1:null)}else l&&t&&0===h?c({...s,[e]:a}):c(g),m(i=>u?d.indexOf(e)+1:t?i:null)},f=e=>{m(t=>t!==d.indexOf(e)?d.indexOf(e):-1)};return(0,r.Y)(r.FK,{children:d.map((r,l)=>{let o=e.get(r);if(o){let{title:e,parentTitle:s,items:c}=o;return(0,n.n)(b,{...a,index:l,key:`${r}-${e}-${s}`,isDependency:t,isAdditional:i,title:e,valueMap:p,items:c,parentTitle:s,toggleOptionGroup:f,onChange:g,isOpen:l===h,isLastOption:l+1===d.length})}})})};y.displayName="ProductOptionList";let w=(0,l.memo)(y)},74665:(e,t,i)=>{"use strict";i.r(t),i.d(t,{__N_SSP:()=>ie,default:()=>it});var r=i(18153),n=i(44632),l=i(38993),o=i(38695),a=i(89099),d=i(76757),s=i(14232),p=i(98854),c=i(56840),u=i(75656),h=i(8936),m=i(79038),g=i(23510),f=i(5272),x=i(2221),b=i(26641),y=i(54587),w=i.n(y);let v=e=>!e.is_sold_out&&!1!==e.is_sell&&!1!==e.is_exhibit,k=e=>"ON_SALE"===e.sell_status,_=e=>e.attributes.map(({value:e})=>
273e).filter(Boolean).join(" / "),Y=e=>e.worn_options?.[0]??e.worn_option??e.options?.find(e=>e.is_model_worn),N=e=>Math.max(e.min_order_qty??1,1),$=e=>{if(e.worn_options?.length)return e.worn_options;let t=Y(e);return t?[t]:[]},A=e=>e.has_options??!!e.options?.length,C=e=>{let t={};for(let i of e){if(!v(i))continue;let e=$(i).filter(k);e.length&&(t[i.id]=e.map(e=>({optionProductId:Number(e.product_id),label:_(e),qty:Math.max(e.worn_qty??1,1),addPrice:e.add_price})))}return t},F=e=>new Set(e.filter(v).map(e=>e.id)),S=(e,t,i)=>{let r=0;for(let n of e){if(!t.has(n.id))continue;let e=i[n.id];if(e?.length)for(let t of e)r+=(n.sale_price+t.addPrice)*t.qty;else r+=n.sale_price*N(n)}return r},z=(e,t,i)=>e.filter(e=>t.has(e.id)).filter(e=>A(e)).filter(e=>!i[e.id]?.length).map(e=>e.id);var D=i(44552),I=i(60241);let E=({products:e,checkedIds:t,selection:i,busy:n=!1,onAddToCart:l,onBuy:o})=>{let a=(0,s.useMemo)(()=>e.some(v),[e]),d=(0,s.useMemo)(()=>e.filter(e=>t.has(e.id)),[e,t]),p=(0,s.useMemo)(()=>S(e,t,i),[e,t,i]),c=a&&d.length>0&&!n;return(0,r.FD)(r.FK,{children:[(0,r.Y)(T,{"aria-hidden":"true"}),(0,r.FD)(O,{children:[(0,r.FD)(P,{children:[(0,r.Y)(R,{children:"선택한 상품"}),d.length>0&&(0,r.Y)(B,{children:d.slice(0,6).map(e=>{let t=e.image_thumbnail_url||e.image_medium_url||e.image_url;return(0,r.Y)(L,{children:t&&(0,r.Y)(w(),{src:t,alt:e.name,layout:"fill",objectFit:"cover",unoptimized:!0})},e.id)})}),a?0===d.length?(0,r.Y)(q,{children:"상품을 선택해 주세요"}):(0,r.FD)(j,{children:[(0,I.nM)(p),"원"]}):(0,r.Y)(q,{children:"구매 가능한 상품이 없어요"})]}),(0,r.FD)(G,{children:[(0,r.Y)(K,{type:"button",disabled:!c,"aria-busy":n,onClick:l,children:n?(0,r.Y)(W,{}):"장바구니 담기"}),(0,r.Y)(V,{type:"button",disabled:!c,"aria-busy":n,onClick:o,children:n?(0,r.Y)(W,{"data-on-fill":"true"}):"구매하기"})]})]})]})};E.displayName="CoordiCtaBar";let M=(0,l.i7)`
274  to {
275    transform: rotate(360deg);
276  }
277`,T=o.A.div`
278  height: calc(${103}px + env(safe-area-inset-bottom));
279`,O=o.A.div`
280  position: fixed;
281  left: 0;
282  right: 0;
283  bottom: 0;
284  z-index: 100;
285  background: ${D.Nl.white};
286  border-top: 1px solid ${D.Nl.gray20};
287  box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);
288  padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
289`,P=o.A.div`
290  display: flex;
291  align-items: center;
292  min-height: ${24}px;
293`,R=o.A.span`
294  flex-shrink: 0;
295  font-size: 13px;
296  font-weight: 500;
297  color: ${D.Nl.gray70};
298`,B=o.A.div`
299  display: flex;
300  margin-left: 8px;
301  padding-left: ${8}px;
302`,L=o.A.div`
303  position: relative;
304  width: ${24}px;
305  height: ${24}px;
306  margin-left: -${8}px;
307  border: 1.5px solid ${D.Nl.white};
308  border-radius: 50%;
309  background: ${D.Nl.gray20};
310  overflow: hidden;
311  flex-shrink: 0;
312`,q=o.A.span`
313  margin-left: auto;
314  padding-left: 8px;
315  font-size: 13px;
316  color: ${D.Nl.gray60};
317`,j=o.A.strong`
318  margin-left: auto;
319  padding-left: 8px;
320  font-size: 16px;
321  font-weight: 700;
322  color: ${D.Nl.gray100};
323`,H=o.A.button`
324  flex: 1;
325  display: flex;
326  align-items: center;
327  justify-content: center;
328  height: 48px;
329  border-radius: 8px;
330  font-size: 15px;
331  font-weight: 600;
332  line-height: 1;
333  transition: opacity 0.15s ease;
334
335  &:disabled {
336    cursor: default;
337  }
338`,K=(0,o.A)(H)`
339  background: ${D.Nl.white};
340  border: 1px solid ${D.Nl.gray30};
341  color: ${D.Nl.gray100};
342
343  &:disabled {
344    color: ${D.Nl.gray40};
345  }
346`,V=(0,o.A)(H)`
347  background: ${D.Nl.gray100};
348  border: none;
349  color: ${D.Nl.white};
350
351  &:disabled {
352    background: ${D.Nl.gray40};
353  }
354`,G=o.A.div`
355  display: flex;
356  gap: 8px;
357  margin-top: 10px;
358`,W=o.A.span`
359  width: 16px;
360  height: 16px;
361  border-radius: 50%;
362  border: 2px solid ${D.Nl.gray40};
363  border-top-color: transparent;
364  animation: ${M} 0.8s linear infinite;
365
366  &[data-on-fill='true'] {
367    border-color: rgba(255, 255, 255, 0.7);
368    border-top-color: transparent;
369  }
370`;var Q=i(27888);i(32283);let U=({images:e,alt:t,desktop:i=!1,onPinTap:n})=>
370{let[l,o]=(0,s.useState)(0),[a,d]=(0,s.useState)(!0),[p,c]=(0,s.useState)(null),u=((e,t)=>{if(!e.length)return!1;let i=Math.min(Math.max(t,0),e.length-1);return!!e[i]?.pins?.length})(e,l),h=e.length>1,m=i?18:16,g=m/2;if(0===e.length)return null;let f=(e,i)=>(0,r.FD)(r.FK,{children:[(0,r.Y)(w(),{src:e.image_url,alt:t,layout:"fill",objectFit:"cover",unoptimized:!0,priority:i}),!!e.pins?.length&&(0,r.Y)(ee,{className:a?"":"hidden",pinSize:m,children:e.pins.map(e=>(0,r.Y)("button",{type:"button",className:"pin",style:{left:`clamp(${g}px, ${e.x}%, calc(100% - ${g}px))`,top:`clamp(${g}px, ${e.y}%, calc(100% - ${g}px))`},"aria-label":"핀 상품 보기",onClick:()=>n?.(e.product_id)},`${e.pin_no}-${e.product_id}`))})]});return(0,r.FD)(Z,{children:[h?(0,r.Y)(Q.RC,{onSwiper:c,onSlideChange:e=>o(e.activeIndex),children:e.map((e,t)=>(0,r.Y)(Q.qr,{children:(0,r.Y)("div",{className:"slide",children:f(e,0===t)})},e.no))}):(0,r.Y)("div",{className:"slide",children:f(e[0],!0)}),h&&i&&(0,r.FD)(r.FK,{children:[(0,r.Y)("button",{type:"button",className:"navArrow prev",disabled:0===l,"aria-label":"이전 이미지",onClick:()=>p?.slidePrev(),children:(0,r.Y)(J,{})}),(0,r.Y)("button",{type:"button",className:"navArrow next",disabled:l===e.length-1,"aria-label":"다음 이미지",onClick:()=>p?.slideNext(),children:(0,r.Y)(J,{flipped:!0})})]}),h&&(0,r.Y)("span",{className:"dots","aria-hidden":"true",children:e.map((e,t)=>(0,r.Y)("i",{className:t===l?"active":""},e.no))}),u&&(0,r.Y)("button",{type:"button",className:`pinToggle${a?"":" off"}`,"aria-label":a?"핀 숨기기":"핀 표시","aria-pressed":a,onClick:()=>d(e=>!e),children:(0,r.Y)(X,{off:!a})})]})};U.displayName="CoordiDetailImagePager";let X=({size:e=17,off:t=!1})=>(0,r.FD)("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[(0,r.Y)("path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42Z"}),(0,r.Y)("circle",{cx:"7.5",cy:"7.5",r:"1.3",fill:"currentColor",stroke:"none"}),t&&(0,r.Y)("path",{d:"M21 4L4 21"})]});X.displayName="TagIcon";let J=({flipped:e=!1})=>(0,r.Y)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:e?{transform:"scaleX(-1)"}:void 0,xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:(0,r.Y)("path",{d:"M15 5l-7 7 7 7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})});J.displayName="ChevronIcon";let Z=o.A.div`
371  position: relative;
372  width: 100%;
373  overflow: hidden;
374  background: #f2f3f5;
375
376  .slide {
377    position: relative;
378    width: 100%;
379    aspect-ratio: 3 / 4;
380    overflow: hidden;
381  }
382
383  .dots {
384    position: absolute;
385    bottom: 12px;
386    left: 50%;
387    z-index: 2;
388    display: flex;
389    gap: 6px;
390    transform: translateX(-50%);
391    pointer-events: none;
392
393    i {
394      width: 6px;
395      height: 6px;
396      border-radius: 50%;
397      background: rgba(255, 255, 255, 0.4);
398      box-shadow: 0 0 2px rgba(0, 0, 0, 0.2);
399      transition: background 0.2s;
400
401      &.active {
402        background: #fff;
403      }
404    }
405  }
406
407  .navArrow {
408    position: absolute;
409    top: 50%;
410    z-index: 2;
411    display: flex;
412    width: 32px;
413    height: 32px;
414    padding: 0;
415    border: 0;
416    border-radius: 50%;
417    align-items: center;
418    justify-content: center;
419    background: rgba(255, 255, 255, 0.92);
420    color: #0f0f0f;
421    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
422    opacity: 0;
423    visibility: hidden;
424    transform: translateY(-50%);
425    transition: opacity 0.2s ease, visibility 0.2s ease;
426    cursor: pointer;
427    pointer-events: none;
428
429    &.prev {
430      left: 12px;
431    }
432
433    &.next {
434      right: 12px;
435    }
436
437    &:disabled {
438      cursor: default;
439    }
440
441    &:focus-visible {
442      opacity: 1;
443      visibility: visible;
444      pointer-events: auto;
445    }
446  }
447
448  &:hover .navArrow {
449    opacity: 1;
450    visibility: visible;
451    pointer-events: auto;
452
453    &:disabled {
454      opacity: 0.35;
455    }
456  }
457
458  /* 시안 WebDetailFinal 표현 — 모바일·데스크톱 공통(유저 확정 통일). 34px 우하단 14/14.
459     ON: 다크 반투명+흰 아이콘 / OFF: 흰 배경+검정 아이콘+플로트 그림자 (사선은 TagIcon 이 SVG 로 그림) */
460  .pinToggle {
461    position: absolute;
462    right: 14px;
463    bottom: 14px;
464    z-index: 2;
465    display: flex;
466    width: 34px;
467    height: 34px;
468    padding: 0;
469    border: 0;
470    border-radius: 50%;
471    align-items: center;
472    justify-content: center;
473    background: rgba(15, 15, 15, 0.55);
474    color: #fff;
475    transition: background 0.2s;
476    cursor: pointer;
477
478    &.off {
479      background: #fff;
480      color: #0f0f0f;
481      box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
482    }
483  }
484`,ee=o.A.div`
485  position: absolute;
486  inset: 0;
487  z-index: 1;
488  opacity: 1;
489  transition: opacity 0.2s ease;
490
491  &.hidden {
492    opacity: 0;
493    pointer-events: none;
494  }
495
496  .pin {
497    position: absolute;
498    width: ${({pinSize:e})=>e}px;
499    height: ${({pinSize:e})=>e}px;
500    padding: 0;
501    border: 3px solid rgba(15, 15, 15, 0.55);
502    border-radius: 50%;
503    transform: translate(-50%, -50%);
504    background: #fff;
505    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.24);
506    cursor: pointer;
507  }
508`;var et=i(95209),ei=i(48230),er=i.n(ei);let en="#C9CDD2",el="#989CA1",eo="#72787F",ea="#5B6166",ed="#0F0F0F",es=({products:e,publisherType:t,checkedIds:i,selection:n,highlightedProductId:l,onToggleCheck:o,onToggleAll:a,onOpenOptions:d})=>{if(!e.length)return null;let s=e.filter(v),p=s.length>0,c=p&&s.every(e=>i.has(e.id));return(0,r.FD)(eu,{children:[(0,r.FD)("header",{className:"sectionHeader",children:[(0,r.FD)("h2",{children:["코디 상품 ",e.length,"개"]}),(0,r.FD)("button",{type:"button",className:"selectAll",disabled:!p,onClick:a,role:"checkbox","aria-checked":c,"aria-label":"전체선택",children:[(0,r.Y)(ec,{checked:c}),(0,r.Y)("span",{className:"selectAllLabel",children:"전체선택"})]})]}),(0,r.Y)("ul",{children:e.map(e=>(0,r.Y)(ep,{product:e,publisherType:t,checked:i.has(e.id),selected:n[e.id],highlighted:e.id===l,onToggleCheck:o,onOpenOptions:d},e.id))})]})};es.displayName="CoordiProductsSection";let ep=({product:e,publisherType:t,checked:i,selected:n,highlighted:l,onToggleCheck:o,onOpenOptions:a})=>{let d=!1!==e.is_exhibit,s=v(e),p=((e,t)=>{if(t?.length)return{text:((e,t)=>{if(t?.length)return t.map(e=>e.label?`${e.label} / ${e.qty}개`:`${e.qty}개`).join(", ");let i=Y(e);
508return i?_(i):[e.color_opt,e.size_opt].filter(Boolean).join(" / ")})(e,t),tone:"selected"};if(!v(e))return{text:!1===e.is_exhibit||e.is_sold_out?"":"지금은 구매할 수 없는 상품이에요",tone:"single"};let i=Y(e);if(i)return{text:_(i),tone:"selected"};if(A(e))return{text:"옵션을 선택해 주세요",tone:"placeholder"};let r=N(e);return r>1?{text:`단일 옵션 / ${r}개`,tone:"single"}:{text:"단일 옵션",tone:"single"}})(e,n),c=p.text,u="HIVER"===t?e.store?.name:void 0,h=A(e),m=(0,r.FD)(r.FK,{children:[(0,r.FD)("span",{className:"thumbnail",children:[!!e.image_thumbnail_url&&(0,r.Y)(w(),{src:e.image_thumbnail_url,alt:e.name,layout:"fill",objectFit:"cover",unoptimized:!0}),!d&&(0,r.Y)("span",{className:"dimOverlay"}),d&&e.is_sold_out&&(0,r.Y)("span",{className:"soldOutOverlay",children:"품절"})]}),(0,r.FD)("span",{className:`productInfo${d?"":" disabled"}`,children:[!!u&&(0,r.Y)("span",{className:"storeName",children:u}),(!!e.first_category_name||!!c)&&(0,r.FD)("span",{className:"productMeta",children:[!!e.first_category_name&&(0,r.Y)("span",{className:"categoryChip",children:e.first_category_name}),!!c&&(0,r.Y)("span",{className:`optionText ${p.tone}`,children:c})]}),(0,r.Y)("span",{className:"productName",children:e.name}),d?(0,r.FD)("span",{className:"price",children:[e.sale_percent>0&&(0,r.FD)("em",{children:[e.sale_percent,"%"]}),(0,r.FD)("strong",{children:[(0,I.nM)(e.sale_price),"원"]})]}):(0,r.Y)("span",{className:"notForSale",children:"지금은 구매할 수 없는 상품이에요"})]})]}),g=[l&&"highlighted",d&&!s&&"unavailable"].filter(Boolean).join(" ");return(0,r.FD)("li",{id:`coordi-product-${e.id}`,className:g||void 0,children:[(0,r.Y)("button",{type:"button",className:"rowCheckbox",disabled:!s,onClick:t=>{t.stopPropagation(),o(e.id)},role:"checkbox","aria-checked":i,"aria-label":`${e.name} 선택`,children:(0,r.Y)(ec,{checked:i})}),(0,r.FD)("div",{className:"rowBody",children:[d?(0,r.Y)(er(),{href:`/products/${e.id}`,className:"tapArea",children:m}):(0,r.Y)("div",{className:"tapArea",children:m}),h&&(0,r.Y)("div",{className:"optionButtonRow",children:(0,r.Y)("button",{type:"button",className:"optionButton",disabled:!s,onClick:t=>{t.stopPropagation(),a(e.id)},children:"옵션 선택"})})]})]})};ep.displayName="CoordiProductRow";let ec=({checked:e})=>(0,r.Y)("span",{className:`checkboxMark${e?" checked":""}`,"aria-hidden":"true",children:e&&(0,r.Y)("svg",{width:"10",height:"8",viewBox:"0 0 10 8",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,r.Y)("path",{d:"M1 4l2.8 2.8L9 1.2",stroke:"#fff",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})});ec.displayName="CheckboxMark";let eu=o.A.section`
509  padding: 16px 0;
510  background: #fff;
511
512  .checkboxMark {
513    display: inline-flex;
514    box-sizing: border-box;
515    flex: 0 0 18px;
516    width: 18px;
517    height: 18px;
518    align-items: center;
519    justify-content: center;
520    border: 1.5px solid ${en};
521    border-radius: 4px;
522    background: #fff;
523
524    &.checked {
525      border-color: ${ed};
526      background: ${ed};
527    }
528  }
529
530  .sectionHeader {
531    display: flex;
532    align-items: center;
533    justify-content: space-between;
534    padding: 0 16px;
535
536    h2 {
537      margin: 0;
538      color: ${ed};
539      font-size: 16px;
540      font-weight: 700;
541      line-height: 22px;
542    }
543  }
544
545  /*
546   * 전체선택 헤더는 붙잡아 두지 않는다. 상품 행을 훑는 내내 따라다니면 화면 위쪽을 계속
547   * 차지하는데, 정작 상시 필요한 컨트롤은 하단 고정 CTA 라 역할이 겹친다.
548   * 모바일·데스크톱 모두 본문 흐름 안의 한 줄로 둔다(위 .sectionHeader 기본 규칙).
549   */
550
551  .selectAll {
552    display: flex;
553    gap: 6px;
554    margin: -4px -4px -4px 0;
555    padding: 4px;
556    align-items: center;
557    border: 0;
558    background: none;
559    cursor: pointer;
560
561    .selectAllLabel {
562      color: ${eo};
563      font-size: 13px;
564      font-weight: 400;
565      line-height: 18px;
566    }
567
568    &:disabled {
569      opacity: 0.4;
570      cursor: default;
571    }
572  }
573
574  ul {
575    margin: 12px 0 0;
576    padding: 0;
577    list-style: none;
578  }
579
580  li {
581    display: flex;
582    padding: 8px 16px;
583    align-items: flex-start;
584    /* 핀 탭 scrollIntoView 앵커 — 상단 고정 네비 높이 보정 */
585    scroll-margin-top: 56px;
586
587    &.highlighted {
588      animation: coordiRowHighlightFade 1.2s ease-out forwards;
589    }
590
591    /* 판매중지·품절 — 구매 불가 시각화 (썸네일 흑백·저채도 + 이름/가격 뮤트, 할인율 오렌지도 해제) */
592    &.unavailable {
593      .thumbnail img {
594        filter: grayscale(1);
595        opacity: 0.55;
596      }
597
598      .productName,
599      .price strong,
600      .price em {
601        color: ${el};
602      }
603    }
604  }
605
606  @keyframes coordiRowHighlightFade {
607    from {
608      background-color: ${"#FAFAFB"};
609    }
610
611    to {
612      background-color: transparent;
613    }
614  }
615
616  .rowCheckbox {
617    display: inline-flex;
618    margin: -4px 0 0 -4px;
619    padding: 4px;
620    border: 0;
621    background: none;
622    cursor: pointer;
623
624    &:disabled {
625      opacity: 0.35;
626      cursor: default;
627    }
628  }
629
630  .rowBody {
631    position: relative;
632    display: flex;
633    min-width: 0;
634    margin-left: 6px;
635    flex: 1;
636    flex-direction: column;
637  }
638
639  .tapArea {
640    display: flex;
641    align-items: flex-start;
642    color: inherit;
643    text-decoration: none;
644  }
645
646  .thumbnail {
647    position: relative;
648    display: block;
649    flex: 0 0 72px;
650    width: 72px;
651    height: 72px;
652    overflow: hidden;
653    border-radius: 4px;
654    background: ${"#F2F3F5"};
655  }
656
657  .dimOverlay {
658    position: absolute;
659    inset: 0;
660    z-index: 1;
661    background: rgba(255, 255, 255, 0.6);
662  }
663
664  .soldOutOverlay {
665    position: absolute;
666    inset: 0;
667    z-index: 1;
668    display: flex;
669    align-items: center;
670    justify-content: center;
671    background: rgba(15, 15, 15, 0.4);
672    color: #fff;
673    font-size: 12px;
674    font-weight: 700;
675  }
676
677  .productInfo {
678    display: flex;
679    min-width: 0;
680    min-height: 72px;
681    margin-left: 12px;
682    flex: 1;
683    flex-direction: column;
684    align-items: flex-start;
685    justify-content: center;
686
687    &.disabled {
688      opacity: 0.4;
689    }
690  }
691
692  .categoryChip {
693    display: inline-flex;
694    box-sizing: border-box;
695    flex: 0 0 auto;
696    padding: 1px 4px;
697    border: 1px solid ${en};
698    border-radius: 4px;
699    color: ${ea};
700    font-size: 11px;
701    font-weight: 500;
702    line-height: 14px;
703  }
704
705  .optionText {
706    color: ${eo};
707    font-size: 12px;
708    font-weight: 400;
709    line-height: 17px;
710    /* 복수 선택 옵션 전체 나열 — getSelectionText 가 옵션마다 \n 으로 줄을 나눈다 (유저 확정) */
711    white-space: pre-line;
712
713    /* 옵션 미설정 — 오렌지 플레이스홀더로 사전 인지 (A안) */
714    &.placeholder {
715      color: ${D.Nl.orange};
716    }
717
718    /* 단일 옵션 — 선택 단계가 없다는 뜻의 약한 강조. GRAY_40 은 흰 배경에서
719       거의 읽히지 않아(대비 부족) 한 단계 진한 GRAY_60 을 쓴다. */
720    &.single {
721      color: ${el};
722    }
723  }
724
725  .productMeta {
726    display: flex;
727    width: 100%;
728    max-width: 100%;
729    gap: 6px;
730    margin-bottom: 4px;
731    /* 옵션 전체 나열로 멀티라인 허용 — 칩은 첫 줄에 상단 정렬 */
732    align-items: flex-start;
733    flex-wrap: nowrap;
734
735    .optionText {
736      min-width: 0;
737    }
738  }
739
740  .storeName {
741    margin-bottom: 2px;
742    color: ${ed}; /* 상품 행 스토어/브랜드명 블랙 (유저 확정) */
743    font-size: 11px;
744    font-weight: 400;
745    line-height: 14px;
746  }
747
748  .productName {
749    box-sizing: border-box;
750    width: 100%;
751    max-width: 100%;
752    padding-right: 90px;
753    overflow: hidden;
754    color: ${ed};
755    font-size: 13px;
756    font-weight: 400;
757    line-height: 18px;
758    text-overflow: ellipsis;
759    white-space: nowrap;
760  }
761
762  .price {
763    display: flex;
764    box-sizing: border-box;
765    max-width: 100%;
766    gap: 4px;
767    margin-top: 4px;
768    padding-right: 90px;
769    align-items: center;
770
771    em {
772      color: ${D.Nl.orange};
773      font-size: 14px;
774      font-weight: 700;
775      font-style: normal;
776    }
777
778    strong {
779      color: ${ed};
780      font-size: 14px;
781      font-weight: 700;
782    }
783  }
784
785  .notForSale {
786    margin-top: 4px;
787    color: ${eo};
788    font-size: 12px;
789    font-weight: 400;
790    line-height: 17px;
791  }
792
793  .optionButtonRow {
794    position: absolute;
795    right: 0;
796    bottom: 0;
797    display: flex;
798    margin-top: 0;
799    justify-content: flex-end;
800  }
801
802  .optionButton {
803    box-sizing: border-box;
804    height: 28px;
805    padding: 0 12px;
806    border: 1px solid ${en};
807    border-radius: 4px;
808    background: #fff;
809    color: ${ea};
810    font-size: 12px;
811    font-weight: 500;
812    cursor: pointer;
813
814    &:disabled {
815      border-color: ${"#E6E8EB"};
816      color: ${en};
817      cursor: default;
818    }
819  }
820`;
820var eh=i(47740);let em="#989CA1",eg="#0F0F0F",ef=({publisher:e,seller:t})=>{if(e?.type==="HIVER")return(0,r.Y)(eb,{children:(0,r.FD)("div",{className:"row",children:[(0,r.Y)("span",{className:"avatar hiverSymbol",children:(0,r.Y)(w(),{src:"/images/common/ic_hiver.svg",alt:"하이버",layout:"fill",objectFit:"cover",unoptimized:!0})}),(0,r.Y)("span",{className:"hiverName",children:"하이버 스타일"})]})});let i=e?.name??t?.name,n=e?.image_url??t?.image_url,l=(0,r.FD)(r.FK,{children:[(0,r.Y)("span",{className:"avatar",children:n?(0,r.Y)(w(),{src:n,alt:i??"store",layout:"fill",objectFit:"cover",unoptimized:!0}):(0,r.Y)(ex,{})}),(0,r.Y)("span",{className:"storeName",children:i}),(0,r.Y)(eh._k9,{label:"arrowright",width:"18px"})]});return(0,r.Y)(eb,{children:t?.id?(0,r.Y)(er(),{href:`/store/${t.id}`,className:"row",children:l}):(0,r.Y)("div",{className:"row",children:l})})};ef.displayName="CoordiPublisherHeader";let ex=()=>(0,r.Y)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:(0,r.Y)("path",{d:"M4 9l1.2-5h13.6L20 9v2a3 3 0 01-6 0 3 3 0 01-6 0 3 3 0 01-6 0V9h2zm1 6.8V20h14v-4.2a4.98 4.98 0 01-3.5-.9 4.98 4.98 0 01-7 0c-1 .74-2.24 1.06-3.5.9z",fill:em})});ex.displayName="StoreFallbackIcon";let eb=o.A.div`
821  .row {
822    display: flex;
823    align-items: center;
824    color: ${em};
825    text-decoration: none;
826  }
827
828  .avatar {
829    position: relative;
830    display: inline-flex;
831    flex: 0 0 26px;
832    width: 26px;
833    height: 26px;
834    margin-right: 6px;
835    align-items: center;
836    justify-content: center;
837    border-radius: 50%;
838    overflow: hidden;
839    background: ${"#E6E8EB"};
840  }
841
842  .hiverSymbol {
843    background: ${eg};
844  }
845
846  .storeName {
847    min-width: 0;
848    overflow: hidden;
849    color: ${eg}; /* 셀러명 블랙 (유저 확정) */
850    font-size: 14px;
851    font-weight: 400;
852    text-overflow: ellipsis;
853    white-space: nowrap;
854  }
855
856  .hiverName {
857    min-width: 0;
858    overflow: hidden;
859    color: ${eg};
860    font-size: 14px;
861    font-weight: 600;
862    line-height: 20px;
863    text-overflow: ellipsis;
864    white-space: nowrap;
865  }
866
867`,ey=({detail:e,bookmarkSlot:t})=>{let i=(0,s.useMemo)(()=>{var t;let i;return t=e,i=e=>(t.rep_tags??[]).filter(t=>t.axis===e).map(e=>e.id),[...ew(t.tag_styles,i("STYLE")).map(ev("style")),...ew(t.tag_tpos,i("TPO")).map(ev("tpo")),...(t.tag_age_groups??[]).map(ev("age")),...(t.tag_seasons??[]).map(ev("season"))].filter(e=>!!e.name)},[e]),n=(0,et.vR)(e.model_size_height,e.model_size_weight);return i.length||n||t?(0,r.FD)(ek,{children:[(!!n||!!t)&&(0,r.FD)("div",{className:"modelRow",children:[(0,r.Y)("p",{className:"modelSize",children:n?`모델 ${n}`:""}),!!t&&(0,r.Y)("div",{className:"bookmarkSlot",children:t})]}),!!i.length&&(0,r.Y)("ul",{className:"tagChips",children:i.map(e=>(0,r.Y)("li",{children:e.name},e.key))})]}):null};function ew(e,t){let i=e??[];return t.length?[...t.map(e=>i.find(t=>t.id===e)).filter(e=>!!e),...i.filter(e=>!t.includes(e.id))]:i}function ev(e){return(t,i)=>({key:`${e}-${t.id||i}`,name:t.name})}ey.displayName="CoordiTagSection";let ek=o.A.section`
868  padding: 16px;
869  background: #fff;
870
871  .modelRow {
872    display: flex;
873    gap: 8px;
874    align-items: center;
875  }
876
877  .modelSize {
878    flex: 1;
879    min-width: 0;
880    margin: 0;
881    color: ${D.Nl.gray70};
882    font-size: 13px;
883    font-weight: 400;
884    line-height: 18px;
885  }
886
887  .bookmarkSlot {
888    display: flex;
889    flex-shrink: 0;
890    align-items: center;
891  }
892
893  .tagChips {
894    display: flex;
895    flex-wrap: wrap;
896    gap: 6px;
897    margin: 12px 0 0;
898    padding: 0;
899    list-style: none;
900
901    li {
902      padding: 4px 8px;
903      border-radius: 4px;
904      background: ${D.Nl.gray20};
905      color: ${D.Nl.gray80};
906      font-size: 12px;
907      font-weight: 400;
908      line-height: 16px;
909      word-break: keep-all;
910      overflow-wrap: anywhere;
911    }
912  }
913`;var e_=i(14071);let eY="#F2F3F5",eN="#0F0F0F",e$="clamp(16px, 3vw, 48px)",eA=({detail:e,images:t,products:i,publisherType:n,bestCoordiTitle:l,checkedIds:o,selection:a,highlightedProductId:d,busy:p=!1,bookmarkSlot:c,onPinTap:u,onToggleCheck:h,onToggleAll:m,onOpenOptions:g,onAddToCart:f,onBuy:x})=>{let b=(0,s.useMemo)(()=>i.some(v),[i]),y=(0,s.useMemo)(()=>i.filter(e=>o.has(e.id)),[i,o]),k=(0,s.useMemo)(()=>S(i,o,a),[i,o,a]),_=b&&y.length>0&&!p,Y=e.best_coordinations??[],N=e.similar_coordinations??[],$=(0,s.useRef)(null),[A,C]=(0,s.use
913State)({prev:!1,next:!1}),F=(0,s.useCallback)(()=>{let e=$.current;if(!e)return;let t=e.scrollWidth-e.clientWidth;C({prev:e.scrollLeft>1,next:e.scrollLeft<t-1})},[]);(0,s.useEffect)(()=>{F()},[Y.length,F]);let z=e=>{let t=$.current;if(!t)return;let i=t.firstElementChild,r=(i?.clientWidth??0)+0,n=Math.max(t.clientWidth-r,2*r);t.scrollBy({left:e*n,behavior:"smooth"})};return(0,r.FD)(eS,{children:[(0,r.FD)(ez,{children:[(0,r.Y)(eD,{children:(0,r.Y)(U,{desktop:!0,images:t,alt:e.name??"코디",onPinTap:u})}),(0,r.FD)(eI,{children:[(0,r.Y)(eE,{children:(0,r.Y)(ef,{publisher:e.publisher,seller:e.seller})}),(0,r.Y)(eM,{children:(0,r.Y)(ey,{detail:e,bookmarkSlot:c})}),(0,r.Y)(eT,{}),(0,r.Y)(eO,{children:(0,r.Y)(es,{products:i,publisherType:n,checkedIds:o,selection:a,highlightedProductId:d,onToggleCheck:h,onToggleAll:m,onOpenOptions:g})}),!!i.length&&(0,r.FD)(r.FK,{children:[(0,r.FD)(eP,{children:[(0,r.Y)("span",{className:"label",children:"선택한 상품"}),y.length>0&&(0,r.Y)("span",{className:"thumbStack",children:y.slice(0,6).map(e=>{let t=e.image_thumbnail_url||e.image_medium_url||e.image_url;return(0,r.Y)("span",{className:"thumb",children:!!t&&(0,r.Y)(w(),{src:t,alt:e.name,layout:"fill",objectFit:"cover",unoptimized:!0})},e.id)})}),b?0===y.length?(0,r.Y)("span",{className:"notice",children:"상품을 선택해 주세요"}):(0,r.FD)("strong",{className:"total",children:[(0,I.nM)(k),"원"]}):(0,r.Y)("span",{className:"notice",children:"구매 가능한 상품이 없어요"})]}),(0,r.FD)(eR,{children:[(0,r.Y)("button",{type:"button",className:"line",disabled:!_,"aria-busy":p,onClick:f,children:p?(0,r.Y)(eB,{}):"장바구니 담기"}),(0,r.Y)("button",{type:"button",className:"fill",disabled:!_,"aria-busy":p,onClick:x,children:p?(0,r.Y)(eB,{"data-on-fill":"true"}):"구매하기"})]})]})]})]}),!!Y.length&&(0,r.FD)(eL,{children:[(0,r.Y)("h2",{children:l}),(0,r.FD)("div",{className:"carousel",children:[(0,r.Y)("div",{className:"scroller",ref:$,onScroll:F,children:Y.map((e,t)=>(0,r.Y)("div",{className:"item",children:(0,r.Y)(et.dO,{coordination:e})},`${e.id??"best"}-${t}`))}),(A.prev||A.next)&&(0,r.FD)(r.FK,{children:[(0,r.Y)("button",{type:"button",className:"navArrow prev",disabled:!A.prev,"aria-label":"이전 코디 보기",onClick:()=>z(-1),children:(0,r.Y)(eC,{})}),(0,r.Y)("button",{type:"button",className:"navArrow next",disabled:!A.next,"aria-label":"다음 코디 보기",onClick:()=>z(1),children:(0,r.Y)(eC,{flipped:!0})})]})]})]}),!!N.length&&(0,r.FD)(eq,{children:[(0,r.Y)("h2",{children:"비슷한 스타일의 코디"}),(0,r.Y)("div",{className:"grid",children:N.map((e,t)=>(0,r.Y)(et.dO,{coordination:e},`${e.id}-${t}`))})]})]})};eA.displayName="CoordiDetailDesktop";let eC=({flipped:e=!1})=>(0,r.Y)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",style:e?{transform:"scaleX(-1)"}:void 0,xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:(0,r.Y)("path",{d:"M15 5l-7 7 7 7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})});eC.displayName="CarouselChevronIcon";let eF=(0,l.i7)`
914  to {
915    transform: rotate(360deg);
916  }
917`,eS=o.A.main`
918  max-width: ${e_.lG.containerWidth};
919  margin: 0 auto;
920  padding: 28px ${e_.lG.containerPadding} 0;
921  background: #fff;
922`,ez=o.A.div`
923  display: flex;
924  gap: 0;
925  align-items: flex-start;
926`,eD=o.A.div`
927  box-sizing: border-box;
928  flex: 0 0 520px;
929  width: 520px;
930  padding-left: ${e$};
931  align-self: flex-start;
932`,eI=o.A.div`
933  box-sizing: border-box;
934  min-width: 0;
935  padding: 0 ${e$};
936  flex: 1;
937`,eE=o.A.div`
938  && .avatar {
939    flex: 0 0 36px;
940    width: 36px;
941    height: 36px;
942    margin-right: 10px;
943  }
944
945  && .storeName {
946    color: ${eN};
947    font-size: 15px;
948    font-weight: 700;
949  }
950
951  && .hiverName {
952    font-size: 15px;
953    font-weight: 700;
954  }
955
956  /* 화살표(행 직계 svg)만 16px — 아바타 폴백 아이콘은 제외 */
957  && .row > svg {
958    width: 16px;
959    height: 16px;
960  }
961`,eM=o.A.div`
962  margin-top: 14px;
963
964  && > section {
965    position: relative;
966    display: flex;
967    flex-direction: column-reverse;
968    gap: 8px;
969    padding: 0 40px 0 0;
970  }
971
972  && .modelRow {
973    gap: 8px;
974  }
975
976  && .modelSize {
977    font-size: 14px;
978    line-height: 20px;
979  }
980
981  && .tagChips {
982    margin: 0;
983    gap: 4px;
984  }
985
986  && .tagChips li {
987    display: inline-flex;
988    box-sizing: border-box;
989    height: 24px;
990    padding: 0 8px;
991    align-items: center;
992    font-size: 14px;
993    font-weight: 600;
994    line-height: 20px;
995  }
996
997  && .bookmarkSlot {
998    position: absolute;
999    top: -3px;
1000    right: -3px;
1001  }
1002
1003  && .bookmarkSlot svg {
1004    width: 26px;
1005    height: 26px;
1006  }
1007`,eT=o.A.div`
1008  height: 1px;
1009  margin: 18px 0 4px;
1010  background: ${eY};
1011`,eO=o.A.div`
1012  && > section {
1013    padding: 0;
1014  }
1015
1016  && .sectionHeader {
1017    padding: 14px 0 4px;
1018  }
1019
1020  && .selectAllLabel {
1021    font-weight: 600;
1022  }
1023
1024  && ul {
1025    margin: 0;
1026  }
1027
1028  && li {
1029    padding: 10px 0;
1030    /* 고정 헤더(64) + 여백 보정 — 핀 탭 scrollIntoView 앵커 */
1031    scroll-margin-top: 88px;
1032  }
1033
1034  && .storeName {
1035    font-size: 13px;
1036    font-weight: 600;
1037    line-height: 18px;
1038  }
1039
1040  && .productName {
1041    font-size: 15px;
1042    font-weight: 500;
1043    line-height: 21px;
1044  }
1045
1046  && .categoryChip {
1047    font-size: 13px;
1048    line-height: 16px;
1049  }
1050
1051  && .optionText,
1052  && .notForSale {
1053    font-size: 14px;
1054    line-height: 20px;
1055  }
1056
1057  && .price {
1058    em,
1059    strong {
1060      font-size: 16px;
1061    }
1062  }
1063
1064`,eP=o.A.div`
1065  display: flex;
1066  margin-top: 8px;
1067  padding: 12px 0;
1068  border-top: 0.5px solid ${"#E6E8EB"};
1069  align-items: center;
1070  min-height: ${24}px;
1071
1072  .label {
1073    flex-shrink: 0;
1074    color: ${eN};
1075    font-size: 15px;
1076    font-weight: 700;
1077  }
1078
1079  .thumbStack {
1080    display: flex;
1081    margin-left: 8px;
1082    padding-left: ${8}px;
1083  }
1084
1085  .thumb {
1086    position: relative;
1087    display: block;
1088    width: ${24}px;
1089    height: ${24}px;
1090    margin-left: -${8}px;
1091    border: 1.5px solid #fff;
1092    border-radius: 50%;
1093    background: ${eY};
1094    overflow: hidden;
1095    flex-shrink: 0;
1096  }
1097
1098  .notice {
1099    margin-left: auto;
1100    padding-left: 8px;
1101    color: ${"#989CA1"};
1102    font-size: 13px;
1103  }
1104
1105  .total {
1106    margin-left: auto;
1107    padding-left: 8px;
1108    color: ${eN};
1109    font-size: 17px;
1110    font-weight: 700;
1111  }
1112`,eR=o.A.div`
1113  display: flex;
1114  gap: 8px;
1115  padding: 2px 0 8px;
1116
1117  button {
1118    box-sizing: border-box;
1119    display: flex;
1120    height: 48px;
1121    flex: 1;
1122    align-items: center;
1123    justify-content: center;
1124    border-radius: 8px;
1125    font-size: 15px;
1126    font-weight: 600;
1127    line-height: 1;
1128    transition: opacity 0.15s ease;
1129    cursor: pointer;
1130
1131    &:disabled {
1132      cursor: default;
1133    }
1134  }
1135
1136  .line {
1137    border: 1px solid ${D.Nl.gray30};
1138    background: ${D.Nl.white};
1139    color: ${D.Nl.gray100};
1140
1141    &:disabled {
1142      color: ${D.Nl.gray40};
1143    }
1144  }
1145
1146  .fill {
1147    border: 0;
1148    background: ${D.Nl.gray100};
1149    color: ${D.Nl.white};
1150
1151    &:disabled {
1152      background: ${D.Nl.gray40};
1153    }
1154  }
1155`,eB=o.A.span`
1156  width: 16px;
1157  height: 16px;
1158  border: 2px solid ${"#C9CDD2"};
1159  border-top-color: transparent;
1160  border-radius: 50%;
1161  animation: ${eF} 0.8s linear infinite;
1162
1163  &[data-on-fill='true'] {
1164    border-color: rgba(255, 255, 255, 0.7);
1165    border-top-color: transparent;
1166  }
1167`,eL=o.A.section`
1168  padding: 40px 0 8px;
1169
1170  /* 섹션 헤더 폰트는 '비슷한 스타일의 코디'(SimilarSection h2)와 동일 — 유저 확정 통일 */
1171  h2 {
1172    margin: 0;
1173    padding-bottom: 14px;
1174    color: ${eN};
1175    font-size: 18px;
1176    font-weight: 600;
1177    line-height: 24px;
1178  }
1179
1180  .carousel {
1181    position: relative;
1182  }
1183
1184  .scroller {
1185    display: flex;
1186    gap: ${0}px;
1187    overflow-x: auto;
1188    scrollbar-width: none;
1189
1190    &::-webkit-scrollbar {
1191      display: none;
1192    }
1193  }
1194
1195  .item {
1196    /* 한 화면 4.5장 — 보이는 갭 4개를 제외한 폭을 4.5 등분 */
1197    flex: 0 0 calc((100% - ${0}px) / ${4.5});
1198    min-width: 0;
1199  }
1200
1201  /* 좌우 이동 버튼 — 이미지 페이저 navArrow 와 동일 표현 (호버 노출·양끝 disabled) */
1202  .navArrow {
1203    position: absolute;
1204    top: 50%;
1205    z-index: 2;
1206    display: flex;
1207    width: 32px;
1208    height: 32px;
1209    padding: 0;
1210    border: 0;
1211    border-radius: 50%;
1212    align-items: center;
1213    justify-content: center;
1214    background: rgba(255, 255, 255, 0.92);
1215    color: ${eN};
1216    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
1217    opacity: 0;
1218    visibility: hidden;
1219    transform: translateY(-50%);
1220    transition: opacity 0.2s ease, visibility 0.2s ease;
1221    cursor: pointer;
1222    pointer-events: none;
1223
1224    &.prev {
1225      left: 12px;
1226    }
1227
1228    &.next {
1229      right: 12px;
1230    }
1231
1232    &:disabled {
1233      cursor: default;
1234    }
1235
1236    &:focus-visible {
1237      opacity: 1;
1238      visibility: visible;
1239      pointer-events: auto;
1240    }
1241  }
1242
1243  .carousel:hover .navArrow {
1244    opacity: 1;
1245    visibility: visible;
1246    pointer-events: auto;
1247
1248    &:disabled {
1249      opacity: 0.35;
1250    }
1251  }
1252`,eq=o.A.section`
1253  padding: 24px 0 40px;
1254
1255  h2 {
1256    margin: 0;
1257    padding-bottom: 14px;
1258    color: ${eN};
1259    font-size: 18px;
1260    font-weight: 600;
1261    line-height: 24px;
1262  }
1263
1264  .grid {
1265    display: grid;
1266    grid-template-columns: repeat(5, minmax(0, 1fr));
1267    gap: 0;
1268  }
1269`;var ej=i(66519),eH=i(9220),eK=i(48151),eV=i(21145),eG=i(74371),eW=i(96705),eQ=i(18162);let eU="#F2F3F5",eX="#E6E8EB",eJ="#72787F",eZ="#0F0F0F",e0=({open:e,product:t,initialSelections:i,progressLabel:n,confirmLabel:l,onConfirm:o,onClose:a})=>
1269{let d=(0,eG.a)(),[c,h]=(0,s.useState)([]),[g,f]=(0,s.useState)([]),[x,b]=(0,s.useState)({}),y=(0,s.useMemo)(()=>[...c,...g],[c,g]),v=(0,s.useRef)(i);v.current=i;let k=(0,s.useRef)(null),Y=(0,p.d4)(eQ.TF),N=t?.id,{data:$,error:A,mutate:C}=(0,u.Ay)(e&&N?[m.A.productOptionsPath,N,Y]:null,()=>new m.A({token:Y}).getProductOptions(N),{revalidateOnFocus:!1,shouldRetryOnError:!1}),F=(0,s.useMemo)(()=>{if(!$)return[];let e=t?.worn_option?.product_id;return $.options.map(t=>({...t,product_id:Number(t.product_id),is_model_worn:void 0!==e&&Number(t.product_id)===e}))},[$,t]),S=e&&!!N&&!$&&!A,z=(0,s.useMemo)(()=>new Set((t?.worn_option?.attributes??[]).map(e=>e.value).filter(Boolean)),[t]),D=$?.min_order_qty??1,E=$?.max_order_qty??999,M=(0,s.useMemo)(()=>(0,ej.w_)({min_order_qty:D,max_order_qty:E,options:F.map(e=>({product_id:String(e.product_id),qty:e.qty,add_price:e.add_price,is_essential:e.is_essential,sell_status:e.sell_status,attributes:e.attributes}))}).options,[F,D,E]),T=(0,s.useMemo)(()=>{let e=new Map;for(let t of F)e.set(t.product_id,t);return e},[F]),O=(0,s.useMemo)(()=>(e=>{if(!e.length)return!0;let t=e.filter(e=>e.is_essential),i=t.length?t:e,r=new Set;for(let e of i)for(let{title:t}of e.attributes)t&&r.add(t);let n=[...r];return i.every(e=>n.every(t=>e.attributes.some(e=>e.title===t)))})(F),[F]),P=!O,[R,B]=(0,eW.uQ)(M),L=(0,s.useCallback)((e,t)=>{let[i,r]=e.reduce((e,t)=>{let{id:i,data:r,title:n,value:l}=t,o=x[i];return o?e[1][i]=o.qty<o.meta.availableQuantity?{...o,qty:o.qty+1}:o:(e[0].push(i),e[1][i]={meta:r,title:n,value:l,qty:r.effectiveMinOrderQty}),e},[[],{}]);b(e=>({...e,...r})),t(e=>[...e,...i])},[x]),q=(0,s.useCallback)(e=>{L(e,h)},[L]),j=(0,s.useCallback)(e=>{L(e,f)},[L]),H=(0,s.useCallback)((e,t)=>{(t?h:f)(t=>t.filter(t=>t!==e)),b(t=>{let i={...t};return delete i[e],i})},[]),K=(0,s.useCallback)((e,t)=>{b(i=>{let r=i[e];if(!r)return i;let n=Math.min(Math.max(r.qty+t,r.meta.effectiveMinOrderQty),r.meta.availableQuantity);return{...i,[e]:{...r,qty:n}}})},[]);(0,s.useEffect)(()=>{h([]),f([]),b({}),k.current=null},[e,N]),(0,s.useEffect)(()=>{if(!e||!N||!F.length||k.current===N)return;k.current=N;let t=v.current??[];if(!t.length)return;let i=new Map(M.map(e=>[e.product_id,e])),r=[],n=[],l={};for(let e of t){let t=String(e.optionProductId),o=i.get(t),a=T.get(e.optionProductId);o&&a&&((o.is_essential?r:n).push(t),l[t]={meta:o,title:a.attributes[0]?.title??"",value:_(a),qty:e.qty})}h(r),f(n),b(l)},[e,N,F,M,T]);let V=R.size>0?0===c.length:0===y.length,G=(0,s.useCallback)(()=>{if(!t||V)return;let e=y.map(e=>{let t=x[e],i=T.get(Number(e));return{optionProductId:Number(e),label:i?_(i):t.value,qty:t.qty,addPrice:t.meta.add_price}});o(t.id,e)},[t,V,y,x,T,o]),W=d?eh.fMH:eH.A;return(0,r.Y)(W,{css:d?e2:e1,isOpen:e&&!!t,onClose:a,footer:(0,r.Y)(eh.$nd,{className:"confirm",size:"lg",widths:"full",disabled:V,onClick:G,children:l??"확인"}),children:t&&(0,r.FD)(e4,{children:[(0,r.FD)(e6,{children:[(0,r.Y)("strong",{children:"옵션을 선택해 주세요"}),!!n&&(0,r.Y)(e5,{children:n})]}),(0,r.FD)(e3,{children:[(0,r.Y)("span",{className:"thumb",children:!!t.image_thumbnail_url&&(0,r.Y)(w(),{src:t.image_thumbnail_url,alt:t.name,layout:"fill",objectFit:"cover",unoptimized:!0})}),(0,r.FD)("span",{className:"info",children:[(0,r.Y)("span",{className:"name",children:t.name}),(0,r.FD)("span",{className:"price",children:[t.sale_percent>0&&(0,r.FD)("em",{children:[t.sale_percent,"%"]}),(0,r.FD)("strong",{children:[(0,I.nM)(t.sale_price),"원"]})]})]})]}),(0,r.Y)(e8,{}),S&&(0,r.Y)(e9,{"aria-label":"옵션을 불러오는 중"}),!S&&!!A&&(0,r.FD)(te,{children:[(0,r.Y)("p",{children:"옵션을 불러오지 못했어요"}),(0,r.Y)("button",{type:"button",onClick:()=>void C(),children:"다시 시도"})]}),!S&&!A&&(0,r.FD)(tt,{children:[(0,r.Y)(eK.A,{optionMap:R,isDependency:O,isRequired:P&&B.size>0,onSelect:q,wornOptionValues:z},`require-${N}`),(0,r.Y)(eK.A,{optionMap:B,onSelect:j,isAdditional:!0,wornOptionValues:z},`additional-${N}`)]}),!S&&!A&&V&&(0,r.Y)(ti,{children:P?"필수 옵션을 모두 선택해 주세요":"옵션을 선택해 주세요"}),y.length>0&&(0,r.Y)(tr,{children:y.map(e=>{let t=x[e];if(!t)return null;let i=T.get(Number(e)),n=i?_(i):t.value;return(0,r.FD)(tn,{children:[(0,r.FD)(tl,{children:[(0,r.Y)(to,{children:n}),(0,r.Y)(ta,{type:"button","aria-label":"선택 옵션 삭제",onClick:()=>H(e,t.meta.is_essential),children:(0,r.Y)(eh.Br_,{width:"18px",label:"삭제",cursor:"pointer"})})]}),(0,r.FD)(td,{children:[(0,r.Y)(eh.wxP,{qty:t.qty,min:t.meta.effectiveMinOrderQty,max:t.meta.availableQuantity,radiusSize:"sm",radiu
1269sType:"default",onDecrease:()=>K(e,-1),onIncrease:()=>K(e,1)}),t.meta.add_price>0&&(0,r.FD)(ts,{children:["+",(0,I.nM)(t.meta.add_price),"원"]})]})]},e)})})]})})};e0.displayName="CoordiOptionBottomSheet";let e1=(0,l.AH)`
1270  .modal-content {
1271    display: flex;
1272    width: 480px;
1273    max-width: 92vw;
1274    /* 옵션이 적어도 모달이 쪼그라들지 않게 최소 높이 확보 (너무 컴팩트 방지) */
1275    height: clamp(440px, 60vh, 560px);
1276    flex-direction: column;
1277    padding: 0 24px 20px;
1278    overflow: hidden;
1279  }
1280
1281  .modal-header {
1282    flex: 0 0 auto;
1283    padding: 16px 0 4px;
1284    /* 우상단 닫기 X (CenterModal 기본) 유지 — 바텀시트의 드래그 핸들 핵 미적용 */
1285  }
1286
1287  .modal-body {
1288    display: flex;
1289    min-height: 0;
1290    flex: 1;
1291    flex-direction: column;
1292    padding: 0;
1293
1294    /* 스크롤은 유지하되 스크롤바만 숨김 (크로스브라우저) */
1295    scrollbar-width: none; /* Firefox */
1296    -ms-overflow-style: none; /* IE·구 Edge */
1297    &::-webkit-scrollbar {
1298      display: none; /* Chrome·Safari */
1299    }
1300
1301    .gradientBottom {
1302      display: none !important;
1303    }
1304  }
1305
1306  .modal-footer {
1307    flex: 0 0 auto;
1308    padding: 20px 0 0;
1309  }
1310`,e2=(0,l.AH)`
1311  .modal-content {
1312    display: flex;
1313    flex-direction: column;
1314    height: 60%;
1315    max-height: 60%;
1316    padding: 0 16px calc(16px + env(safe-area-inset-bottom));
1317    border-radius: 20px 20px 0 0;
1318    overflow: hidden;
1319  }
1320
1321  .modal-header {
1322    flex: 0 0 28px;
1323    position: relative;
1324    height: 28px;
1325    padding: 0;
1326
1327    /* 기본 닫기(X) 버튼을 드래그 핸들로 재단 — 탭 시 닫힘 유지 */
1328    .modal-close {
1329      position: absolute;
1330      left: 0;
1331      top: 0;
1332      width: 100%;
1333      height: 100%;
1334      margin: 0;
1335
1336      svg {
1337        display: none;
1338      }
1339
1340      &::after {
1341        content: '';
1342        position: absolute;
1343        left: 50%;
1344        top: 12px;
1345        width: 36px;
1346        height: 4px;
1347        margin-left: -18px;
1348        border-radius: 2px;
1349        background: ${eX};
1350      }
1351    }
1352  }
1353
1354  .modal-body {
1355    flex: 1 1 auto;
1356    min-height: 0;
1357    max-height: none !important;
1358    padding: 4px 0 16px;
1359    overflow-y: auto;
1360
1361    /* 스크롤은 유지하되 스크롤바만 숨김 (크로스브라우저) */
1362    scrollbar-width: none; /* Firefox */
1363    -ms-overflow-style: none; /* IE·구 Edge */
1364    &::-webkit-scrollbar {
1365      display: none; /* Chrome·Safari */
1366    }
1367
1368    &.body-scroll::before {
1369      display: none;
1370    }
1371
1372    .gradientBottom {
1373      display: none !important;
1374    }
1375  }
1376
1377  .modal-footer {
1378    flex: 0 0 auto;
1379    padding: 12px 0 0;
1380
1381    button.confirm {
1382      background: ${eV.Oq};
1383    }
1384  }
1385`,e4=o.A.div`
1386  display: flex;
1387  flex-direction: column;
1388`,e6=o.A.div`
1389  display: flex;
1390  margin: 0 0 10px;
1391  gap: 8px;
1392  align-items: center;
1393
1394  strong {
1395    font-size: 16px;
1396    font-weight: 700;
1397    line-height: 22px;
1398    color: ${eZ};
1399  }
1400`,e5=o.A.span`
1401  padding: 3px 9px;
1402  border-radius: 999px;
1403  background: ${eU};
1404  color: ${eJ};
1405  font-size: 12px;
1406  font-weight: 700;
1407  line-height: 16px;
1408`,e3=o.A.div`
1409  display: flex;
1410  margin-bottom: 12px;
1411  gap: 10px;
1412  align-items: center;
1413
1414  .thumb {
1415    position: relative;
1416    width: 44px;
1417    height: 44px;
1418    flex: 0 0 44px;
1419    overflow: hidden;
1420    background: ${eU};
1421  }
1422
1423  .info {
1424    display: flex;
1425    flex: 1;
1426    min-width: 0;
1427    flex-direction: column;
1428    gap: 2px;
1429  }
1430
1431  .name {
1432    overflow: hidden;
1433    color: ${eZ};
1434    font-size: 13px;
1435    font-weight: 500;
1436    line-height: 18px;
1437    text-overflow: ellipsis;
1438    white-space: nowrap;
1439  }
1440
1441  .price {
1442    display: flex;
1443    gap: 4px;
1444    align-items: center;
1445
1446    em {
1447      color: ${eV.P3};
1448      font-size: 13px;
1449      font-weight: 700;
1450      font-style: normal;
1451    }
1452
1453    strong {
1454      color: ${eZ};
1455      font-size: 13px;
1456      font-weight: 700;
1457    }
1458  }
1459`,e8=o.A.div`
1460  height: 1px;
1461  margin-bottom: 12px;
1462  background: ${eU};
1463`,e7=(0,l.i7)`
1464  to {
1465    transform: rotate(360deg);
1466  }
1467`,e9=o.A.div`
1468  display: flex;
1469  min-height: 120px;
1470  align-items: center;
1471  justify-content: center;
1472
1473  &::after {
1474    content: '';
1475    width: 24px;
1476    height: 24px;
1477    border: 2px solid ${eX};
1478    border-top-color: ${eZ};
1479    border-radius: 50%;
1480    animation: ${e7} 0.8s linear infinite;
1481  }
1482`,te=o.A.div`
1483  display: flex;
1484  min-height: 120px;
1485  flex-direction: column;
1486  gap: 10px;
1487  align-items: center;
1488  justify-content: center;
1489
1490  p {
1491    margin: 0;
1492    color: ${eJ};
1493    font-size: 13px;
1494    line-height: 18px;
1495  }
1496
1497  button {
1498    height: 32px;
1499    padding: 0 14px;
1500    border: 1px solid ${eX};
1501    border-radius: 4px;
1502    background: #fff;
1503    color: ${eZ};
1504    font-size: 12px;
1505    font-weight: 600;
1506    cursor: pointer;
1507  }
1508`,tt=o.A.div`
1509  display: flex;
1510  flex-direction: column;
1511`,ti=o.A.p`
1512  margin: 8px 0 0;
1513  font-size: 12px;
1514  line-height: 16px;
1515  color: ${eV.P3};
1516`,tr=o.A.div`
1517  display: flex;
1518  flex-direction: column;
1519  gap: 8px;
1520  margin-top: 16px;
1521`,tn=o.A.div`
1522  padding: 12px;
1523  border-radius: 8px;
1524  background: ${"#FAFAFB"};
1525`,tl=o.A.div`
1526  display: flex;
1527  align-items: flex-start;
1528`,to=o.A.p`
1529  flex: 1 1 auto;
1530  min-width: 0;
1531  margin: 0;
1532  font-size: 14px;
1533  font-weight: 500;
1534  line-height: 20px;
1535  color: ${"#5B6166"};
1536  word-break: break-all;
1537`,ta=o.A.button`
1538  flex: 0 0 auto;
1539  margin-left: 8px;
1540  padding: 0;
1541  border: 0;
1542  background: transparent;
1543  line-height: 0;
1544  cursor: pointer;
1545
1546  svg path {
1547    stroke: ${"#989CA1"};
1548  }
1549`,td=o.A.div`
1550  display: flex;
1551  align-items: center;
1552  justify-content: space-between;
1553  margin-top: 12px;
1554`,ts=o.A.span`
1555  font-size: 13px;
1556  line-height: 18px;
1557  color: ${eJ};
1558`;var tp=i(61716),tc=i(89309),tu=i(90412),th=i(11374),tm=i(53318),tg=i(67446),tf=i(35364),tx=i(74342),tb=i(4258),ty=i(5336),tw=i(19938),tv=i(30688);let tk=(0,l.AH)`
1559  display: flex;
1560  align-items: center;
1561  gap: 6px;
1562  margin-bottom: 14px;
1563
1564  h2 {
1565    margin: 0;
1566    color: ${D.Nl.gray100};
1567    font-size: 17px;
1568    font-weight: 700;
1569  }
1570
1571  .count {
1572    display: inline-flex;
1573    align-items: center;
1574    color: ${D.Nl.gray100};
1575    font-size: 16px;
1576    font-weight: 700;
1577  }
1578`,t_=({count:e,sort:t,onSort:i,titleId:n})=>(0,r.FD)("header",{css:tk,className:"coordi-talk-section-heading",children:[(0,r.Y)("h2",{id:n,children:"코디톡"}),null!==e&&(0,r.Y)("span",{className:"count",children:e}),(0,r.Y)(tv.A,{sort:t,onSort:i})]});var tY=i(62949),tN=i(74217),t$=i(12863),tA=i(60586);let tC=e=>"VISIBLE"===e.content_status&&!e.is_tombstone,tF=(0,l.AH)`
1579  min-height: ${tY.Qu.SECTION_MIN_HEIGHT}px;
1580  padding: 20px 16px;
1581  background: ${D.Nl.white};
1582  color: ${D.Nl.gray100};
1583
1584  /* 빈 상태 여백은 화면이 갖는다 — 코디 상세는 32/24, 전체보기는 44/24 로 다르다. */
1585  .coordi-talk-empty {
1586    padding: 32px 24px;
1587  }
1588
1589  /* 카드가 좌우 거터를 갖지 않으므로(padding: 14px 0) 섹션 패딩이 그 역할을 한다. */
1590  .preview {
1591    display: flow-root;
1592  }
1593
1594  .see-all {
1595    display: block;
1596    width: 100%;
1597    height: 48px;
1598    margin-top: 16px;
1599    border: 1px solid ${D.Nl.gray30};
1600    border-radius: ${D.Hd.md};
1601    background: ${D.Nl.white};
1602    color: ${D.Nl.gray100};
1603    font: inherit;
1604    font-size: 14px;
1605    font-weight: 700;
1606    cursor: pointer;
1607  }
1608
1609  .see-all:active {
1610    opacity: 0.4;
1611  }
1612
1613  /* 입력 바는 섹션 거터를 벗어나 화면 폭을 다 쓴다 — 하단에 ë
1613¶™ì€ 바로 읽혀야 한다. */
1614  .input-bar-slot {
1615    margin: 16px -16px 0;
1616  }
1617`,tS=({coordiId:e,token:t,leadingBand:i})=>{let n=(0,a.useRouter)(),l=(0,s.useRef)(null),[o,d]=(0,s.useState)(""),[p,c]=(0,s.useState)(!1),[h,g]=(0,s.useState)("OPINION"),[f,x]=(0,s.useState)([]),[b,y]=(0,s.useState)(!1),[w,v]=(0,s.useState)(null),k=(0,s.useRef)(null),_=(0,s.useRef)(new Map),Y=(0,s.useRef)(new Map),N=(0,s.useRef)(e);N.current!==e&&(N.current=e,_.current.clear(),Y.current.clear());let $=(0,s.useCallback)(e=>{let t=(0,tu.mS)(e,_.current);_.current=t.pending;let i=(0,tu.Lj)(t.items,Y.current);return Y.current=i.pending,i.items},[]),A=`/coordi/${encodeURIComponent(e)}/talks`,C=Number(e),{getReadRevision:F,captureUnavailableReplyWatermark:S,reconcileUnavailableReplyRead:z}=(0,tA.K)(),D=F(e),I=(0,s.useMemo)(()=>new tp.Ay({token:t}),[t]),E=(0,u.Ay)(e?["coordi-detail",e,t]:null,()=>new m.A({token:t}).getCoordinationDetail(e).then(e=>e.data)),M=(0,s.useMemo)(()=>{let e;return e=E.data,{id:C,title:e?.name??"현재 코디",imageUrl:e?.images?.find(e=>1===e.no)?.image_url??e?.image_url??"",sellerName:e?.publisher?.name??e?.seller?.name}},[E.data,C]),T=(0,s.useCallback)(async()=>{let t=S(),i=await I.getTalks(e,{sort:"latest",size:3});return i.data.items.forEach(i=>{"number"==typeof i.listable_reply_count&&z({coordiId:e,talkId:i.talk_id,requestWatermark:t,serverCount:"number"==typeof i.listable_reply_count?i.listable_reply_count:null,itemReplyIds:i.replies.map(e=>e.reply_id),replyIdsAreComplete:!1})}),{...i,coordiId:e,data:{...i.data,items:$(i.data.items)}}},[I,S,e,$,z]),O=(0,u.Ay)(e?((e,t,i=0)=>[tp.Ay.listPath(e),t,"summary",i])(e,t,D):null,T,{revalidateOnFocus:!1,shouldRetryOnError:!1,revalidateOnReconnect:!0,keepPreviousData:!0}),{mutate:P}=O,R=void 0!==O.data,B=O.data,[L,q]=(0,s.useState)(null);(0,s.useEffect)(()=>{B&&B.coordiId===e&&q(t=>(0,tc.Kn)(t,e,B.meta))},[e,B]);let j=L&&L.coordiId===e?L:null,H=B&&B.coordiId===e?B:null,K=(0,tc.Jw)(j,H?.meta,null!==H),{capabilities:V,generation:G,isUnavailable:W,isUnavailableSettled:Q,reportUnavailable:U}=(0,t$.$)(K,O.error,e),X=O.data?.data.items??[],J=O.data?.meta?.total_count??null,Z=(0,s.useCallback)(async()=>{await P()},[P]),ee=(0,s.useCallback)((e,t,i,r)=>{P(n=>n?{...n,data:{...n.data,items:(0,tu.lD)(n.data.items,e,t,i,r)}}:n,{revalidate:!1})},[P]),et=(0,s.useCallback)((e,t)=>(0,tu.Sp)(O.data?.data.items??[],e,t),[O.data]),ei=(0,s.useCallback)(e=>{let t=O.data?.data.items.find(t=>t.talk_id===e);return t?{replyCount:t.reply_count,listableReplyCount:t.listable_reply_count??t.reply_count}:null},[O.data]),er=(0,s.useCallback)(()=>{for(let e of O.data?.data.items??[]){if(e.viewer_state.is_author&&e.author?.display_name)return e.author.display_name;let t=e.replies.find(e=>e.viewer_state.is_author&&e.author?.display_name);if(t?.author?.display_name)return t.author.display_name}return null},[O.data]),en=(0,s.useCallback)((e,t,i)=>{_.current.set(`${e}:${t.reply_id}`,{talkId:e,reply:t,minimumCounts:i,expiresAt:Date.now()+tu.sB}),P(r=>r?{...r,data:{...r.data,items:(0,tu.lt)(r.data.items,e,t,i)}}:r,{revalidate:!1})},[P]),el=(0,s.useCallback)((e,t,i,r)=>{Y.current.set(`${e}:${r??"talk"}`,{talkId:e,replyId:r,content:t,...i,expiresAt:Date.now()+tu.df}),P(n=>n?{...n,data:{...n.data,items:(0,tu.BF)(n.data.items,e,t,i,r)}}:n,{revalidate:!1})},[P]),eo=(0,s.useCallback)((e,t)=>{_.current.delete(`${e}:${t}`)},[]),ea=(0,s.useCallback)((e,t)=>{Y.current.delete(`${e}:${t??"talk"}`)},[]),ed=(0,tN.A)({coordiId:e,requestScope:`${e}:${t}`,capabilities:V,capabilityGeneration:G,onSurfaceUnavailable:U,refresh:Z,applyHelpful:ee,readHelpful:et,readReplyCounts:ei,readOwnAuthorDisplayName:er,applyCreatedReply:en,applyEditedTarget:el,removeCreatedReply:eo,removeEditedTarget:ea}),es=ed.applySessionOverlays(X),ep=(0,ty.$)(),ec=async()=>{let e=o.trim();if(!e||ed.writeBanned||(w?!V.can_reply:!V.can_create))return!1;let t=w?es.find(e=>e.talk_id===w.talkId):null;return!w||t&&tC(t)?!!(w?await ed.replyTarget(w.talkId,e):"COMPARISON"===h?await ed.createComparison(e,f.map(({id:e})=>e)):await ed.createOpinion(e))&&(d(""),w||(x([]),g("OPINION")),v(null),!0):(v(null),!0)},eu=()=>{V.can_create&&ed.requireLogin()&&(v(null),c(!0))},eh=e=>{let t=es.find(t=>t.talk_id===e);V.can_reply&&t&&tC(t)&&ed.requireLogin()&&(v({talkId:e,authorName:t.author?.display_name??"작성자"}),c(!0))},em=ed.busyActions.has("create-root")||!!w&&ed.busyActions.has(`reply-${w.talkId}`);return Q?null:(0,r.FD)(r.FK,{children:[i,(0,r.FD)("section",{ref:l,css:tF,"aria-labelledby":"
1617coordi-talk-summary-title",tabIndex:-1,children:[(0,r.Y)(t_,{count:J,sort:"latest",titleId:"coordi-talk-summary-title",onSort:e=>{"helpful"===e&&n.push(`${A}?sort=helpful`)}}),O.isLoading&&!R&&(0,r.Y)(tw.A,{}),O.error&&!W&&!R&&(0,r.Y)(tb.A,{onRetry:()=>P()}),R&&0===es.length&&(0,r.Y)(tx.A,{onCompose:ep&&V.can_create?eu:void 0}),es.length>0&&(0,r.Y)("div",{className:"preview",children:es.map(i=>(0,r.Y)(th.A,{talk:i,focused:!1,focusedReplyId:null,busyActions:ed.busyActions,isBusy:ed.isCardBusy(i.talk_id),onHelpful:ed.setHelpful,onLoadReplies:ed.loadReplies,onVote:ed.voteTarget,onReport:ed.reportTarget,onReportAcknowledged:ed.acknowledgeReport,onEdit:ed.editTarget,onDelete:ed.deleteTarget,unavailableReplyIds:ed.getUnavailableReplyIds(i.talk_id),effectiveReplyCount:ed.getEffectiveReplyCount(i.talk_id,i.listable_reply_count??i.reply_count),dialogFallbackRef:l,onOpenReplies:eh,replyAction:"compose",capabilities:V,capabilityGeneration:G},`${e}:${t}:${i.talk_id}`))}),es.length>0&&(0,r.Y)("button",{type:"button",className:"see-all hv-press",onClick:()=>n.push(`${A}?sort=latest`),children:null!==J?`코디톡 ${J}개 모두 보기`:"코디톡 모두 보기"}),V.can_create&&(0,r.Y)("div",{ref:k,className:"input-bar-slot",children:(0,r.Y)(tf.A,{placeholder:ep?"이 코디에 대한 의견을 남겨주세요":"오프라인에서는 작성할 수 없어요",blocked:!ep,onOpen:eu})}),p&&(0,r.Y)(tg.Ay,{onClose:()=>c(!1),capabilityGeneration:G,content:o,onContentChange:d,onSubmit:ec,busy:em,blocked:!ep,banned:ed.writeBanned,onBannedInteraction:ed.notifyWriteBanned,replyContext:w,talkType:h,onTalkTypeChange:g,currentCoordi:M,comparisonTargets:f,onRequestPickComparison:()=>y(!0),onRemoveComparison:e=>x(t=>t.filter(t=>t.id!==e)),childDialogOpen:b,fallbackFocusRef:l}),(0,r.Y)(tm.A,{open:b,currentCoordiNo:C,selectedTargets:f,onConfirm:x,capabilityGeneration:G,onClose:()=>y(!1)})]})]})};var tz=i(10616),tD=i(3894);let tI="coordiSelectionStates",tE=e=>!!e&&"object"==typeof e&&!Array.isArray(e),tM=e=>!!tE(e)&&"number"==typeof e.optionProductId&&Number.isSafeInteger(e.optionProductId)&&e.optionProductId>0&&"string"==typeof e.label&&"number"==typeof e.qty&&Number.isSafeInteger(e.qty)&&e.qty>0&&"number"==typeof e.addPrice&&Number.isFinite(e.addPrice),tT=e=>!!tE(e)&&1===e.version&&"string"==typeof e.coordiId&&Array.isArray(e.productIds)&&e.productIds.every(e=>"string"==typeof e)&&Array.isArray(e.checkedIds)&&e.checkedIds.every(e=>"string"==typeof e)&&tE(e.selection)&&"number"==typeof e.savedAt&&Number.isFinite(e.savedAt),tO=()=>{try{let e=window.sessionStorage.getItem(tI);if(!e)return{};let t=JSON.parse(e);return tE(t)?t:{}}catch{return{}}};var tP=i(65590),tR=i(89696),tB=i(75565),tL=i(21639),tq=i(34462),tj=i(2875),tH=i(64427),tK=i(85370),tV=i(92358),tG=i(96314),tW=i(99033),tQ=i(29174),tU=i(95570),tX=i(93193),tJ=i(59943),tZ=i(90920),t0=i(63709),t1=i(18466);let t2="#0F0F0F",t4=(0,l.AH)`
1618  @media (min-width: ${tQ.L}px) {
1619    #wrap.coordiDetailPage {
1620      max-width: none;
1621      background: #fff;
1622    }
1623  }
1624`,t6=(0,l.AH)`
1625  @media (max-width: ${tQ.L-1}px) {
1626    #wrap.coordiDetailPage > .btnTop .button button {
1627      bottom: calc(env(safe-area-inset-bottom, 0px) + ${110}px);
1628    }
1629  }
1630`,t5=({coordiId:e,initialDetail:t})=>{let i=(0,a.useRouter)(),o=(0,p.wA)(),{mutate:f}=(0,c.iX)(),{getNhnSid:y}=(0,tX.Ay)(),{record:w}=(0,tU.T)(),Y=(0,p.d4)(eQ.TF),$=(0,p.d4)(eQ.fG),S=$&&$!==tH.CM?$:null,[I,M]=(0,s.useState)(!1);(0,s.useEffect)(()=>M(!0),[]);let T=(0,tQ.p)(),O=(0,tW.q)(),{data:P=t}=(0,u.Ay)(e?["coordi-detail",e,Y]:null,()=>new m.A({token:Y}).getCoordinationDetail(e).then(e=>e.data),{fallbackData:t}),R=(0,tG.T)({id:e??"",initialIsBookmarked:P?.is_bookmarked});(0,s.useEffect)(()=>{if(!P)return;let e=P.images?.find(e=>1===e.no)?.image_url??P.image_url??"";requestIdleCallback(()=>{w({id:P.id,coordi_no:Number(P.id),title:P.name,image_thumbnail_url:e})})},[P,w]),(0,tB.B)();let B=(0,s.useMemo)(()=>(P?.products??[]).filter(e=>!1!==e.is_exhibit),[P]),L=(0,s.useMemo)(()=>{let e=P?.images?.length?P.images:P?.image_url?[{no:1,image_url:P.image_url,pins:[]}]:[];if(!e.length)return[];let t=new Set(B.map(e=>e.id));return e.map(e=>({...e,pins:e.pins?.filter(e=>t.has(e.product_id))??[]}))}
1630,[P,B]),[q,j]=(0,s.useState)(()=>F(B)),[H,K]=(0,s.useState)(()=>C(B)),[V,G]=(0,s.useState)(null),[W,Q]=(0,s.useState)(null),[X,J]=(0,s.useState)([]),[Z,ee]=(0,s.useState)(null),[ei,er]=(0,s.useState)(0),[en,el]=(0,s.useState)(!1),eo=`${e??""}:${B.length?"loaded":"empty"}`,ea=(0,s.useRef)(""),ed=(0,s.useRef)(null);(0,s.useEffect)(()=>{if(ea.current===eo)return;ea.current=eo,ed.current=(0,tz.Wx)();let t=e&&P?((e,t)=>{if(!e)return null;let i=(0,tz.Wx)();if(!i)return null;let r=tO()[i];if(!tT(r)||r.coordiId!==e||Date.now()-r.savedAt>tD.rj)return null;let n=new Set(r.productIds),l=new Set(r.checkedIds),o=F(t),a=C(t);return t.forEach(e=>{if(!n.has(e.id)||!v(e)||(l.has(e.id)?o.add(e.id):o.delete(e.id),delete a[e.id],!A(e)))return;let t=r.selection[e.id];if(!Array.isArray(t))return;let i=e.options?.length?new Map(e.options.filter(k).map(e=>[e.product_id,e])):null,d=[],s=new Set;t.filter(tM).forEach(e=>{if(s.has(e.optionProductId))return;let t=i?.get(e.optionProductId);(!i||t)&&(s.add(e.optionProductId),d.push(t?{...e,label:_(t),addPrice:t.add_price}:e))}),d.length&&(a[e.id]=d)}),{checkedIds:o,selection:a}})(e,B):null;j(t?.checkedIds??F(B)),K(t?.selection??C(B)),G(null),Q(null),J([]),ee(null),er(0)},[e,P,eo,B]);let ep=(0,s.useRef)({products:B,checkedIds:q,selection:H});ep.current={products:B,checkedIds:q,selection:H},(0,s.useEffect)(()=>{let t=t=>{if(!e)return;let i=ep.current;((e,t,i,r,n,l)=>{if(t&&i&&(0,tD.IK)(e)){let e=tO();e[t]={version:1,coordiId:i,productIds:r.map(e=>e.id),checkedIds:[...n],selection:l,savedAt:Date.now()};let o=Object.keys(e);o.length>30&&o.sort((t,i)=>(tT(e[t])?e[t].savedAt:0)-(tT(e[i])?e[i].savedAt:0)).slice(0,o.length-30).forEach(t=>delete e[t]);try{window.sessionStorage.setItem(tI,JSON.stringify(e))}catch{}}})(t,ed.current,e,i.products,i.checkedIds,i.selection)};return i.events.on("routeChangeStart",t),()=>i.events.off("routeChangeStart",t)},[e,i.events]);let ec=(0,s.useCallback)(e=>{i.push(`/products/${e}`)},[i]),eu=(0,s.useCallback)(e=>{j(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})},[]),eh=(0,s.useCallback)(()=>{j(e=>{let t=B.filter(v).map(e=>e.id);return t.length>0&&t.every(t=>e.has(t))?new Set:new Set(t)})},[B]),em=(0,s.useMemo)(()=>B.find(e=>e.id===W)??null,[B,W]),eg=Z?`${ei-X.length} / ${ei}`:void 0,ex=Z?X.length?"다음":"cart"===Z?"장바구니 담기":"구매하기":void 0,eb=(0,s.useCallback)(e=>{J([]),ee(null),er(0),Q(e)},[]),ew=(0,s.useCallback)(()=>{let e=null!==Z;Q(null),J([]),ee(null),er(0),e&&o((0,t0.v8)("옵션을 선택해야 담을 수 있어요"))},[o,Z]),ev=(0,s.useCallback)((e,t)=>{K(i=>({...i,[e]:t})),j(t=>{if(t.has(e))return t;let i=new Set(t);return i.add(e),i});let[i,...r]=X;Q(i??null),J(r)},[X]),ek=(0,s.useCallback)(()=>{o((0,tZ.zz)(x.A,{text:"상품 주문과 장바구니 담기는\n로그인 후 이용할 수 있어요."}))},[o]),e_=(0,s.useCallback)(e=>{if(en)return null;if(!S)return ek(),null;let t=z(B,q,H);if(t.length){let[i,...r]=t;return ee(e),er(t.length),Q(i),J(r),null}return S},[en,S,B,q,H,ek]),eY=(0,s.useCallback)(()=>{let e=[];for(let t of B){if(!q.has(t.id)||!v(t))continue;let i=H[t.id];if(i?.length){for(let r of i)e.push({ownerId:t.id,cart:{name:t.name,product_id:String(r.optionProductId),qty:r.qty}});continue}A(t)||e.push({ownerId:t.id,cart:{name:t.name,product_id:t.id,qty:N(t)}})}return e},[B,q,H]),eN=(0,s.useCallback)((e,t)=>{if(!e.length)return;let i=new Map;e.forEach(({ownerId:e,skuId:t})=>{let r=i.get(e)??new Set;r.add(t),i.set(e,r)}),K(e=>{let t={...e};return i.forEach((e,i)=>{let r=t[i];if(!r?.length)return;let n=r.filter(t=>!e.has(String(t.optionProductId)));n.length?t[i]=n:delete t[i]}),t}),t.length&&j(e=>{let i=new Set(e);return t.forEach(e=>i.delete(e)),i})},[]),e$=(0,s.useCallback)(e=>{if(tJ.j$.isHttpError(e))return 401===e.status?void ek():void o((0,t0.v8)("잠시 후 다시 시도해 주세요"));if(n.A.isAxiosError(e)){if(e.response?.status===401)return void ek();let t=e.response?.data?.meta,i=t?(0,t1.SU)(t):"";if(i)return void o((0,t0.v8)(tj.Qw[i]??i))}o((0,t0.v8)("잠시 후 다시 시도해 주세요"))},[o,ek]),eC=(0,s.useCallback)(async(e,t)=>{let i=eY();if(!i.length)return null;let r=new Map;try{let n=await new g.A({token:e}).getPurchaseState({ids:i.map(e=>e.cart.product_id),qty:i.map(e=>e.cart.qty),type:t});for(let e of n.data.data?.products??[])e.is_available_purchase||r.set(e.product_id,e.text)}catch(e){return e$(e),null}let n=i.filter(e=>!r.has(e.cart.product_id)),l=i.filter(e=>r.has(e.cart.product_id)).map(e=>({ownerId:e.ownerId,skuId:e.cart.product_id})),a=new Set(n.map(e=>e.ownerId)),d=[...new Set(l.map(e=>e.ownerId))].filter(e=>!a.has(e));if(!n.length){eN(l,d);
1630let[e]=[...r.values()].filter(Boolean);return o((0,t0.v8)(e||("cart"===t?"지금은 담을 수 없는 상품이에요":"지금은 구매할 수 없는 상품이에요"))),null}return{sendable:n,blocked:l,ownersToUncheck:d}},[eY,o,eN,e$]),eF=(0,s.useCallback)(async e=>{el(!0);try{let t=await eC(e,"cart");if(!t)return!1;let{sendable:i,blocked:r,ownersToUncheck:n}=t;return await new h.A({token:e}).addCart(i.map(e=>e.cart)),f([h.A.countPath,e]),r.length&&(eN(r,n),o((0,t0.v8)("일부 상품이 품절되어 제외했어요"))),!0}catch(e){return e$(e),!1}finally{el(!1)}},[eC,o,eN,f,e$]),eS=(0,s.useCallback)(async()=>{let e=e_("cart");e&&await eF(e)&&o((0,t0.v8)("장바구니에 담았어요"))},[e_,eF,o]),ez=(0,s.useCallback)(async()=>{let t=e_("buy");if(t){el(!0);try{let i=await eC(t,"order");if(!i)return;let{sendable:r,blocked:n,ownersToUncheck:l}=i;if(n.length){eN(n,l),o((0,t0.v8)("일부 상품이 품절되어 제외했어요. 확인 후 다시 시도해 주세요"));return}window.location.href=d.stringifyUrl({url:tH.Ue,query:{to:"/",productIds:r.map(e=>e.cart.product_id).join(","),qty:r.map(e=>e.cart.qty).join(","),redirect:`/coordi/${e}`,nhnSessionId:y()}})}catch(e){e$(e)}finally{el(!1)}}},[e_,eC,eN,o,e$,e,y]);if((0,s.useEffect)(()=>{!Z||W||(ee(null),er(0),z(B,q,H).length||("cart"===Z?eS():ez()))},[Z,W,B,q,H,eS,ez]),!P)return(0,r.Y)(tR.A,{error:new tJ.gP});let eD=P.publisher?.type==="HIVER"?"HIVER":"SELLER",eI="HIVER"===eD?"하이버가 고른 코디":`${P.publisher?.name??P.seller?.name??"스토어"}의 베스트 코디`,eE=P.similar_coordinations??[],eM=P.best_coordinations??[],eT=(0,r.Y)(b.A,{active:R.isBookmarked,isPending:R.isPending,inactiveColor:D.Nl.gray50,onToggle:()=>{R.toggleBookmark()}});return I&&T?(0,r.FD)(r.FK,{children:[(0,r.Y)(tK.A,{...(0,tV.Ut)(P.name,String(P.id))}),(0,r.Y)(l.mL,{styles:t4}),!!B.length&&(0,r.Y)(l.mL,{styles:t6}),!O&&(0,r.Y)(tP.A,{}),(0,r.Y)(eA,{detail:P,images:L,products:B,publisherType:eD,bestCoordiTitle:eI,checkedIds:q,selection:H,highlightedProductId:V,busy:en,bookmarkSlot:eT,onPinTap:ec,onToggleCheck:eu,onToggleAll:eh,onOpenOptions:eb,onAddToCart:()=>{eS()},onBuy:()=>{ez()}}),(0,r.Y)(e0,{open:!!W,product:em,initialSelections:W?H[W]:void 0,progressLabel:eg,confirmLabel:ex,onConfirm:ev,onClose:ew})]}):(0,r.FD)(r.FK,{children:[(0,r.Y)(tK.A,{...(0,tV.Ut)(P.name,String(P.id))}),(0,r.Y)(tq.O,{title:"",onBack:()=>{window.history.length>1?i.back():i.push("/")},border:!0}),(0,r.FD)(t3,{children:[(0,r.Y)(U,{images:L,alt:P.name??"코디",onPinTap:ec}),(0,r.Y)(t8,{children:(0,r.Y)(ef,{publisher:P.publisher,seller:P.seller})}),(0,r.Y)(ey,{detail:P,bookmarkSlot:eT}),!!B.length&&(0,r.FD)(r.FK,{children:[(0,r.Y)("div",{className:"separator bold"}),(0,r.Y)(es,{products:B,publisherType:eD,checkedIds:q,selection:H,highlightedProductId:V,onToggleCheck:eu,onToggleAll:eh,onOpenOptions:eb})]}),e&&(0,r.Y)(tS,{coordiId:e,token:Y,leadingBand:(0,r.Y)("div",{className:"separator bold"})},`${e}:${Y}`),(!!eM.length||!!eE.length)&&(0,r.Y)("div",{className:"separator bold"}),!!eM.length&&(0,r.FD)(t7,{children:[(0,r.Y)("h2",{children:eI}),(0,r.Y)("div",{className:"scroller",children:eM.map((e,t)=>(0,r.Y)("div",{className:"item",children:(0,r.Y)(et.dO,{coordination:e})},`${e.id??"best"}-${t}`))})]}),!!eE.length&&(0,r.FD)(t9,{children:[(0,r.Y)("h2",{children:"비슷한 스타일의 코디"}),(0,r.Y)("div",{className:"grid",children:eE.map((e,t)=>(0,r.Y)(et.dO,{coordination:e},`${e.id}-${t}`))})]}),!!B.length&&(0,r.Y)(E,{products:B,checkedIds:q,selection:H,busy:en,onAddToCart:()=>{eS()},onBuy:()=>{ez()}})]}),(0,r.Y)(e0,{open:!!W,product:em,initialSelections:W?H[W]:void 0,progressLabel:eg,confirmLabel:ex,onConfirm:ev,onClose:ew})]})};t5.displayName="CoordiDetailPage";let t3=o.A.main`
1631  background: #fff;
1632
1633  .separator {
1634    height: 1px;
1635    background: ${"#FAFAFB"};
1636
1637    &.bold {
1638      height: 8px;
1639    }
1640  }
1641`,t8=o.A.section`
1642  padding: 16px 16px 0;
1643`,t7=o.A.section`
1644  padding: 16px 0 0;
1645
1646  h2 {
1647    margin: 0;
1648    padding: 0 16px;
1649    color: ${t2};
1650    font-size: 14px;
1651    font-weight: 700;
1652    line-height: 20px;
1653  }
1654
1655  .scroller {
1656    display: flex;
1657    /* 아이템 간격·좌우 여백 없음 — 풀블리드 스냅 그리드 (유저 확정, 리스트와 동일) */
1658    gap: 0;
1659    margin-top: 16px;
1660    padding: 0;
1661    overflow-x: auto;
1662    scrollbar-width: none;
1663
1664    &::-webkit-scrollbar {
1665      display: none;
1666    }
1667  }
1668
1669  .item {
1670    flex: 0 0 128px;
1671    width: 128px;
1672  }
1673`,t9=o.A.section`
1674  padding: 16px 0 24px;
1675
1676  h2 {
1677    margin: 0;
1678    padding: 0 16px;
1679    color: ${t2};
1680    font-size: 14px;
1681    font-weight: 700;
1682    line-height: 20px;
1683  }
1684
1685  .grid {
1686    display: grid;
1687    grid-template-columns: repeat(2, minmax(0, 1fr));
1688    /* 아이템 간격·좌우 여백 없음 — 풀블리드 스냅 그리드 (유저 확정, 리스트와 동일) */
1689    gap: 0;
1690    margin-top: 16px;
1691    padding: 0;
1692  }
1693`;var ie=!0;let it=(0,f.W)((0,tL.x)(t5,{isTab:!1,isFooter:!1,isBanner:!1,isPageClass:"coordiDetailPage"}))},75565:(e,t,i)=>{"use strict";i.d(t,{B:()=>a});var r=i(89099),n=i(14232),l=i(10616),o=i(3894);function a(e={}){let t=(0,r.useRouter)(),{loadMore:i,canLoadMore:d=!1,isLoading:s=!1,contentLength:p=0}=e,[c,u]=(0,n.useState)(null),h=(0,n.useRef)(null),m=(0,n.useRef)(null);(0,n.useEffect)(()=>{m.current=(0,l.Wx)();let e=null,i=()=>{e&&(clearTimeout(e),e=null)},r=()=>{e=null,(0,l.CF)()},n=()=>{e||(e=setTimeout(r,120))},o=()=>{i(),(0,l.Wx)()===m.current&&(0,l.CF)()},a=()=>{i(),(0,l.CF)()};return window.addEventListener("scroll",n,{passive:!0}),window.addEventListener("pagehide",a),t.events.on("routeChangeStart",o),()=>{window.removeEventListener("scroll",n),window.removeEventListener("pagehide",a),t.events.off("routeChangeStart",o),i()}},[t.events]),(0,n.useEffect)(()=>{let e=()=>{m.current=(0,l.Wx)();let e=(0,l.ZL)();null===e?h.current?.():(e=>{h.current?.(),(0,o.vr)(),u(e);let t=0,i=0,r=!1,n=performance.now(),l=()=>{r=!0,t&&cancelAnimationFrame(t),window.removeEventListener("wheel",a),window.removeEventListener("touchmove",a),window.removeEventListener("keydown",a),u(null),h.current=null};function a(){r||l()}let d=()=>{if(r)return;let a=performance.now(),s=(0,o.N0)();(window.scrollTo({top:Math.min(e,s),behavior:"auto"}),s>=e-1&&2>=Math.abs(window.scrollY-e)&&!i&&(i=a+o.q9),i&&a>=i||a-n>=o.jF)?l():t=requestAnimationFrame(d)};window.addEventListener("wheel",a,{passive:!0}),window.addEventListener("touchmove",a,{passive:!0}),window.addEventListener("keydown",a),h.current=l,t=requestAnimationFrame(d)})(e)};return e(),t.events.on("routeChangeComplete",e),()=>{t.events.off("routeChangeComplete",e),h.current?.()}},[t.events]),(0,n.useEffect)(()=>{!i||null===c||c<=0||s||!d||(0,o.N0)()>=c-1||i()},[c,i,d,s,p])}},85370:(e,t,i)=>{"use strict";i.d(t,{A:()=>a});var r=i(18153),n=i(77328),l=i.n(n);let o=({title:e,description:t,canonical:i,ogTitle:n,image:o,noindex:a})=>(0,r.FD)(l(),{children:[(0,r.Y)("title",{children:e},"title"),!!a&&(0,r.Y)("meta",{name:"robots",content:"noindex, follow"},"robots"),(0,r.Y)("meta",{name:"title",content:e},"meta:title"),(0,r.Y)("meta",{property:"og:title",content:n||e},"og:title"),!!t&&(0,r.Y)("meta",{name:"description",content:t},"meta:description"),!!t&&(0,r.Y)("meta",{property:"og:description",content:t},"og:description"),!!i&&(0,r.Y)("link",{rel:"canonical",href:i},"canonical"),!!i&&(0,r.Y)("meta",{property:"og:url",content:i},"og:url"),!!o&&(0,r.Y)("meta",{property:"og:image",content:o},"og:image"),(0,r.Y)("meta",{name:"twitter:title",content:n||e},"twitter:title"),!!t&&(0,r.Y)("meta",{name:"twitter:description",content:t},"twitter:description"),!!o&&(0,r.Y)("meta",{name:"twitter:image",content:o},"twitter:image")]});o.displayName="PageSeoHead";let a=o},91420:(e,t,i)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/coordi/[coordiId]",function(){return i(74665)}])},96705:(e,t,i)=>{"use strict";i.d(t,{dL:()=>l,fi:()=>o,uQ:()=>a});var r=i(14232),n=i(66519);function l({items:e,isDependency:t,isLastOption:i}){return e.map(({value:e,product_id:r,meta:n,optionTotalValue:l,isLeaf:o})=>({id:r,value:e,addPrice:t&&i?n.add_price:0,isSoldout:o?!n.isSelectable:l<=0,data:n}))}function o(e){return e.isSoldout?void 0:e.data}function a(e){return(0,r.useMemo)(()=>(function(e){let t=new Map,i=new Map,r=new Map,l=new Map,o=(0,n.uH)(e),a=(0,n.EE)(o.required);for(let e of o.required)for(let[i,r]of e.attributes.entries()){let l=i+1,o=e.attributes[i-1],d=t.get(r.title);d||(d={parentTitle:o?.title??"",title:r.title,items:[],itemsByPrefixKey:new Map},t.set(r.title,d));let s=(0,n.K4)(e.attributes,l);if(!d.itemsByPrefixKey.has(s)){let t={parentValue:o?.value??"",optionTotalValue:a.get(s)??
16930,value:r.value,product_id:e.product_id,meta:e,prefixKey:s,isLeaf:l===e.attributes.length};d.itemsByPrefixKey.set(s,t),d.items.push(t)}}for(let[e,i]of t)r.set(e,{parentTitle:i.parentTitle,title:i.title,items:i.items});for(let e of o.additional){let[t]=e.attributes;if(!t)continue;let r=(0,n.K4)(e.attributes,1),l=i.get(t.title);l||(l={parentTitle:"",title:t.title,items:[]},i.set(t.title,l)),l.items.push({parentValue:"",optionTotalValue:e.availableQuantity,value:t.value,product_id:e.product_id,meta:e,prefixKey:r,isLeaf:!0})}for(let[e,t]of i)l.set(e,{parentTitle:t.parentTitle,title:t.title,items:t.items});return[r,l]})(e),[e])}}},e=>{e.O(0,[4587,8161,7116,7056,6758,636,6593,8792],()=>e(e.s=91420)),_N_E=e.O()}]);

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.