/* Figma CL-007 Toast/Type — ë‹¤í¬ ë°°ê²½(#202020) + radius 12, 하단 ê³ ì •.
position:fixed는 ë·°í¬íЏ 기준ì´ë¼ PCì—서 .page__content.site(우측 --pc-content-width
컬럼)ê°€ ì•„ë‹ˆë¼ í™”ë©´ ì •ì¤‘ì•™ì— ëœ¨ëŠ” ë¬¸ì œê°€ ìžˆì—ˆìŒ â€” _productDetail.cssì˜ .share-toast와
ë™ì¼í•œ 3단 ë¸Œë ˆì´í¬í¬ì¸íŠ¸ë¡œ 콘í…ì¸ ì»¬ëŸ¼ í/위치를 그대로 ë”°ë¼ê°€ê²Œ 함 */
/* 페ì´ë“œ+슬ë¼ì´ë“œì—… ì¸/아웃 — ToastProviderê°€ BottomSheet와 ë™ì¼í•œ mount-hold 패턴으로
is-visible í´ëž˜ìŠ¤ë¥¼ 붙였다 뗀다. ë¸Œë ˆì´í¬í¬ì¸íŠ¸ë§ˆë‹¤ 가로 ì •ë ¬ìš© transform(translateX)ì´
달ë¼ì„œ, 닫힌 ìƒíƒœì˜ translateY(8px)를 ê° ë¸Œë ˆì´í¬í¬ì¸íŠ¸ì˜ ê¸°ì¡´ transformì— ì´ì–´ë¶™ì´ê³
is-visibleì—서 ê·¸ 오프셋만 0으로 ë˜ëŒë¦°ë‹¤(BottomSheet.css와 ë™ì¼í•œ ë°©ì‹) */
.app-toast {
position: fixed;
left: 20px;
right: 20px;
bottom: 90px;
z-index: 100;
display: flex;
align-items: center;
justify-content: space-between;
gap: 24px;
/* Figma Toast/Type — ë†’ì´ 48 ê³ ì •(좌우 16, ìƒí•˜ 0), fill #202020 a0.88 */
padding: 0 16px;
min-height: 48px;
border-radius: 12px;
background-color: rgba(32, 32, 32, 0.88);
box-sizing: border-box;
opacity: 0;
transform: translateY(8px);
transition: opacity 0.25s ease, transform 0.25s ease;
pointer-events: none;
}
.app-toast.is-visible {
opacity: 1;
transform: translateY(0);
pointer-events: auto;
}
@media (min-width: 501px) {
.app-toast {
left: 50%;
right: auto;
width: calc(500px - 40px);
transform: translateX(-50%) translateY(8px);
}
.app-toast.is-visible {
transform: translateX(-50%) translateY(0);
}
}
@media (min-width: 1001px) {
.app-toast {
left: auto;
right: calc((100vw - 1000px) / 2 + 20px);
width: calc(var(--pc-content-width) - 40px);
transform: translateY(8px);
}
.app-toast.is-visible {
transform: translateY(0);
}
}
.app-toast__content {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
}
/* Figma CL-007 — ì°œ(WishList) 변형만 ì•„ì´ì½˜-í…스트 gap 4(카트 ë³€í˜•ì€ 8) */
.app-toast__content--like {
gap: 4px;
}
.app-toast__message {
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
color: #ffffff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* ì•¡ì…˜("보러가기") — Figma 13px/400(메시지와 ë™ì¼ 굵기) */
.app-toast__action {
flex-shrink: 0;
background: none;
border: none;
padding: 0;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
color: #ffffff;
white-space: nowrap;
}
/* ë°°ê²½ 딤 — ëª¨ë“ ë°”í…€ì‹œíŠ¸ 공통 톤. 열림/닫힘 시 페ì´ë“œ.
닫히는 ë™ì•ˆ(opacityê°€ 1→0으로 트랜지션 ë˜ëŠ” 250ms) pointer-eventsê°€ ê³„ì† autoë¼
화면 ì „ì²´ë¥¼ ë®ì€ 채 í´ë¦ì„ ê°€ë¡œì±„ê³ ìžˆì—ˆìŒ â€” 닫기를 누른 ì§í›„ ê°™ì€ íŠ¸ë¦¬ê±°ë¥¼ 다시
누르거나 다른 요소를 íƒí•˜ë©´ ê·¸ í´ë¦ì´ ì´ ë³´ì´ì§€ë„ 않는 ë”¤ì— ë¨¹í˜€ 아무 ë°˜ì‘ì´
없어 ë³´ì´ëŠ” ë¬¸ì œ(바텀시트 ì¸í„°ëž™ì…˜ì´ ê°„í—ì 으로 안 먹히는 ì›ì¸)였ìŒ.
is-visibleì¼ ë•Œë§Œ í´ë¦ì„ ë°›ë„ë¡ í•´ì„œ 닫히기 시작하는 즉시 아래 요소가 í´ë¦ì„ 받게 함 */
.bottom-sheet__dim {
position: fixed;
inset: 0;
z-index: 30;
background-color: rgba(0, 0, 0, 0.5);
opacity: 0;
pointer-events: none;
transition: opacity 0.25s ease;
}
.bottom-sheet__dim.is-visible {
opacity: 1;
pointer-events: auto;
}
/* 바텀시트 본체 — Figma BottomSheet/Variation 공통.
닫힌 ìƒíƒœ(translateY(100%))ì—서 열린 ìƒíƒœ(translateY(0))로 슬ë¼ì´ë“œì—… —
드래그로 ë‹«ì„ ë•ŒëŠ” BottomSheet.tsxê°€ ì¸ë¼ì¸ style로 transitionì„ ë„ê³
ì†ê°€ë½ì„ 그대로 ë”°ë¼ê°€ê²Œ 함. 딤과 ë™ì¼í•œ ì´ìœ 로 닫히는 중(슬ë¼ì´ë“œë‹¤ìš´ ì• ë‹ˆë©”ì´ì…˜
0.3s)ì—ë„ í™”ë©´ì— ê±¸ì³ ìžˆëŠ” ë™ì•ˆì€ í´ë¦ì„ 가로챌 수 있어 pointer-events를 맞춤 */
.bottom-sheet {
position: fixed;
left: 0;
right: 0;
bottom: 0;
z-index: 31;
width: 100%;
background-color: #ffffff;
/* Figma BottomSheet/Variation — ìƒë‹¨ radius 12 */
border-radius: 12px 12px 0 0;
padding-bottom: env(safe-area-inset-bottom, 0px);
transform: translateY(100%);
pointer-events: none;
transition: transform 0.3s cubic-bezier(0.32, 0.72, 0, 1);
}
.bottom-sheet.is-visible {
transform: translateY(0);
pointer-events: auto;
}
/* PC ë ˆì´ì•„웃ì—서 .portal 등 다른 모달과 ë™ì¼í•˜ê²Œ ë·°í¬íЏ 중앙(501~1000px)/.site
우측 ì •ë ¬(1001px~) ê·œì¹™ì„ ë”°ë¦„ — 안 맞추면 ì‹¤ì œ 콘í…ì¸ ì—´ê³¼ 어긋나 ë³´ìž„.
딤(.bottom-sheet__dim)ì€ ì‹œíŠ¸ 패ë„ê³¼ ë³„ê°œì˜ í˜•ì œ ì—˜ë¦¬ë¨¼íŠ¸ë¼ íŒ¨ë„ë§Œ ì¢í˜€ì„œëŠ”
안 ë˜ê³ ë”¤ë„ ë˜‘ê°™ì´ ì¢í˜€ì•¼ PCì—서 배너 ì˜ì—까지 화면 ì „ì²´ë¥¼ ë®ì§€ 않ìŒ.
가로 ì¤‘ì•™ì •ë ¬(translateX)ê³¼ 슬ë¼ì´ë“œì—…(translateY)ì„ í•œ transformì— ê°™ì´ ëª…ì‹œ */
@media (min-width: 501px) {
.bottom-sheet {
left: 50%;
max-width: 500px;
transform: translateX(-50%) translateY(100%);
}
.bottom-sheet.is-visible {
transform: translateX(-50%) translateY(0);
}
.bottom-sheet__dim {
left: 50%;
right: auto;
width: 500px;
transform: translateX(-50%);
}
}
@media (min-width: 1001px) {
.bottom-sheet {
left: auto;
right: calc((100vw - 1000px) / 2);
max-width: var(--pc-content-width);
transform: translateY(100%);
}
.bottom-sheet.is-visible {
transform: translateY(0);
}
.bottom-sheet__dim {
left: auto;
right: calc((100vw - 1000px) / 2);
width: var(--pc-content-width);
transform: none;
}
}
/* í—¤ë”/드래그핸들/타ì´í‹€ — Figma BottomSheetHeader(CT-003/CL-006 공통 실측):
패딩 16/24/16, 핸들 #D3D3D3 + 핸들-타ì´í‹€ 간격 20, 타ì´í‹€ 18px/600/lh24/-0.01em.
(기존엔 ShareBottomSheetë§Œ 로컬로 ì´ ê°’ì„ ë§žì¶”ê³ ìžˆì—ˆìŒ â€” 공용 셸로 승격) */
.bottom-sheet__header {
display: flex;
flex-direction: column;
align-items: center;
padding: 16px 24px 16px;
touch-action: none;
user-select: none;
cursor: grab;
}
.bottom-sheet__drag-handle {
width: 60px;
height: 4px;
border-radius: 999px;
background-color: #d3d3d3;
margin-bottom: 20px;
}
.bottom-sheet__title {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 18px;
font-weight: 600;
line-height: 24px;
letter-spacing: -0.01em;
color: #1a1a1a;
}
/* ì„ íƒ íŠ¸ë¦¬ê±° — Figma Bar/FilterBar > SortButton (ë¼ë²¨ #404040/500) */
.select-bottom-sheet__trigger {
display: flex;
align-items: center;
gap: 4px;
height: 32px;
padding: 0 12px;
border: 1px solid #f5f5f5;
border-radius: 4px;
background-color: #fafafa;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #404040;
white-space: nowrap;
}
.select-bottom-sheet__trigger-chevron {
flex-shrink: 0;
width: 16px;
height: 16px;
transform: rotate(90deg);
}
/* í¼ í•„ë“œí˜• 트리거 variant — 주문서 배송요ì²ì‚¬í•/1:1문ì˜Â·ìƒí’ˆë¬¸ì˜ ìœ í˜•/í´ë ˆìž„ ì‚¬ìœ ì²˜ëŸ¼
페ì´ì§€ CSSê°€ 트리거를 40px+ 필드로 다시 그리는 ê³³ì€ Figma ì‰ë¸ŒëŸ°ì´ 24px(ì •ë ¬ìš© 32px
pill 트리거는 16px ìœ ì§€). SVG ì†ì„±(16)ì€ CSS width/heightê°€ ì´ê²¨ì„œ í¬ê¸°ë§Œ 커진다 */
.select-bottom-sheet__trigger.board-form__type-selector .select-bottom-sheet__trigger-chevron,
.select-bottom-sheet__trigger.product-inquiry-form__type .select-bottom-sheet__trigger-chevron,
.select-bottom-sheet__trigger.order-sheet__delivery-memo-trigger .select-bottom-sheet__trigger-chevron,
.claim__reason .select-bottom-sheet__trigger .select-bottom-sheet__trigger-chevron {
width: 24px;
height: 24px;
}
/* 딤/시트 본체/í—¤ë”(드래그핸들+타ì´í‹€)/PC ë°˜ì‘í˜•ì€ @shared/BottomSheet 공통 ìŠ¤íƒ€ì¼ ì‚¬ìš© */
/* 옵션 ëª©ë¡ â€” Figma RadioOptionSection pad 12/24/20/24, 옵션 ê°„ gap 16 */
.select-bottom-sheet__options {
display: flex;
flex-direction: column;
gap: 16px;
padding: 12px 24px 20px;
margin: 0;
list-style: none;
}
/* ì„ íƒ ì•ˆ ëœ ì˜µì…˜ì€ íšŒìƒ‰, ì„ íƒëœ 옵션만 ê²€ì • — Figma General/RadioOption 스펙
(ë¼ë””오-ë¼ë²¨ gap 8, ë¼ë²¨ 14px/500) */
.select-bottom-sheet__option {
display: flex;
align-items: center;
gap: 8px;
background: none;
border: none;
padding: 0;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
}
.select-bottom-sheet__option.is-selected {
color: #1a1a1a;
}
/* note(우측 ë³´ì¡° 문구)를 오른쪽 ë으로 ë°€ë ¤ë©´ ë²„íŠ¼ì´ li íì„ ë‹¤ 차지해야 한다. noteê°€
없는 기존 호출부(ì •ë ¬/í´ë ˆìž„ ì‚¬ìœ )는 ë‚´ìš©ì´ ì™¼ìª½ ì •ë ¬ 그대로여서 ë³´ì´ëŠ” ê±´ 그대로ê³
íƒ ì˜ì—ë§Œ í–‰ ì „ì²´ë¡œ 넓어진다 */
.select-bottom-sheet__option {
width: 100%;
text-align: left;
}
.select-bottom-sheet__option-note {
margin-left: auto;
padding-left: 8px;
font-size: 13px;
font-weight: 500;
color: #9b9b9b;
}
/* í’ˆì ˆ/ìž¬ê³ ë¶€ì¡±ì²˜ëŸ¼ ê³ ë¥¼ 수 없는 í•목 — ì„ íƒëœ 것과 구분ë˜ê²Œ ë” í리게 */
.select-bottom-sheet__option.is-disabled,
.select-bottom-sheet__option.is-disabled .select-bottom-sheet__option-note {
color: #c4c4c4;
}
.select-bottom-sheet__option.is-disabled .select-bottom-sheet__radio {
background-color: #f5f5f5;
}
.select-bottom-sheet__radio {
flex-shrink: 0;
width: 20px;
height: 20px;
border-radius: 50%;
border: 1px solid #e6e6e6;
box-sizing: border-box;
position: relative;
}
/* Figma General/RadioButton(Selected=True) — í…Œë‘리가 ì•„ë‹ˆë¼ ì› ì „ì²´ë¥¼ 채우ê³
ê°€ìš´ë° í° ì›(10px)ì„ ì–¹ì–´ êµµì€ ë§ì²˜ëŸ¼ ë³´ì´ê²Œ 하는 ìŠ¤íƒ€ì¼ */
.select-bottom-sheet__radio.is-selected {
background-color: #111111;
border-color: #111111;
}
.select-bottom-sheet__radio.is-selected::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 10px;
height: 10px;
border-radius: 50%;
background-color: #fbfbfb;
transform: translate(-50%, -50%);
}
/* CTA ì˜ì— — Figma Button/CTAArea pad 12/16/12/16.
(버튼 ë¼ë²¨ 굵기는 Figma í”„ë ˆìž„ë§ˆë‹¤ 표기가 ë‹¬ë¼ ì• ë§¤ — 현행 600 ìœ ì§€) */
.select-bottom-sheet__cta {
display: flex;
gap: 8px;
padding: 12px 16px;
}
.select-bottom-sheet__cancel-btn,
.select-bottom-sheet__apply-btn {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
height: 52px;
border-radius: 8px;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
}
.select-bottom-sheet__cancel-btn {
border: none;
background-color: #f0f4fe;
color: #3c56d6;
}
.select-bottom-sheet__apply-btn {
border: none;
background-color: #4a69ea;
color: #ffffff;
}
/* 관리ìžê°€ 1ëŽìФ ì¹´í…Œê³ ë¦¬ì— ë“±ë¡í•œ ìƒë‹¨ 콘í…ì¸ ì˜ì—.
_category.cssì˜ .category-content(CategoryBrowse 우측 콘í…ì¸ ë ˆì´ì•„웃 컨테ì´ë„ˆ,
flex:1)와 ì´ë¦„ì´ ê°™ì•„ ë‘ í™”ë©´ì´ ë™ì‹œì— 로드ë˜ë©´ 로드 ìˆœì„œì— ë”°ë¼ ì„œë¡œ 새어들 수
ìžˆì—ˆìŒ â€” ì´ ìœ„ì ¯ ì „ìš© ê³ ìœ í´ëž˜ìŠ¤ë¡œ 분리 */
.category-menu__content {
background-color: #ffffff;
}
/* ì—디터가 ì €ìž¥í•˜ëŠ” 배너 마í¬ì—…ì€ <p><img ...><br></p> 형태 — 문단 기본 마진과 ì´ë¯¸ì§€
ì›ë³¸ í¬ê¸° 그대로 ë Œë”ë¼, ì´ë¯¸ì§€ê°€ 화면 í보다 작으면 옆·아래 ì—¬ë°±ì´ ë‚¨ì•˜ë‹¤(ë²µì—ë”
1277989 배너ì—서 실확ì¸, 2026-08-14). 배너 ì´ë¯¸ì§€ëŠ” í•ìƒ í™”ë©´ íì— ë§žì¶° 채운다 */
.category-menu__content p {
margin: 0;
}
.category-menu__content img {
display: block;
width: 100%;
height: auto;
}
/* ìƒí’ˆíƒ€ìž… í•„í„°íƒ â€” Figma Tab/FilterSection(5356:44226), 섹션 패딩 12/16/20 */
.category-filter-tabs {
display: flex;
gap: 8px;
padding: 12px 16px 20px;
overflow-x: auto;
/* 가로 스í¬ë¡¤ì€ 그대로 ë™ìž‘í•˜ë˜ ìŠ¤í¬ë¡¤ë°”ë§Œ 숨김 */
scrollbar-width: none;
-ms-overflow-style: none;
}
.category-filter-tabs::-webkit-scrollbar {
display: none;
}
.category-filter-tabs__item {
flex-shrink: 0;
display: flex;
align-items: center;
height: 32px;
/* Figma pill 좌우 패딩 12 */
padding: 0 12px;
border-radius: 999px;
border: 1px solid #e6e6e6;
background-color: #ffffff;
font-size: 14px;
font-weight: 600;
color: #9b9b9b;
text-decoration: none;
white-space: nowrap;
}
.category-filter-tabs__item.is-active {
border-color: transparent;
background-color: #202020;
color: #ffffff;
}
/* ── ì¹´í…Œê³ ë¦¬ ìƒì„¸ 페ì´ì§€(/products?categoryNo=..) ìƒë‹¨ — Figma SA-000(5356:44213) ──
/category ì „ì²´ 그리드(3ì—´, ì‚¬ê° ì•„ì´ì½˜ — CategoryBrowse/_category.css)와는 다른
스펙(5ì—´, ì›í˜• ì•„ì´ì½˜)ì´ë¼ ë³„ë„ í´ëž˜ìФ.
Figma ìƒë‹¨ì— "ì¸ê¸° 어종" ê°™ì€ ì„¹ì…˜ ì œëª©ì´ ìžˆëŠ”ë°, ì´ê±´ ì¹´í…Œê³ ë¦¬ëª…ì„ ê·¸ëŒ€ë¡œ 반복하는 게
ì•„ë‹ˆë¼ ì¹´í…Œê³ ë¦¬ë³„ë¡œ 다른 마케팅 문구(브랜드관 등ì—서 ëë¼ê³ 쓸지 ì •ì˜ëœ 게 ì—†ìŒ)ë¼
지어내지 ì•Šê³ ë¹„ì›Œë‘ â€” 문구가 ì •í•´ì§€ë©´ ì—¬ê¸°ì— ì¶”ê°€ */
/* Figma SeasonFishCategorySection — 섹션 패딩 ìƒ16/하20, ì•„ì´í…œ 56px ê³ ì •í +
가로 gap 12(í–‰ 중앙 ì •ë ¬), í–‰ ê°„ gap 4 */
.category-detail-icon-grid {
display: grid;
grid-template-columns: repeat(5, 56px);
gap: 4px 12px;
justify-content: center;
padding: 16px 16px 20px;
}
.category-detail-icon-grid__item {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
text-decoration: none;
}
.category-detail-icon-grid__img-wrap {
width: 56px;
height: 56px;
border-radius: 50%;
background-color: #fafafa;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
box-sizing: border-box;
}
/* 현재(ë˜ëŠ” depth=1ì¼ ë•Œ 기본값으로) ë³´ê³ ìžˆëŠ” í•목 표시 — Figma 예시 ì•„ì´ì½˜ì— ìžˆë˜ ë§ */
.category-detail-icon-grid__item.is-active .category-detail-icon-grid__img-wrap {
border: 1px solid #202020;
}
.category-detail-icon-grid__img {
width: 44px;
height: 44px;
object-fit: fill;
}
.category-detail-icon-grid__label {
font-size: 12px;
font-weight: 400;
letter-spacing: 0.02em;
color: #404040;
text-align: center;
word-break: keep-all;
line-height: 1.3;
}
/* Figma는 활성 í•ëª©ë„ ë¼ë²¨ 12px/400/#404040 그대로(ì•„ì´ì½˜ ë§ë§Œ 다름) —
활성 ë¼ë²¨ ê°•ì¡°(700/#1a1a1a)는 Figmaì— ì—†ëŠ” ê°’ì´ë¼ ì œê±°í•¨ */
/* ì•„ì´ì½˜ 그리드 ↔ ìƒí’ˆ ëª©ë¡ ì‚¬ì´ êµ¬ë¶„ ë¸”ë¡ â€” Figma General/Divider(5356:44225) */
.category-detail-divider {
height: 8px;
background-color: #fafafa;
}