@import url(https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&display=swap);
/* ì–´ì‹ ìƒµ ë ˆì´ì•„웃 오버ë¼ì´ë“œ */
/* 스í¬ë¡¤ì´ 있는 페ì´ì§€ → 없는 페ì´ì§€ë¡œ ì´ë™í•˜ê±°ë‚˜ ëª¨ë‹¬ì´ ì—´ë ¤ 스í¬ë¡¤ë°”ê°€ 사ë¼ì§€ë©´
ê·¸ë§Œí¼ ì‚¬ìš© 가능한 íì´ ëŠ˜ì–´ë‚˜ .page(justify-content:center) ì¤‘ì•™ì •ë ¬ ê¸°ì¤€ì´ ë°”ë€Œë©´ì„œ
좌측 banner--left/.siteê°€ 화면 밀리는 ë¬¸ì œê°€ ìžˆì—ˆìŒ â€” 스í¬ë¡¤ë°” ìžì²´ë¥¼ í•ìƒ ìˆ¨ê²¨ì„œ
(íœ /터치 스í¬ë¡¤ ë™ìž‘ì€ ê·¸ëŒ€ë¡œ ìœ ì§€) 스í¬ë¡¤ë°” ìœ ë¬´ê°€ ë ˆì´ì•„웃 íì— ì•„ì˜ˆ ì˜í–¥ì„ 주지
않게 함(ìžë¦¬ë¥¼ 예약하는 ëŒ€ì‹ ì• ì´ˆì— í‘œì‹œí•˜ì§€ 않는 ë°©ì‹) */
html {
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* 구 Edge/IE */
}
html::-webkit-scrollbar {
display: none; /* Chrome/Safari */
}
/* ── 콘í…ì¸ ê°€ 화면보다 ì§§ì„ ë•Œ 하단 CTA/BottomNavê°€ 화면 중간ì—서 ë¶• 뜨는 ë¬¸ì œ ──
ë² ì´ìФ 스킨(aurora.css)ì€ .page__content.siteê°€ ì¼ë°˜ block í름ì´ê³
main.l-contentì—” calc(100vh - 156px - 331px)ë¼ëŠ” 매ì§ë„˜ë²„ min-heightë§Œ 있ìŒ.
ì´ 156/331ì€ ì´ ìŠ¤í‚¨ì˜ ì‹¤ì œ í—¤ë”(56px)/푸터 높ì´ì™€ ì „í˜€ 안 맞아서, 컨í…ì¸ ê°€
ì§§ì€ íŽ˜ì´ì§€ì—서는 .page__content.site ìžì²´ëŠ” min-height:100vh로 ë·°í¬íŠ¸ë§Œí¼
커지지만 ê·¸ ì•ˆì˜ header+main+footer+CTA 합계가 그보다 ì§§ì•„ 마지막 요소
ë’¤ì— ë¹ˆ 여백만 ë‚¨ê³ CTAê°€ ì§„ì§œ 화면 하단보다 ìœ„ì— ë– ë²„ë ¸ìŒ(sticky는 ìžê¸°
normal-flow 위치보다 아래로는 못 ë‚´ë ¤ê°).
block ëŒ€ì‹ flex-column으로 ë°”ê¾¸ê³ main.l-contentê°€ flex:1로 남는 공간ì„
ì „ë¶€ í¡ìˆ˜í•˜ê²Œ 하면, í—¤ë”/푸터/CTA ì‹¤ì œ 높ì´ê°€ ì–¼ë§ˆë“ í•ìƒ í™”ë©´ 하단ì—
붙는다 — 페ì´ì§€ë§ˆë‹¤ 다른 í—¤ë”/푸터/BottomNav ìœ ë¬´ ì¡°í•©ì—ë„ ë§¤ì§ë„˜ë²„ ì—†ì´ ëŒ€ì‘ */
.page__content.site {
display: flex;
flex-direction: column;
min-height: 100dvh;
}
/* ── ì¢ì€ 화면(논리 í 375px 미만)ì—서 좌우 스í¬ë¡¤ì´ ìƒê¸°ë˜ ë¬¸ì œ ──
ë² ì´ìФ ìŠ¤í‚¨ì€ .page__contentì— min-width:375px를 걸어둔다. 그래서 논리 íì´ 360pxì¸
기기(ê°¤ëŸì‹œ S 계열 다수)ì—서는 페ì´ì§€ íì´ í™”ë©´ë³´ë‹¤ 15px ë„“ì–´ì ¸ ì „ í™”ë©´ì— ê°€ë¡œ 스í¬ë¡¤ì´
ìƒê¸°ê³ , 오른쪽 ë(장바구니 ì•„ì´ì½˜/기íšì „ 카드 등)ì´ í™”ë©´ 밖으로 밀린다.
최소 í ì œì•½ì„ ì—†ì• í™”ë©´ íì„ ê·¸ëŒ€ë¡œ 따르게 한다 — 안쪽 ìš”ì†Œë“¤ì€ ì´ë¯¸ ìœ ë™íì´ë¼
360pxì—ì„œë„ ë ˆì´ì•„ì›ƒì´ ê¹¨ì§€ì§€ 않는다(PC는 max-width:500px ê·œì¹™ì´ ê·¸ëŒ€ë¡œ ì ìš©ë¨) */
.page__content {
min-width: 0;
}
.page__content.site > main.l-content {
flex: 1 0 auto;
min-height: 0;
}
/* í—¤ë”(뒤로가기+타ì´í‹€) ìœ„ì— ë¶™ëŠ” ì–‡ì€ ë¸Œëžœë“œ 블루 ë°” — 주문 ìƒì„¸ë‚´ì—(Figma
PaymentHead) 등ì—서 사용. Header는 Layout.tsxê°€ 그리는 공용 ì»´í¬ë„ŒíŠ¸ë¼ íŽ˜ì´ì§€
쪽ì—서 ê·¸ ì•žì— ì§ì ‘ ë Œë”ë§í• 수 없어 hasTopColorBar ë ˆì´ì•„웃 ìƒíƒœë¡œ ì œì–´í•œë‹¤ */
.top-color-bar {
height: 16px;
background-color: #4a69ea;
flex-shrink: 0;
position: sticky;
top: 0;
z-index: 6;
}
/* ì´ ë°”ê°€ 있는 페ì´ì§€ì—서는 í—¤ë”ê°€ 바로 ë°‘(16px)ì— ë¶™ì–´ì•¼ 스í¬ë¡¤í•´ë„ 겹치지 ì•ŠìŒ â€”
바가 없는 다른 페ì´ì§€ì˜ í—¤ë”(top: 0)ì—” ì˜í–¥ ì—†ë„ë¡ ì¸ì ‘ í˜•ì œ ì„ íƒìžë¡œ 스코프 */
.top-color-bar + .header {
top: 16px;
}
/* ── í—¤ë” â”€â”€ */
/* ë² ì´ìФ 스킨(aurora.css)ì´ .headerì— min-height: 90px를 ê°•ì œí•´ì„œ ì‹¤ì œ 높ì´ê°€
56px보다 커지는 ë¬¸ì œê°€ 있어 min-height를 리셋 */
.header {
height: var(--header-height);
min-height: 0;
background: #fff;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 16px;
flex-shrink: 0;
position: sticky;
top: 0;
z-index: 5;
}
/* ë©”ì¸ í—¤ë”: ë¡œê³ ì¢Œì¸¡ ì •ë ¬ */
.header .header__title {
margin: 0;
font-size: inherit;
line-height: 1;
flex-shrink: 0;
}
.header .header__title h1,
.header h1.header__title {
margin: 0;
font-size: inherit;
line-height: 1;
}
.header .header__logo-img {
height: 32px;
width: auto;
object-fit: contain;
display: block;
}
/* 배너 ì—†ì„ ë•Œ í…스트 ë¡œê³ fallback */
.header__logo-text {
font-size: 22px;
font-weight: 700;
color: var(--eoshin-navy, #101f3b);
text-decoration: none;
letter-spacing: -0.5px;
line-height: 1;
}
/* í—¤ë” ìš°ì¸¡ ì•„ì´ì½˜ ì˜ì— */
.header__actions {
display: flex;
align-items: center;
gap: 4px;
}
.header__icon-btn {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
color: var(--eoshin-navy, #101f3b);
background: transparent;
border: none;
cursor: pointer;
transition: background 0.15s;
position: relative;
text-decoration: none;
flex-shrink: 0;
}
.header__icon-btn:hover {
background: var(--eoshin-bg, #f5f8fb);
}
.header__icon-btn:active {
background: var(--eoshin-border, #e1eaef);
}
/* 장바구니 뱃지 — Figma BadgeNumber(구/ì‹ TopBar ì»´í¬ë„ŒíŠ¸ì…‹ 모ë‘) fill #FF5A5D.
ìˆ«ìž í°íŠ¸ëŠ” Figma 표기가 14pxì¸ë° 16px ì› ì•ˆì—서 ë‘ ìžë¦¬ 수가 ìž˜ë ¤ 12px로 ì ˆì¶©
(기존 10px보다 Figmaì— ê°€ê¹ê²Œ 키움 — figma-audit-full.md CL-001 ì°¸ê³ ) */
.header__cart-badge {
position: absolute;
top: 6px;
right: 6px;
min-width: 16px;
height: 16px;
border-radius: 50%;
background: #ff5a5d;
color: #fff;
font-size: 12px;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
padding: 0 3px;
line-height: 1;
}
/* 서브 í—¤ë” â€” Figma Bar/TopBar(5218:35671) ì»´í¬ë„ŒíЏ ì…‹ 기준.
뒤로가기 ë²„íŠ¼ì´ ìžˆëŠ” 화면(TopBar=Title)ì€ íƒ€ì´í‹€ì´ 버튼 바로 ì˜†ì— ì¢Œì¸¡ ì •ë ¬ë˜ê³ ,
뒤로가기가 없는 화면(TopBar=TitleOnly)ë§Œ 타ì´í‹€ì´ ê°€ìš´ë° ì •ë ¬ë¨ â€” 지금까지는
뒤로가기 ìœ ë¬´ì™€ 무관하게 í•ìƒ ê°€ìš´ë° ì •ë ¬ë¡œ ê²¹ì³ ìžˆì—ˆìŒ */
.header--sub {
justify-content: space-between;
/* ë² ì´ìФ 스킨(aurora.css)ì˜ .header--sub{border-bottom:1px solid
var(--dark-gray-color)}ê°€ ëª¨ë“ ì„œë¸Œ í—¤ë”ì— ë¬´ì¡°ê±´ 진한 회색 êµ¬ë¶„ì„ ì„
ê·¸ë ¤ì„œ 리셋 — ì‹¤ì œë¡œ 필요한 경우(아래 :has 규칙)ë§Œ 다시 켬 */
border-bottom: none;
}
.header--sub .header__title-group {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
min-width: 0;
}
.header--sub .header__title-group--centered {
justify-content: center;
}
/* í—¤ë” í•˜ë‹¨ êµ¬ë¶„ì„ â€” Figma Bar/TopBar ì»´í¬ë„ŒíŠ¸ì…‹ì„ ë³´ë©´ Logo/Title/IconFalse
변형엔 strokeê°€ ì—†ê³ , 뒤로가기 ì—†ì´ íƒ€ì´í‹€ë§Œ ê°€ìš´ë° ìžˆëŠ” TitleOnly 변형ì—ë§Œ
#e6e6e6 êµ¬ë¶„ì„ ì´ ìžˆìŒ. 지금까지 .headerì— ë¬´ì¡°ê±´ border-bottomì„ ê·¸ë ¤ì„œ
ëª¨ë“ í™”ë©´ì— ì•ˆ 보여야 í• ì¤„ì´ ê³„ì† ë‚˜ì˜¤ê³ ìžˆì—ˆìŒ */
.header--sub:has(.header__title-group--centered) {
border-bottom: 1px solid #e6e6e6;
}
/* ë²¤ë” ê¸°ë³¸ê°’(.l-panel{margin-bottom:10px;border-width:1px 0;box-shadow:0 10px 1px
#f5f5f5})ì´ ëª¨ë“ ì½˜í…ì¸ ì„¹ì…˜ ìœ„ì•„ëž˜ì— í…Œë‘리+그림ìž+ì—¬ë°±ì„ ê·¸ë¦¬ëŠ”ë°, ì´ ìŠ¤í‚¨ì„
쓰는 ì–´ë–¤ í™”ë©´ì˜ Figmaì—ë„ ì´ êµ¬ë¶„ì„ ì´ ì‹¤ì œë¡œ 존재한 ì ì´ ì—†ì—ˆë‹¤ — ìƒí’ˆìƒì„¸
íƒ(product-content)/ë©”ì¸ ìƒí’ˆì„¹ì…˜(product-section)/ëª©ë¡ íŽ˜ì´ì§€(gallery-list-page)/
리뷰 í¼(review-form__content) 등 ë§ˆì£¼ì¹ ë•Œë§ˆë‹¤ 매번 ê°™ì€ ìž”ìž¬ë¥¼ 개별ì 으로
êº¼ì™”ë˜ ê±¸ 여기서 한 ë²ˆì— ì „ì—으로 ì œê±°í•œë‹¤ */
.l-panel {
margin-bottom: 0;
border: none;
box-shadow: none;
}
.header--sub .header__title {
font-size: 18px;
font-weight: 600;
line-height: 24px;
color: #1a1a1a;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* ë² ì´ìФ 스킨(aurora.css)ì´ ë™ì¼í•œ í´ëž˜ìŠ¤ëª…ì— position:absolute/top/left/transformì„
ì´ë¯¸ ì •ì˜í•˜ê³ 있어(ê°™ì€ ì´ë¦„ì„ ê·¸ëŒ€ë¡œ 재사용하는 구조), flex-shrinkë§Œ ë®ì–´ì¨ì„œëŠ”
ê·¸ ì ˆëŒ€ 위치 ì§€ì •ì´ ê·¸ëŒ€ë¡œ 남아 flex íë¦„ì„ ë²—ì–´ë‚˜ ìžˆì—ˆìŒ â€” 명시ì 으로 리셋 */
.header--sub .header__left-btn {
position: static;
top: auto;
left: auto;
transform: none;
flex-shrink: 0;
}
/* ë² ì´ìФ 스킨 arrow-left 스프ë¼ì´íЏ ì•„ì´ì½˜ì„ Figma ChevronLeft 벡터로 êµì²´ —
검색 모달 뒤로가기(search-keyword-modal__back-btn)와 ë™ì¼í•œ êµì²´ë¥¼ ì¼ë°˜ í—¤ë”ì—ë„ ì ìš©.
stroke #404040 — Figma TopBar=Sub 구(5218:35693)/ì‹ (6978) ì»´í¬ë„ŒíŠ¸ì…‹ê³¼ ì‹¤ì œ ì¸ìŠ¤í„´ìŠ¤
ëª¨ë‘ #404040 (기존 #1A1A1A는 검색 모달 쪽과 어긋난 ê°’ì´ì—ˆìŒ) */
.header--sub .header__left-btn .ico--arrow-left {
width: 24px;
height: 24px;
margin: 0;
background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27%3E%3Cpath d=%27M15 18L9 12L15 6%27 stroke=%27%23404040%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/svg%3E");
background-position: center;
background-size: contain;
}
.header--sub .header__cart-btn {
position: static;
top: auto;
right: auto;
transform: none;
flex-shrink: 0;
}
.header--sub .header__cancel-btn {
position: static;
top: auto;
right: auto;
transform: none;
flex-shrink: 0;
}
/* ── 검색 모달 ── */
/* Figma 노드 5236:30508 — ë² ì´ìФ 스킨 ê¸°ë³¸ê°’ì€ ë°‘ì¤„(underline) 형태 ìž…ë ¥ì°½ì¸ë°,
ì–´ì‹ ìƒµì€ íšŒìƒ‰ ë°°ê²½ì˜ ë‘¥ê·¼ 검색창으로 사용. 좌측 16px / 우측 8px ì—¬ë°±ì€ Figma í”„ë ˆìž„ 그대로 */
.search-keyword-modal__top {
height: var(--header-height);
margin: 0;
padding: 0 8px 0 16px;
gap: 4px;
/* í—¤ë”-콘í…ì¸ ì‚¬ì´ êµ¬ë¶„ì„ ì—†ìŒ â€” Figma Bar/SearchBar(5236:30507)는 ìŠ¤íŠ¸ë¡œí¬ íŽ˜ì¸íŠ¸ê°€
없다(벤ë”ì˜ 2px 밑줄과, ì˜ˆì „ì— ìš°ë¦¬ê°€ ìž„ì˜ë¡œ ë„£ì—ˆë˜ 1px ë¼ì¸ ëª¨ë‘ Figmaì— ì—†ëŠ” 줄 —
2026-08-13 ì‚¬ìš©ìž ì§€ì 으로 ì œê±°) */
border-bottom: none;
}
.search-keyword-modal__back-btn {
flex-shrink: 0;
width: 24px;
height: 24px;
color: var(--eoshin-navy, #101f3b);
}
/* ë² ì´ìФ 스킨 arrow-left 스프ë¼ì´íЏ ì•„ì´ì½˜ì„ Figma ChevronLeft 벡터로 êµì²´ */
.search-keyword-modal__back-btn .ico--arrow-left {
width: 24px;
height: 24px;
margin: 0;
background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27%3E%3Cpath d=%27M15 18L9 12L15 6%27 stroke=%27%23404040%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/svg%3E");
background-position: center;
background-size: contain;
}
/* .header--search(SR-004 검색 ê²°ê³¼ í—¤ë”)ë„ ê²€ìƒ‰ 모달과 ê°™ì€ Bar/SearchBar ì»´í¬ë„ŒíŠ¸ë¥¼
재사용하는 화면ì´ë¼, 아래 .search-field 스킨 ê·œì¹™ë“¤ì€ ë‘ ì»¨í…스트 모ë‘ì— ì 용한다 */
.search-keyword-modal .search-field,
.header--search .search-field {
display: flex;
align-items: center;
flex: 1;
gap: 4px;
}
.search-keyword-modal .search-field__input,
.header--search .search-field__input {
display: flex;
align-items: center;
flex: 1;
height: 40px;
padding: 0 12px;
background-color: #fafafa;
border-radius: 8px;
}
.search-keyword-modal .text-field,
.header--search .text-field {
flex: 1;
border: none !important;
background: transparent;
}
.search-keyword-modal .text-field input,
.header--search .text-field input {
width: 100%;
font-size: 16px !important;
color: var(--eoshin-text-secondary, #404040);
background: transparent;
}
.search-keyword-modal .text-field input::placeholder,
.header--search .text-field input::placeholder {
color: var(--eoshin-text-muted, #9b9b9b);
}
.search-keyword-modal .search-field__clear-btn,
.header--search .search-field__clear-btn {
flex-shrink: 0;
width: 24px;
height: 24px;
}
/* ìž…ë ¥ê°’ì´ ì—†ì„ ë•Œ(í”Œë ˆì´ìŠ¤í™€ë”ê°€ ë³´ì´ëŠ” ìƒíƒœ)는 Figma처럼 í´ë¦¬ì–´ ë²„íŠ¼ì„ ìˆ¨ê¹€ */
.search-keyword-modal .search-field__input:has(input:placeholder-shown) .search-field__clear-btn,
.header--search .search-field__input:has(input:placeholder-shown) .search-field__clear-btn {
display: none;
}
.search-keyword-modal .search-field__submit-btn,
.header--search .search-field__submit-btn {
flex-shrink: 0;
width: 40px;
height: 40px;
color: var(--eoshin-navy, #101f3b);
}
/* ë² ì´ìФ 스킨 magnet 스프ë¼ì´íЏ ì•„ì´ì½˜ì„ Figma ë‹ë³´ê¸° 벡터로 êµì²´ */
.search-keyword-modal .search-field__submit-btn .ico--magnet,
.header--search .search-field__submit-btn .ico--magnet {
width: 24px;
height: 24px;
margin: 0;
background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27%3E%3Cpath d=%27M21 21L16.66 16.66M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z%27 stroke=%27%23404040%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/svg%3E");
background-position: center;
background-size: contain;
}
/* .header(기본)ì´ ì¢Œìš° 16px ëŒ€ì¹ íŒ¨ë”©ì¸ë°, Figma Bar/SearchBar는 좌 16px/ìš° 8px/
버튼-ìž…ë ¥ì°½ 간격 4px로 ë¹„ëŒ€ì¹ â€” 검색 모달(.search-keyword-modal__top)ê³¼ ë™ì¼ ê°’ */
.header--search {
padding: 0 8px 0 16px;
gap: 4px;
}
/* 최근 검색어 — ë² ì´ìФ 스킨 기본값(í…Œë‘리 박스 + 줄 구분 리스트)ì´ ì•„ë‹Œ
í…Œë‘리 없는 ì˜ì— + 알약(pill) 형태 태그 목ë¡ìœ¼ë¡œ 오버ë¼ì´ë“œ.
ìƒë‹¨ 여백 12px — Figma Bar/SectionHeaderBar padding-top 12(기존 20px는 8px í¼) */
.search-keyword-modal .recent-keyword {
width: 100%;
min-height: 0;
margin: 0;
padding: 12px 16px 20px;
border: none;
border-radius: 0;
}
.search-keyword-modal .recent-keyword__top {
padding: 0 0 12px;
border-bottom: none;
}
/* ë²¤ë” RecentKeyword.jsê°€ 타ì´í‹€ "최근검색어"/버튼 "검색어 ì „ì²´ì‚ì œ"를 하드코딩하ê³
있어(오버ë¼ì´ë“œ prop ì—†ìŒ) Figma SR-001 문구("최근 검색어"/"ì „ì²´ ì‚ì œ")로 CSS 치환 —
ì›ë¬¸ì€ font-size:0으로 ìˆ¨ê¸°ê³ ::before로 올바른 문구를 그린다(í´ë¦ ë™ìž‘ì€ ì›ëž˜ 버튼 그대로) */
.search-keyword-modal .recent-keyword__top p {
font-size: 0;
}
.search-keyword-modal .recent-keyword__top p::before {
content: '최근 검색어';
font-size: 14px;
font-weight: 600;
line-height: 18px;
color: var(--eoshin-text-primary, #1a1a1a);
}
.search-keyword-modal .recent-keyword__top button {
font-size: 0;
}
.search-keyword-modal .recent-keyword__top button::before {
content: 'ì „ì²´ ì‚ì œ';
font-size: 12px;
line-height: 18px;
color: var(--eoshin-text-muted, #9b9b9b);
}
.search-keyword-modal .recent-keyword__content [data-testid='recent-keyword__list'] {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.search-keyword-modal .recent-keyword__item {
justify-content: flex-start;
gap: 4px;
margin-top: 0;
height: 32px;
padding: 0 12px;
/* Figma General/Chip stroke #e6e6e6 — 브랜드 ë³´ë” ë³€ìˆ˜(#e1eaef)와 다른 ê³ ì •ê°’ */
border: 1px solid #e6e6e6;
border-radius: 999px;
background-color: #fff;
}
.search-keyword-modal .recent-keyword__item button:first-child {
font-size: 14px;
font-weight: 500;
color: var(--eoshin-text-secondary, #404040);
}
.search-keyword-modal .recent-keyword__item [data-testid='recent-keyword__item-delete-btn'] {
width: 16px;
height: 16px;
}
/* 검색 ê²°ê³¼ ì—†ìŒ(빈 ìƒíƒœ) — ì•„ì´ì½˜ ì—†ì´ ì§§ì€ ì•ˆë‚´ 문구만 표시 */
.search-keyword-modal .recent-keyword__content-empty {
padding: 32px 0 0;
}
.search-keyword-modal .recent-keyword__content-empty::before {
content: none;
}
.search-keyword-modal .recent-keyword__content-empty p {
font-size: 14px;
color: var(--eoshin-text-muted, #9b9b9b);
}
/* ── 검색 모달 프로모션 배너 — Figma PromotionBannerSection(5236:30507) ── */
.search-promotion-banner {
width: calc(100% - 32px);
height: 60px;
margin: 0 16px 20px;
padding: 0 0 0 20px;
border: none;
border-radius: 8px;
background: #f0f4fe;
display: flex;
align-items: center;
overflow: hidden;
cursor: pointer;
text-align: left;
text-decoration: none;
}
.search-promotion-banner__text {
display: flex;
flex-direction: column;
flex-shrink: 0;
}
.search-promotion-banner__title {
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #1a1a1a;
}
.search-promotion-banner__sub {
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #404040;
}
.search-promotion-banner__img {
width: 188px;
height: 100%;
margin-left: auto;
object-fit: cover;
}
/* ── GNB íƒ (í—¤ë” í•˜ë‹¨ ì¹´í…Œê³ ë¦¬) ── */
/* Figma 노드 5369:34978 — íƒ ì‚¬ì´ 8px ê°, 좌우 16px 여백, í—¤ë” ë°”ë¡œ 아래 sticky ê³ ì • */
.nav {
height: 48px;
background: #fff;
border-bottom: 1px solid #e6e6e6;
overflow-x: auto;
display: flex;
align-items: center;
flex-shrink: 0;
scrollbar-width: none;
gap: 8px;
padding: 0 16px;
position: sticky;
top: var(--header-height);
z-index: 5;
}
.nav::-webkit-scrollbar {
display: none;
}
.nav__link {
display: inline-flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 12px 8px 0;
height: 48px;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
color: #9b9b9b;
text-decoration: none;
white-space: nowrap;
flex-shrink: 0;
transition: color 0.15s;
position: relative;
}
.nav__link::after {
content: '';
display: block;
height: 2px;
width: 100%;
}
.nav__link.is-active {
font-weight: 600;
color: #1a1a1a;
}
/* ë² ì´ìФ 스킨(aurora.css)ì˜ .nav__link.is-active::afterê°€ 우측 ìƒë‹¨ 4px ì›í˜• ì 으로
ì •ì˜ë˜ì–´ 있어(border-radius:50%, top/right ì ˆëŒ€ 위치) background만으로는 밑줄로 바뀌지
ì•ŠìŒ â€” 위치/í¬ê¸°/ëª¨ì–‘ì„ ì „ë¶€ ìž¬ì •ì˜í•´ 하단 밑줄 형태로 ë®ì–´ì”€.
Figma CL-003 Indicator: stroke #202020 w2, í = ë¼ë²¨ í…스트 í(íƒ ì¢Œìš° 패딩 8px ì œì™¸) */
.nav__link.is-active::after {
position: absolute;
top: auto;
right: 8px;
left: 8px;
bottom: 0;
width: auto;
height: 2px;
border-radius: 0;
background: #202020;
}
/* ì—°ê²°í• íŽ˜ì´ì§€ê°€ ì•„ì§ í™•ì •ë˜ì§€ ì•Šì€ íƒ â€” 연회색으로 비활성 표시.
pointer-events:none으로 막으면 마우스 ì´ë²¤íЏ ìžì²´ê°€ ì´ ìš”ì†Œë¥¼ í†µê³¼í•´ë²„ë ¤ hoverí•´ë„
ë°‘ì— ê¹”ë¦° ìš”ì†Œì˜ ê¸°ë³¸ 화살표 커서만 ë³´ì´ê³ cursor:not-allowedê°€ 안 ë¨¹ì—ˆìŒ â€” í´ë¦
ì°¨ë‹¨ì€ Nav.tsxì˜ onClick(preventDefault)로 ì˜®ê¸°ê³ , 여기서는 커서만 담당한다 */
.nav__link--disabled {
color: #c4c4c4;
cursor: not-allowed;
}
/* ── 하단 íƒ ë°” ── */
/* ë² ì´ìФ 스킨(aurora.css)ì˜ .bottom-nav padding-top(~10px)ì´ ë‚¨ì•„ìžˆì–´ ì‹¤ì œ 높ì´ê°€
.bottom-nav__itemì˜ 70px보다 커지는 ë¬¸ì œê°€ 있어 paddingì„ 0으로 리셋.
position:fixed는 ë·°í¬íЏ 기준ì´ë¼ .page__content í(ëª¨ë°”ì¼ ìœ ë™í / PC --pc-content-width)ê³¼
따로 ë™ê¸°í™”해야 했는ë°, BottomNav는 ì´ë¯¸ .page__content.siteì˜ ìžì‹ì´ë¼
position:sticky로 바꾸면 부모 íì„ ê·¸ëŒ€ë¡œ ìƒì†í•´ì„œ íì´ í•ìƒ ì¼ì¹˜í•¨(ë³„ë„ width/left/right 불필요) */
.bottom-nav,
.page .bottom-nav {
position: sticky;
bottom: 0;
/* ë² ì´ìФ ìŠ¤í‚¨ì´ êµ¬ fixed ë°©ì‹ìš©ìœ¼ë¡œ 넣어둔 left/transform/width/max-width 하드코딩ì„
리셋 — sticky는 부모(.page__content.site) íì„ ê·¸ëŒ€ë¡œ ìƒì†í•´ì•¼ 함.
ë² ì´ìФ 스킨 ì„ íƒìž(.page .bottom-nav)ê°€ 특ì´ë„ê°€ ë” ë†’ì•„ì„œ ì´ê²ƒë„ ê°™ì´ ë§žì¶°ì•¼ ì´ê¹€ */
left: auto;
right: auto;
transform: none;
width: 100%;
max-width: none;
z-index: 5;
display: flex;
align-items: center;
padding: 0;
background: #fff;
/* Figma는 ë°”(사ê°í˜•)와 ì¿ í° ì›í˜• ë°°ì§€(ëŒì¶œë¶€)를 í•˜ë‚˜ì˜ ë„형으로 ë³´ê³
ê·¸ 실루엣 ì „ì²´ì— ê·¸ë¦¼ìž í•˜ë‚˜ë¥¼ 씌우는 ë°©ì‹(offset -4px, blur 8px, alpha 0.04).
filter: drop-shadow로 통째로 재현하면 ë 것 같지만, overflow로 튀어나온
ì›í˜• 배지가 í•„í„°ì˜ ë Œë” ìŠ¤ëƒ…ìƒ·ì—서 ë°” 박스 안쪽으로 ìž˜ë ¤ë‚˜ê°€ ì› ë¶€ë¶„ì—
그림ìžê°€ ì „í˜€ 안 ìƒê¸°ëŠ” ë¬¸ì œê°€ 있어(브ë¼ìš°ì € í•„í„°ì˜ ì•Œë ¤ì§„ ë™ìž‘) í¬ê¸° —
ëŒ€ì‹ ë°”ì™€ ì› ê°ê°ì— ê°™ì€ ìŠ¤íŽ™ì˜ box-shadow를 걸어 ì´ì–´ë¶™ì¸ 것처럼 ë³´ì´ê²Œ 함 */
box-shadow: 0px -4px 8px 0px rgba(0, 0, 0, 0.04);
padding-bottom: env(safe-area-inset-bottom, 0);
}
.bottom-nav__item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
gap: 4px;
padding: 8px 0 16px;
height: var(--bottom-nav-height);
text-decoration: none;
background: transparent;
border: none;
cursor: pointer;
color: inherit;
}
.bottom-nav__icon {
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
color: var(--eoshin-tab-inactive, #9b9b9b);
}
.bottom-nav__item.is-active .bottom-nav__icon {
color: #404040;
}
.bottom-nav__label {
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.0017em;
text-align: center;
color: var(--eoshin-tab-inactive, #9b9b9b);
}
.bottom-nav__item.is-active .bottom-nav__label {
color: #404040;
}
/* ì¿ í° FAB 버튼 */
.bottom-nav__fab {
position: relative;
width: 72px;
height: var(--bottom-nav-height);
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-end;
padding-bottom: 8px;
background: transparent;
border: none;
cursor: pointer;
text-decoration: none;
overflow: visible;
}
/* ì›í˜• 배지가 ë°” ìƒë‹¨ 경계 위로 12pxë§Œ 튀어나오는 êµ¬ì¡°ë¼ ê·¸ë¦¼ìžë¥¼ ì›ì— 그대로
걸면 ë°” 안쪽까지 ë²ˆì ¸ ë³´ìž„ — ê·¸ë¦¼ìž ì „ìš© ë ˆì´ì–´ë¥¼ 따로 ë‘ê³ ë°” 경계(y=0)
위쪽만 노출ë˜ê²Œ 넉넉히 í´ë¦¬í•‘. 컨테ì´ë„ˆ íë„ ì›(52px)보다 넓게 잡아
블러 번ì§ì´ 좌우로 잘리지 않게 함(ë°” 그림ìžì™€ ë™ì¼ 스펙으로 ì´ì–´ë¶™ì—¬ ë³´ì´ê²Œ) */
.bottom-nav__fab-shadow {
position: absolute;
top: -80px;
left: 0;
width: 72px;
height: 80px;
overflow: hidden;
pointer-events: none;
}
.bottom-nav__fab-shadow::after {
content: '';
position: absolute;
top: 68px;
left: 10px;
width: 52px;
height: 52px;
border-radius: 50%;
box-shadow: 0px -4px 8px 0px rgba(0, 0, 0, 0.04);
}
.bottom-nav__fab-circle {
position: absolute;
top: -12px;
left: 10px;
width: 52px;
height: 52px;
border-radius: 50%;
background: #fff;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
flex-shrink: 0;
}
/* Figma Selected=DiscountDeselected ì»´í¬ë„ŒíŠ¸ì˜ Labelë„ ë‹¤ë¥¸ íƒê³¼ ë™ì¼í•˜ê²Œ
비활성 시 회색(#9b9b9b)ìž„ — ì˜ˆì „ì—” "ì¿ í°ì€ í•ìƒ ì§„í•œ 색"으로 잘못 파악해서
경로 활성 여부와 무관하게 ê³ ì •í•´ë’€ë˜ ê²ƒì„ ë‹¤ë¥¸ íƒê³¼ ê°™ì€ ì¡°ê±´ë¶€ 색ìƒìœ¼ë¡œ ìˆ˜ì • */
.bottom-nav__fab-label {
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.0017em;
text-align: center;
color: var(--eoshin-tab-inactive, #9b9b9b);
position: absolute;
bottom: 4px;
left: 0;
right: 0;
}
.bottom-nav__fab.is-active .bottom-nav__fab-label {
color: #404040;
}
/* ── PC 공통 ë ˆì´ì•„웃 ë°°ê²½ — Figma 5236:41112 루트 í”„ë ˆìž„ fill ── */
/* ê·¸ë¼ë””언트가 좌측 패ë„ë¿ ì•„ë‹ˆë¼ ì½˜í…ì¸ ì¹´ë“œ(500px) 양옆 ì „ì²´(우측 여백 í¬í•¨)ì— ê¹”ë ¤ìžˆìœ¼ë¯€ë¡œ
bodyì— ì ìš© — ëª¨ë°”ì¼ íì—서는 콘í…ì¸ ê°€ í•ìƒ ì „ì²´ë¥¼ ë®ì–´ì„œ 안 ë³´ì´ë¯€ë¡œ ì•ˆì „í•¨.
body 높ì´ëŠ” 페ì´ì§€ 콘í…ì¸ ê¸¸ì´ë§Œí¼(수천px) 늘어나므로 background-attachment: fixed로
ê·¸ë¼ë””언트 í¬ê¸°ë¥¼ ë·°í¬íЏ 기준으로 ê³ ì •í•´ì•¼ Figma처럼 화면 어디서나 ê°™ì€ í†¤ìœ¼ë¡œ ë³´ìž„ */
/* body 배경만 있으면 ê·¸ ìžë¦¬ì—서 htmlì˜ ê¸°ë³¸ í° ë°°ê²½ì´ ìž ê¹ ë¹„ì¹˜ëŠ” 경우가 있어
htmlì—ë„ ë™ì¼í•œ ê·¸ë¼ë””언트를 깔아 ì–´ëŠ ìª½ì´ ë³´ì´ë“ í° ì¤„ ì—†ì´ ì´ì–´ì§€ê²Œ 함.
추가로 단색(--pc-layout-bg)ì„ í•¨ê»˜ ê¹ë‹¤ — background-attachment:fixed ê·¸ë¼ë””언트는
ë·°í¬íЏ 사ê°í˜•ì—ë§Œ ê·¸ë ¤ì ¸ì„œ, ë§¥ 오버스í¬ë¡¤(러버밴딩)처럼 문서 ë°– ì˜ì—ì´ ë“œëŸ¬ë‚˜ëŠ” 순간ì—는
ì¹ í•´ì§€ì§€ ì•Šì€ ìº”ë²„ìŠ¤ê°€ í°ìƒ‰ìœ¼ë¡œ ë³´ì¸ë‹¤. ìº”ë²„ìŠ¤ì— ì „íŒŒë˜ëŠ” ë‹¨ìƒ‰ì´ ìžˆìœ¼ë©´ ê·¸ 순간ì—ë„
ê°™ì€ ê³„ì—´ ìƒ‰ì´ ìœ ì§€ëœë‹¤ */
html {
background-color: var(--pc-layout-bg);
background-image: var(--pc-layout-gradient);
background-attachment: fixed;
}
body {
background: var(--pc-layout-gradient);
background-attachment: fixed;
}
/* ë§¥ 러버밴딩으로 문서 ë°–ì´ ë“œëŸ¬ë‚ ë•Œ ìƒ‰ì´ ì‚´ì§ ì–´ê¸‹ë‚˜ë˜ ë¬¸ì œ — 위 단색(--pc-layout-bg)ì€
ê·¸ë¼ë””ì–¸íŠ¸ì˜ ì •í™•í•œ 중간 톤(#e6edfe)ì¸ë°, 위로 당기면 드러나는 ê³³ì€ í™”ë©´ ìƒë‹¨, 즉
ê·¸ë¼ë””언트가 가장 ë°ì€ 쪽(#f0f4fe)ì´ë¼ rgb로 (10,7,0)ë§Œí¼ ì–´ë‘워 한 단계 ëŠê²¨ 보였다.
í‰ë©´ìƒ‰ 하나로 ê·¸ë¼ë””언트 ì–‘ ëì„ ë™ì‹œì— ë§žì¶œ 수는 없으므로(ìƒë‹¨ì— 맞추면 í•˜ë‹¨ì´ í‹€ì–´ì§)
드러나는 순간 ìžì²´ë¥¼ 없앤다. ë‹¨ìƒ‰ì€ ì´ ì†ì„±ì„ 모르는 브ë¼ìš°ì €ìš© í´ë°±ìœ¼ë¡œ 그대로 둔다.
PCì—서만 ë„는 ì´ìœ : 모바ì¼ì€ 당겨서 ìƒˆë¡œê³ ì¹¨Â·ë°”ìš´ìŠ¤ê°€ ì •ìƒ ë™ìž‘ì´ë¼ 건드리지 않는다.
overscroll-behavior는 ë·°í¬íЏ 스í¬ë¡¤ëŸ¬ë¥¼ 가리키는 htmlì— ì¤˜ì•¼ 효과가 있다(body는 무효).
주ì˜: noneì€ ë°”ìš´ìŠ¤ë§Œ ì—†ì• ëŠ” 게 ì•„ë‹ˆë¼ ìŠ¤í¬ë¡¤ ì²´ì´ë‹ë„ ëŠëŠ”ë‹¤. 현재 모달·바텀시트는
ìžì²´ 스í¬ë¡¤ 컨테ì´ë„ˆë¼ ë¬¸ì œë˜ì§€ 않지만, ë‚´ë¶€ 스í¬ë¡¤ ì˜ì— ëì—서 페ì´ì§€ë¡œ ì´ì–´ 스í¬ë¡¤ë˜ê¸¸
기대하는 UIê°€ ìƒê¸°ë©´ ì´ ê·œì¹™ë¶€í„° ì˜ì‹¬í• 것(ê·¸ 경우 containì€ ëŒ€ì•ˆì´ ëª» ëœë‹¤ — ì²´ì´ë‹ë§Œ
ë§‰ê³ ë°”ìš´ìŠ¤ëŠ” 남아서 색 ì–´ê¸‹ë‚¨ì´ ë‹¤ì‹œ ë³´ì¸ë‹¤).
바운스를 ì‚´ë ¤ì•¼ 한다면 단색 êµì²´ê°€ ì•„ë‹ˆë¼ ê·¸ë¼ë””언트를 문서 ì „ì²´ë¡œ 늘리는 ë°©ì‹
(background-attachment: scroll + background-size: 100% 100%)ì´ ì–‘ ëì„ ë§žì¶˜ë‹¤. 대ì‹
스í¬ë¡¤ì— ë”°ë¼ í†¤ì´ ë³€í•´ì„œ "화면 어디서나 ê°™ì€ í†¤"(Figma 5236:41112 루트 í”„ë ˆìž„ fill)ì´
깨지므로, 그건 ë””ìžì¸ ì˜ë„를 바꾸는 ê²°ì •ì´ë‹¤ */
@media (min-width: 1001px) {
html {
overscroll-behavior-y: none;
}
}
/* ── PC 좌측 패ë„(banner--left) — Figma 노드 5236:41112 ── */
/* 1001px ì´ìƒì—서만 ë² ì´ìФ ìŠ¤í‚¨ì´ display:flex로 노출시킴(ê·¸ ì´í•˜ì—서는 display:none) */
/* ë² ì´ìФ ìŠ¤í‚¨ì˜ .page .banner--left__tit(font-weight:bold), .page .banner--left img(width:100%)보다
ìš°ì„ í•˜ë„ë¡ ë™ì¼í•œ .page ì¡°ìƒ ìŠ¤ì½”í”„ë¡œ ì„ íƒìžë¥¼ 맞춤 */
.page .banner--left {
/* html/body와 ê°™ì€ ê·¸ë¼ë””언트를 ì“°ë˜ background-attachment까지 fixed로 맞춰야 í†¤ì´ ì´ì–´ì§„다.
기본값(scroll)ì´ë©´ ê·¸ë¼ë””언트가 배너 박스(580px × ë·°í¬íЏ) 기준으로 다시 ê³„ì‚°ë¼ ì£¼ë³€ê³¼
어긋난다 — 경계 x=220ì—서 234,240,254 → 233,239,254로 한 단계 ëŠê¸°ëŠ” ì´ìŒì„ ì´ ì‹¤ì œë¡œ
보였ìŒ. ë°°ê²½ì„ ì•„ì˜ˆ 지우는 ë°©ë²•ë„ ì´ìŒì„ ì€ ì—†ì• ì§€ë§Œ, 배너가 ê°€ë ¤ì£¼ë˜ ì•± 카드 그림ìž
(ë²¤ë” .page .site{box-shadow:0 0 50px rgba(0,0,0,.15)})ì˜ ì™¼ìª½ ì ˆë°˜ì´ ë“œëŸ¬ë‚œë‹¤ —
그림ìžëŠ” 오른쪽ì—ë§Œ ë³´ì´ëŠ” 현재 ëª¨ìŠµì„ ìœ ì§€í•´ì•¼ 하므로 ë°°ê²½ì„ ìœ ì§€í•œë‹¤.
※ 주ì˜: attachment:fixed는 ì¡°ìƒì— transform/filter/will-changeê°€ ìƒê¸°ë©´ ê·¸ 요소가 새
컨테ì´ë‹ 블ë¡ì´ ë˜ì–´ ë¬´ë ¥í™”ë˜ê³ , ì´ ì´ìŒì„ ì´ ì¡°ìš©ížˆ ëŒì•„온다 — ì´ ì˜ì—(.page/.page-inner/
.banner--left)ì— ì• ë‹ˆë©”ì´ì…˜Â·íŠ¸ëžœì§€ì…˜ì„ ì¶”ê°€í• ë•ŒëŠ” 경계 x=220 ìƒ‰ì´ ì´ì–´ì§€ëŠ”ì§€ 확ì¸í• 것.
스í¬ë¡¤í•´ë„ ë°°ê²½ì´ ë”°ë¼ ì›€ì§ì´ì§€ 않는 ê²ƒì€ ì˜ë„한 ë™ìž‘ì´ë‹¤(Figma처럼 화면 어디서나 ê°™ì€ í†¤) */
background: var(--pc-layout-gradient);
background-attachment: fixed;
/* .banner--left와 .site는 ê°™ì€ .page__content í´ëž˜ìŠ¤ë¥¼ ê³µìœ í•´ì„œ 위쪽ì˜
width:var(--pc-content-width) ê·œì¹™ì´ ë‘˜ ë‹¤ì— ì ìš©ë¨ â€” ì›ëž˜ëŠ” ë² ì´ìФ ìŠ¤í‚¨ì´ ë‘˜ 다
500px로 ê³ ì •í•´ì„œ 500+500=1000(page-inner í)ì´ ì •í™•ížˆ 맞았는ë°, .siteë§Œ 콘í…ì¸ íì—
ë§žì¶° 줄ì´ë©´ì„œ ë‘˜ì„ ë”í•´ë„ 1000ì´ ì•ˆ ì±„ì›Œì ¸ ê°€ìš´ë° ë¹ˆ í‹ˆì´ ìƒê¹€.
position:fixedë¼ flex:1ì€ íš¨ê³¼ê°€ 없으므로, page-inner(1000px)ì—서 .site íì„ ëº€
나머지를 명시ì 으로 채워서 ê° ì—†ì´ ë¶™ê²Œ 함.
.page__contentì˜ í•ìƒ ì ìš©ë˜ëŠ” 기본 규칙(max-width:500px)ì´ ì´ width ê°’ì„ 500으로
ê³„ì† ìž˜ë¼ë‚´ê³ 있어서 max-widthë„ ê°™ì´ í’€ì–´ì¤˜ì•¼ ì‹¤ì œë¡œ ë°˜ì˜ë¨ */
width: calc(1000px - var(--pc-content-width));
max-width: none;
min-width: 0;
}
.page .banner--left__tit {
font-size: 36px;
font-weight: 600;
line-height: 48px;
letter-spacing: -0.02em;
color: var(--eoshin-text-primary, #1a1a1a);
text-align: center;
white-space: normal;
}
.page .banner--left__logo {
width: auto;
height: 48px;
margin-top: 28px;
}
/* ── 푸터 ── */
/* 푸터 — Figma Footer/Base(5218:34495 FT-000). ì •ì±… ë§í¬(#fafafa ë°°ê²½)와
회사 ì •ë³´(위쪽 1px #e6e6e6 êµ¬ë¶„ì„ ) 사ì´ì— 16px 간격.
ë² ì´ìФ 스킨(aurora.css)ì´ .footer{padding:30px 20px 100px;border-top:1px
solid ...}, .footer__nav{margin:20px 0}, .footer__info{margin-bottom:20px}를
기본값으로 깔아놔서, paddingë§Œ ë®ì–´ì“°ê³ border/marginì€ ê·¸ëŒ€ë¡œ 남아있었ìŒ
— "ì´ìš©ì•½ê´€" ìœ„ìª½ì— ì˜ˆìƒ ëª»í•œ ê³µë°±ì´ ìƒê¸°ë˜ ì›ì¸. ì „ë¶€ 명시ì 으로 리셋 */
.footer {
background: #fafafa;
padding: 28px 16px 40px;
border-top: none;
}
.footer__info {
display: flex;
flex-direction: column;
gap: 16px;
margin: 0;
}
/* Figma CompanyPolicy(7298:51153)는 ì •ì±… ë§í¬ê°€ 1í–‰ì´ ì•„ë‹ˆë¼ 2í–‰(로그아웃+ì´ìš©ì•½ê´€ /
ê°œì¸ì •보취급ë°ë³´í˜¸ë°©ì¹¨+사업ìžì •보확ì¸)ì´ë¼ 가로 wrap ëŒ€ì‹ ì„¸ë¡œ 방향으로 í–‰ì„ ë‚˜ëˆˆë‹¤.
ë²¤ë” aurora.css .footer__nav{cursor:pointer}(ì›ëž˜ í–‰ ì „ì²´ê°€ í•˜ë‚˜ì˜ í† ê¸€ì´ì—ˆë˜
ë²¤ë” ì„¤ê³„ì˜ í”ì )ê°€ cursor는 ìƒì† ì†ì„±ì´ë¼ ì‹¤ì œ 버튼/ë§í¬ê°€ 없는 빈 공간(ê° í–‰ì˜
남는 ì˜ì—, gap 사ì´)까지 í¬ì¸í„° 커서로 ìƒˆì–´ë‚˜ì˜¤ê³ ìžˆì—ˆìŒ â€” 리셋해서 ì‹¤ì œ í´ë¦
가능한 .footer__link(버튼/앵커, ìžì²´ì 으로 cursor:pointer ì§€ì •)ì—서만 ë³´ì´ê²Œ 함 */
.footer__nav {
display: flex;
flex-direction: column;
gap: 4px;
margin: 0;
cursor: auto;
}
.footer__nav-row {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 4px;
}
.footer__nav-item {
display: flex;
align-items: center;
gap: 4px;
}
.footer__link {
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #9b9b9b;
background: none;
border: none;
cursor: pointer;
padding: 0;
text-decoration: none;
}
/* ë§í¬ ì‚¬ì´ êµ¬ë¶„ìž */
.footer__nav-sep {
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #9b9b9b;
}
.footer__about {
padding-top: 20px;
border-top: 1px solid #e6e6e6;
}
/* "쇼핑몰/회사 소개" 약관 콘í…ì¸ (Sanitized)를 그대로 ë Œë”ë§ â€” ê´€ë¦¬ìž ì½˜í…ì¸ ì—
ì´ë¯¸ span별 font-size/font-weight ì¸ë¼ì¸ 스타ì¼ì´ 있어 í°íŠ¸íŒ¨ë°€ë¦¬/줄바꿈
간격/색ìƒë§Œ ì§€ì • */
.footer__intro,
.footer__intro p {
font-family: Pretendard, sans-serif;
line-height: 18px;
letter-spacing: 0.02em;
color: #9b9b9b;
}
.footer__intro p {
margin: 0 0 12px;
}
.footer__intro p:last-child {
margin-bottom: 0;
}
/* 회사명/대표ìžëª…("주ì‹íšŒì‚¬ ì• ì“°ì§€ë§ˆ | 대표ì´ì‚¬ : ...")·"SGMA CORP"ì— ì“°ì¸ <b> —
기본 ìŠ¤í‚¨ì´ .footer__aboutì— font-weight:300ì„ ê¹”ì•„ë‘¬ì„œ, <b>ì˜ ë¸Œë¼ìš°ì € 기본값ì¸
font-weight:bolderê°€ 300 → 400으로만 계산ë¼(ìŠ¤íŽ™ìƒ 300ì€ "700으로 뛰는" êµ¬ê°„ì´ ì•„ë‹Œ
"400으로만 뛰는" êµ¬ê°„ì— ê±¸ì¹¨) 주변 í…스트와 ê±°ì˜ êµ¬ë¶„ì´ ì•ˆ ëìŒ.
Figma(BrandInfo/CopyRightì˜ SemiBold 오버ë¼ì´ë“œ)대로 600ì„ ëª…ì‹œ */
.footer__intro b {
font-weight: 600;
}
.footer__extra-logo {
margin-top: 8px;
}
/* ── PC ë ˆì´ì•„웃: 모달/딤 콘í…ì¸ ì˜ì—(500px) ì œí•œ ── */
/* ë·°í¬íŠ¸ê°€ 500px ì´ˆê³¼ì¼ ë•Œ portalì´ ì „ì²´ í™”ë©´ì´ ì•„ë‹Œ 콘í…ì¸ ì—´ 안ì—서만 노출ë˜ë„ë¡ */
@media (min-width: 501px) {
.portal {
left: 50%;
transform: translateX(-50%);
max-width: 500px;
}
}
/* ë² ì´ìФ ìŠ¤í‚¨ì˜ .title-modal--full 기본값(max-width:375px;min-width:375px)ì´ ì‹¤ì œ
기기 í(예: 390px ì´ìƒ)ê³¼ 무관하게 í•ìƒ 375로 ê³ ì •ë¼ì„œ, 그보다 ë„“ì€ í™”ë©´ì—서는
검색 모달 등 ì „ì²´í™”ë©´ 모달 ì–‘ì˜†ì— ë¹ˆ ì—¬ë°±ì´ ë‚¨ì•„ í™”ë©´ì„ ë‹¤ 못 채우는 ë¬¸ì œê°€ 있었ìŒ.
모바ì¼/태블릿ì—서는 ë·°í¬íЏ ì „ì²´ë¥¼ ì±„ìš°ê³ , PC(1001px~)는 아래 ë³„ë„ ê·œì¹™ì´ ë‹¤ì‹œ ë®ì–´ì”€ */
.title-modal--full {
width: 100%;
max-width: 100%;
min-width: 0;
}
/* .title-modal--fullì˜ ë¶€ëª¨ì¸ .modal ìžì²´ê°€ ë²¤ë” ê¸°ë³¸ê°’(position:absolute;top:50%;
left:50%;transform:translate(-50%,-50%);height:100%;max-height:861px)ì„ ê°–ê³ ìžˆì–´ì„œ,
ë·°í¬íЏ 높ì´ê°€ 861px보다 ìž‘ì€ ê¸°ê¸°ì—서는 ì‹¤ì œ ë·°í¬íŠ¸ë³´ë‹¤ 몇 px 작게 ë Œë”ë§ë˜ê³ , ê·¸ 중앙
ì •ë ¬ 계산 ì˜¤ì°¨ë§Œí¼ ìœ„/ì•„ëž˜ì— ë”¤(ì–´ë‘ìš´ ë°°ê²½)ì´ ì–‡ì€ ì¤„ì²˜ëŸ¼ 드러나 ë³´ì˜€ìŒ â€” ì „ì²´í™”ë©´
모달(.title-modal--full)ì„ ê°ì‹¼ .modalë§Œ .portalê³¼ ë™ì¼í•˜ê²Œ ë·°í¬íЏ ì „ì²´ë¥¼ 꽉 채우ë„ë¡
ê³ ì • 위치로 리셋 */
.modal:has(> .title-modal--full) {
position: fixed;
top: 0;
left: 0;
transform: none;
width: 100%;
height: 100%;
max-height: none;
}
/* .modalì€ position:fixedë¼ ë·°í¬íЏ 기준으로 배치ë˜ëŠ”ë°, .portalì´ transformì„ ê°€ì§„
501~1000px 구간ì—서만 우연히 .portalì„ containing block으로 삼아 ì¢ì•„ì§€ê³ , transformì´
없어지는 1001px~ 구간ì—서는 다시 ë·°í¬íЏ ì „ì²´ í으로 튀어나옴 — .portalê³¼ ì™„ì „ížˆ ë™ì¼í•œ
í ê³„ì‚°ì„ ëª…ì‹œì 으로 ë³µì œí•´ì„œ ëª¨ë“ êµ¬ê°„ì—서 콘í…ì¸ ì—´ íë§Œ 차지하게 함 */
@media (min-width: 501px) {
.modal:has(> .title-modal--full) {
left: 50%;
transform: translateX(-50%);
max-width: 500px;
}
}
@media (min-width: 1001px) {
.modal:has(> .title-modal--full) {
left: auto;
right: calc((100vw - 1000px) / 2);
transform: none;
max-width: var(--pc-content-width);
}
}
/* ë²¤ë” .modal 기본값엔 widthê°€ 없다 — 화면마다 .config-modal.modal{width:450px} ì‹ìœ¼ë¡œ
ì „ìš© 모디파ì´ì–´ í´ëž˜ìŠ¤ë¥¼ 붙여야만 íì´ ìƒê¸°ëŠ” 구조ì¸ë°, TitleModalì„ className ì—†ì´
그냥 ì“°ë©´(예: 장바구니/주문서 "배송비 ìƒì„¸ë³´ê¸°") ì–´ë–¤ í ê·œì¹™ë„ ì•ˆ ê±¸ë ¤ì„œ 콘í…ì¸ í¬ê¸°ë§Œí¼
쪼그ë¼ë“¤ì–´ 트리거 버튼 ìœ„ì¹˜ì— ìž‘ì€ ìƒìžë¡œ ê²¹ì³ ë³´ì˜€ìŒ(주문서 페ì´ì§€ë§Œì˜ ë¬¸ì œê°€ 아니ë¼
장바구니ì—ì„œë„ ë™ì¼í•˜ê²Œ 재현ë˜ëŠ” 기존 버그). 모디파ì´ì–´ í´ëž˜ìŠ¤ê°€ 없는 TitleModalì—ë„
기본 íì„ ì¤€ë‹¤ */
.modal:has(> .title-modal:not(.title-modal--full)) {
width: calc(100% - 48px);
max-width: 400px;
}
/* <FullModal>(isFull=true → .title-modal--full)ì„ ì“°ëŠ” 앱 ì „ì²´ ì „ì²´í™”ë©´ 모달 í—¤ë” â€”
약관/문ì˜ë‚´ì—/ì¿ í°/비밀번호찾기/FAQ/공지사í•/주소찾기 등 25ê°œ ì´ìƒ í™”ë©´ì´ ì „ë¶€ ì´ í´ëž˜ìŠ¤ë¥¼
ê³µìœ í•œë‹¤. onClose는 ì‹¤ì œë¡œëŠ” ížˆìŠ¤í† ë¦¬ ì´ë™ ì—†ì´ ê·¸ëƒ¥ state를 꺼서 ëª¨ë‹¬ì„ ë‹«ëŠ” 것ë¿ì´ë¼(ê°
í˜¸ì¶œë¶€ì˜ onClose={() => setIsOpen(false)} 패턴), ë²¤ë” ê¸°ë³¸ TitleModal í—¤ë”(타ì´í‹€ ê°€ìš´ë° +
우측 X닫기) ëŒ€ì‹ ì–´ì‹ ìƒµ 서브페ì´ì§€ í—¤ë”(Bar/TopBar: 좌측 뒤로가기 ì‰ë¸Œë¡ + 좌측 ì •ë ¬ 타ì´í‹€,
.header--sub와 ë™ì¼ 스펙)로 ë³´ì´ë„ë¡ X ì•„ì´ì½˜ì„ ì‰ë¸Œë¡ 으로 ë°”ê¾¸ê³ ì¢Œì¸¡ìœ¼ë¡œ 옮김 */
.title-modal--full .title-modal__header {
justify-content: flex-start;
height: 56px;
padding: 0 16px;
border-bottom: 1px solid #e6e6e6;
}
.title-modal--full .title-modal__close-btn {
position: static;
order: -1;
flex-shrink: 0;
}
.title-modal--full .title-modal__close-btn .ico--x-black {
width: 24px;
height: 24px;
background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 24%27 fill=%27none%27%3E%3Cpath d=%27M15 18L9 12L15 6%27 stroke=%27%231A1A1A%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/svg%3E");
background-position: center;
background-size: contain;
}
/* Figma Bar/TopBarì˜ PageTitleì€ 20px/600/line-height 26pxì¸ë°, ë²¤ë” ê¸°ë³¸ê°’(18px)ì´
그대로 남아있어서 ëª¨ë“ í™”ë©´ì—서 타ì´í‹€ì´ ì‹¤ì œë³´ë‹¤ 작게 ë‚˜ì˜¤ê³ ìžˆì—ˆìŒ */
.title-modal--full .title-modal__title {
justify-content: flex-start;
overflow: hidden;
margin-left: 12px;
font-family: Pretendard, sans-serif;
font-size: 20px;
font-weight: 600;
line-height: 26px;
color: #1a1a1a;
white-space: nowrap;
text-overflow: ellipsis;
}
/* 1001px ì´ìƒì—서는 ë² ì´ìФ ìŠ¤í‚¨ì´ .site(ì‹¤ì œ 콘í…ì¸ )를 좌측 배너 ì˜ì—(banner--left) 옆
1000px ë°•ìŠ¤ì˜ ìš°ì¸¡ì— ë¶™ì—¬ì„œ(margin-left: auto) ë·°í¬íЏ ì •ì¤‘ì•™ì´ ì•„ë‹Œ ê³³ì— ë Œë”ë§í•œë‹¤.
위 규칙(ë·°í¬íЏ ì •ì¤‘ì•™ 기준)ì„ ê·¸ëŒ€ë¡œ ë‘ë©´ ëª¨ë‹¬ì´ ì‹¤ì œ 콘í…ì¸ ì™€ 어긋난 ìœ„ì¹˜ì— ë– ì„œ
"ì¤‘ì•™ì— ì´ìƒí•˜ê²Œ 뜬다"는 ë¬¸ì œê°€ ìƒê¸°ë¯€ë¡œ, .site와 ë™ì¼í•˜ê²Œ 우측 ì •ë ¬ë¡œ 맞춘다 */
@media (min-width: 1001px) {
.portal {
left: auto;
right: calc((100vw - 1000px) / 2);
transform: none;
/* ë² ì´ìФ ìŠ¤í‚¨ì˜ 501px 규칙(max-width:500px)ì„ ë®ì–´ì¨ì„œ .page__content와 íì„ ë§žì¶¤ —
ê³ ì •ê°’ì´ ì•„ë‹ˆë¼ --pc-content-width를 그대로 참조해 í•ìƒ ë ˆì´ì•„웃 íì„ ë”°ë¼ê°€ê²Œ 함 */
max-width: var(--pc-content-width);
}
/* .portal ìžì²´ëŠ” 위ì—서 ê³ ì³¤ì§€ë§Œ, ê·¸ ì•ˆì˜ ì‹¤ì œ 모달 콘í…ì¸ ë°•ìŠ¤(.title-modal--full,
검색 모달 등ì—서 씀)ê°€ 별ë„로 min/max-width:500px를 ê°–ê³ ìžˆì–´ .portal보다 ë” ë„“ê²Œ
튀어나와 ìžˆì—ˆìŒ â€” ê°™ì´ --pc-content-width로 맞춤 */
.title-modal--full {
max-width: var(--pc-content-width);
min-width: var(--pc-content-width);
}
/* ë² ì´ìФ ìŠ¤í‚¨ì€ PC(1001px~)ì—서 콘í…ì¸ íì„ 500px(min-width:375px)로 ê³ ì •í•˜ëŠ”ë°,
Figma ëª¨ë°”ì¼ í”„ë ˆìž„ 기준으로 만들어진 ì´ ìŠ¤í‚¨ì€ PCì—ì„œë„ --pc-content-width로 맞춰야 함.
min-widthê°€ width보다 ìš°ì„ ì ìš©ë˜ë¯€ë¡œ ê°™ì´ ë‚®ì¶°ì•¼ ì‹¤ì œë¡œ ì ìš©ë¨ */
.page__content {
width: var(--pc-content-width);
min-width: var(--pc-content-width);
/* ë² ì´ìФ ìŠ¤í‚¨ì˜ í•ìƒ ì ìš©ë˜ëŠ” 기본 규칙(max-width:500px)ì´ --pc-content-widthê°€ 500ì„
넘는 값으로 바뀔 경우 조용히 다시 잘ë¼ë‚¼ 수 있어 미리 ë°©ì–´ */
max-width: none;
}
/* 아래는 ë² ì´ìФ ìŠ¤í‚¨ì— í 500px(ë˜ëŠ” 375px)ê°€ í•˜ë“œì½”ë”©ëœ ë‚˜ë¨¸ì§€ fixed 요소들 —
.portalê³¼ ê°™ì€ ì´ìœ 로 콘í…ì¸ íê³¼ 어긋나 있어 한 ë²ˆì— ì „ë¶€ ì •ë¦¬í•¨ */
/* 오프캔버스 메뉴 딤 ë°°ê²½ — 현재 UIì—는 여는 ë²„íŠ¼ì´ ì—†ì–´ ë„달 불가능하지만 ë°©ì–´ì 으로 맞춤 */
.offcanvas__dim {
max-width: var(--pc-content-width);
}
/* 본ì¸ì¸ì¦(성ì¸/실명) iframe 모달 */
.identification-verification-modal.modal {
width: var(--pc-content-width);
}
}
/* ── 하단 ê³ ì • ë°” — Purchase ì»´í¬ë„ŒíŠ¸ê°€ React Portal로 Layoutì˜ #bottom-bar-portal
(Footer ë’¤, .bottom-nav ì•žì˜ í˜•ì œ 위치)ì— ë Œë”ë§ë˜ë¯€ë¡œ, .bottom-nav와 ë™ì¼í•˜ê²Œ
sticky로 .page__content.site íì„ ê·¸ëŒ€ë¡œ ìƒì†í•˜ë©´ì„œ 페ì´ì§€ ë(Footer í¬í•¨)까지
ë¶™ì–´ìžˆì„ ìˆ˜ 있ìŒ. <main> ì•ˆì— ì§ì ‘ ë‘ë©´ <main> 경계(Footer 시작 ì§€ì )ì—서 í’€ë ¤ë²„ë ¤
Footer를 ë®ì§€ ëª»í–ˆë˜ ë¬¸ì œê°€ Portal로 í•´ê²°ë¨ â”€â”€ */
.product-detail.purchase {
position: sticky;
max-width: none;
width: 100%;
/* ë² ì´ìФ 스킨 기본값(사방 10px ë™ì¼)ì´ Figma Button/CTAArea(5236:30980, 좌우16/ìƒí•˜12,
ì „ì²´ ë†’ì´ 68px)와 ë‹¬ë¼ ì „ì²´ ë°” 높ì´ê°€ ì‚´ì§ ë‚®ì•˜ìŒ(64px) — Figma 패딩 값으로 맞춤 */
padding: 12px 16px;
}
.order-sheet-app-card {
position: sticky;
max-width: none;
width: 100%;
}
/* .cart__fixed-order-btn ê´€ë ¨ 스타ì¼ì€ pages/Cart/ui/FixedOrderBtn/FixedOrderBtn.css로 ì´ì „ë¨ */
/* ìƒí’ˆìƒì„¸ 브랜드명/ìƒí’ˆëª… + ê³µìœ ë²„íŠ¼ — Figma InfoArea/HeadArea(5236:30950) */
.product-summary__head {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 8px;
}
.product-summary__name-area {
flex: 1;
min-width: 0;
}
.product-summary__share-btn {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
padding: 0;
margin-top: 2px;
background: none;
border: none;
}
/* ── 확ì¸/알림 모달(SDK Confirm/Alert) — Figma 공통 ë ˆì´ì•„웃 > í™•ì¸ ëª¨ë‹¬(CL-008) ──
ë²¤ë” ê¸°ë³¸ê°’(카드 최소 350x250px, 딤 ê²€ì • 80%, í…Œë‘리로 나뉜 무채색 버튼)ì´
Figma 스펙(í° ì¹´ë“œ 296px+radius12, 딤 ê²€ì • 25%, radius8 파란/연파랑 알약 버튼)ê³¼
ì „í˜€ 달ë¼ì„œ 다시 그림. 주소 검색 등 다른 커스텀 모달(.modal)ì€ ê·¸ëŒ€ë¡œ ë‘기 위해
alert/confirm 박스를 ë‹´ì€ .modalì—ë§Œ :has()로 스코프 */
/* 모달(Alert/Confirm/CustomModal 등 Portal 기반 ì „ë¶€)ì´ ë°”í…€ì‹œíŠ¸ë³´ë‹¤ í•ìƒ
ìœ„ì— ì˜¤ë„ë¡ z-index 명시 — 바텀시트(.bottom-sheet__dim/.bottom-sheet)는
ê°ê° 30/31ì¸ë°, ëª¨ë‹¬ì„ ê°ì‹¸ëŠ” .portal ìžì²´ê°€ ë²¤ë” ê¸°ë³¸ê°’ìœ¼ë¡œ z-index:7ë°–ì—
안 ë¼ì„œ(position:fixedë¼ ìžì²´ 스태킹 컨í…스트를 만듦) ê·¸ ì•ˆì˜ .dim/.modalì—
아무리 ë†’ì€ z-index를 ì¤˜ë„ ë°”í…€ì‹œíŠ¸ë³´ë‹¤ í•ìƒ ë’¤ë¡œ ê¹”ë ¸ìŒ â€” .portal부터 ì˜¬ë ¤ì•¼ 함 */
.portal {
z-index: 200;
}
.portal .dim {
background-color: rgba(0, 0, 0, 0.25);
}
.modal {
z-index: 201;
}
.modal:has(> .modal__box--alert),
.modal:has(> .modal__box--confirm) {
position: fixed;
top: 50%;
left: 20px;
right: 20px;
bottom: auto;
width: auto;
height: auto;
max-height: none;
/* ë²¤ë” ê¸°ë³¸ê°’(.modal{background-color:#fff})ì´ ìžì‹(.modal__box--*)ê³¼ ì •í™•ížˆ
ê°™ì€ í¬ê¸°ë¡œ ê²¹ì³ì ¸ì„œ, ìžì‹ì˜ radius 12px로 깎여나간 모서리 ìžë¦¬ë¥¼ 부모ì˜
ê°ì§„ í° ë°°ê²½ì´ ê·¸ëŒ€ë¡œ ì±„ì›Œë²„ë ¤ ë¼ìš´ë“œê°€ 안 ë³´ì´ë˜ ë¬¸ì œ — 부모는 투명하게 */
background-color: transparent;
transform: translateY(-50%);
}
@media (min-width: 501px) {
.modal:has(> .modal__box--alert),
.modal:has(> .modal__box--confirm) {
left: 50%;
right: auto;
width: calc(500px - 40px);
transform: translate(-50%, -50%);
}
}
@media (min-width: 1001px) {
.modal:has(> .modal__box--alert),
.modal:has(> .modal__box--confirm) {
left: auto;
right: calc((100vw - 1000px) / 2 + 20px);
width: calc(var(--pc-content-width) - 40px);
transform: translateY(-50%);
}
}
.modal__box--alert,
.modal__box--confirm {
width: 100%;
min-width: 0;
min-height: 0;
max-width: none;
/* Figma CL-008 Modal/Variation — 카드 패딩 24/16(좌우 16) */
padding: 24px 16px;
border-radius: 12px;
background-color: #ffffff;
box-sizing: border-box;
}
.modal__content {
min-height: 0;
padding: 0;
/* Figma CL-008 카드 auto-layout gap 28 (콘í…ì¸ -버튼 간격) */
margin-bottom: 28px;
}
.modal__content img {
width: 48px;
height: 48px;
margin: 0 auto 12px;
}
.modal__text {
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #1a1a1a;
text-align: center;
}
/* OR-006 êµ¬ë§¤í™•ì • 확ì¸ëª¨ë‹¬ì²˜ëŸ¼ ì œëª© 아래 ë³´ì¡° ì„¤ëª…ì´ í•„ìš”í•œ confirmì—서 message를
<>ì œëª©<span className="modal__subtext">보조설명</span></> 형태로 넘길 때 쓰는 ë³´ì¡° í…스트 */
.modal__subtext {
display: block;
margin-top: 4px;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #404040;
}
.modal__btns {
justify-content: center;
gap: 8px;
padding: 0;
border-top: none;
}
.modal__btns .btn {
flex: 1;
height: 40px;
padding: 0;
border: none;
border-radius: 8px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
letter-spacing: 0.02em;
background-color: #4a69ea;
color: #ffffff;
}
/* Figma "기본배송지는 ì‚ì œí• ìˆ˜ 없습니다" 등 ë‹¨ì¼ ë²„íŠ¼ alert(5319:28175 Button/Buttons)
ì‹¤ì¸¡ê°’ì€ w116 — ìž„ì˜ë¡œ ìž¡ì•„ë’€ë˜ 128px보다 12px ìž‘ìŒ.
ë²¤ë” ê¸°ë³¸ê°’ .btn{width:100%}ê°€ 남아있으면 flex-basis:autoê°€ ê·¸ width를 그대로 ê°€ì ¸ê°€
ë²„íŠ¼ì´ ê½‰ ì°¨ ë³´ì´ë¯€ë¡œ(flex-basis:auto는 width ì†ì„±ì´ 있으면 content í¬ê¸° ëŒ€ì‹ ê·¸ ê°’ì„ ì”€)
widthë„ ëª…ì‹œì 으로 리셋해야 함 */
.modal__btns .btn:only-child {
flex: 0 1 auto;
width: auto;
min-width: 116px;
padding: 0 24px;
}
.modal__btns .btn:nth-of-type(n + 2) {
border-left: none;
}
/* Confirmì˜ ì·¨ì†Œ 버튼(첫 번째)ë§Œ 연한 파랑 ë°°ê²½ + 파란 글씨로 구분 */
.modal__box--confirm .modal__btns .btn:first-child {
background-color: #f0f4fe;
color: #3c56d6;
}
/* ── 파괴ì (위험) confirm 모달 공용 패턴 — Figma MY-015/OR-015/리뷰 ì‚ì œ/회ì›íƒˆí‡´ 계열 ──
ë²¤ë” openConfirmì€ ëª¨ë‹¬ë§ˆë‹¤ 다른 í´ëž˜ìŠ¤ë¥¼ 줄 수 없어(í•ìƒ .modal__box--confirm ê³ ì •),
message JSX ì•ˆì— í‘œì‹ í´ëž˜ìФ `modal-danger-marker`를 가진 요소를 넣으면 :has()ê°€ ê·¸
모달만 빨간 톤으로 ì „í™˜í•œë‹¤. 사용법:
openConfirm({
iconPath: warningIcon, // 48px ê²½ê³ ì¼ëŸ¬ìŠ¤íŠ¸(ì„ íƒ)
message: (
<>
리뷰를 ì‚ì œí• ê¹Œìš”?
<span className="modal__subtext modal-danger-marker">ì‚ì œí•œ 리뷰는 ë³µêµ¬í• ìˆ˜ 없어요</span>
</>
),
cancelLabel: '취소',
confirmLabel: 'ì‚ì œí•˜ê¸°',
...
});
ë³´ì¡°ì„¤ëª…ì´ ì—†ìœ¼ë©´ <i className="modal-danger-marker" /> ë§Œ ë„£ì–´ë„ ëœë‹¤.
취소(첫 버튼): í° ë°°ê²½ + #FF9698 ë³´ë” + #D40105 ê¸€ìž / í™•ì •(둘째 버튼): #F80409 ë°°ê²½ + í° ê¸€ìž.
member-modification-exit-confirm__marker는 ì´ íŒ¨í„´ì˜ ì›ì¡°(MY-015, MemberModificationForm.tsx)ê°€
ì“°ë˜ í‘œì‹ â€” 공용화하면서 ê·¸ 화면 CSSì˜ ì¤‘ë³µ ê·œì¹™ì€ ì œê±°í•˜ê³ ì—¬ê¸°ì„œ 함께 매ì¹í•œë‹¤ */
.modal__box--confirm:has(.modal-danger-marker, .member-modification-exit-confirm__marker)
.modal__btns
.btn:first-child {
background-color: #ffffff;
border: 1px solid #ff9698;
color: #d40105;
}
.modal__box--confirm:has(.modal-danger-marker, .member-modification-exit-confirm__marker)
.modal__btns
.btn:nth-of-type(n + 2) {
background-color: #f80409;
color: #ffffff;
}
/* ── ë©”ì¸ íŒì—…(CL-009, ë²¤ë” DesignPopup) — Figma 5849:28312 공통 íŒì—…ì°½ ──
ë²¤ë” ê¸°ë³¸ê°’(회색 1px í…Œë‘리 ê°ì§„ 카드 + 파란회색 닫기 버튼)ì„ Figma 스펙으로 êµì²´:
í° ì¹´ë“œ radius 12, ìƒë‹¨ ì´ë¯¸ì§€ëŠ” ìƒë‹¨ë§Œ ë¼ìš´ë“œ, 하단 50px 버튼행
"다시 ë³´ì§€ 않기 | 닫기"(13px/400/#404040) + 세로 êµ¬ë¶„ì„ #E6E6E6 */
.design-popup {
border: none;
border-radius: 12px;
overflow: hidden;
background-color: #ffffff;
}
/* 벤ë”ê°€ 콘í…ì¸ ë°•ìŠ¤ì— ë˜ í•œ ê²¹ 회색 í…Œë‘리 + 10px íŒ¨ë”©ì„ ê·¸ë¦¼ — ì´ë¯¸ì§€ê°€ ì¹´ë“œì— ê½‰ 차게 ì œê±°.
íŒ¨ë”©ì€ ë²¤ë”ê°€ `.editor .design-popup__content`(í´ëž˜ìФ 2ê°œ)로 걸어둬서 ë‹¨ì¼ í´ëž˜ìФ ì„ íƒìžë¡œëŠ”
밀린다 — 아래ì—서 ê°™ì€ êµ¬ì¡°ë¡œ 다시 ëˆë‹¤ */
.design-popup__content {
border: none;
padding: 0;
border-radius: 12px 12px 0 0;
}
/* ë²¤ë” `.editor .design-popup__content{padding:10px}` ìƒì‡„. box-sizingì´ content-boxë¼ ì´
íŒ¨ë”©ì´ ì–´ë“œë¯¼ íŒì—… í¬ê¸° ì„¤ì •(detailInfo.screenWidth/Height) ìœ„ì— ì¢Œìš°Â·ìƒí•˜ 20px씩 얹혀
ì‹¤ì œ 박스가 ì„¤ì •ê°’ë³´ë‹¤ 커진다(360×200 ì„¤ì • → 380×220 ë Œë”) — 어드민 ê°’ì´ ê·¸ëŒ€ë¡œ 나오게 ì œê±° */
.editor .design-popup__content {
padding: 0;
}
.design-popup__btns {
border: none;
height: 50px;
background-color: #ffffff;
}
.design-popup__btns button {
height: 50px;
padding: 0 4px;
background: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
color: #404040;
}
.design-popup__btns button + button {
border-left: 1px solid #e6e6e6;
}
/* 벤ë”ê°€ !important로 파란회색 ë°°ê²½ + í° ê¸€ì”¨ë¥¼ ê°•ì œ — ê°™ì€ ê°•ë„로 ë˜ëŒë¦¼ */
.design-popup__btn--close {
background: #ffffff !important;
color: #404040;
}
/* ── 어드민 íŒì—…ì„ í•˜ë‹¨ 바텀시트로 ê³ ì • ──
어드민 íŒì—… ê´€ë¦¬ì˜ ì¢Œí‘œ(detailInfo.screenLeftPosition/TopPosition)·í¬ê¸° ì„¤ì •ì€ í™”ë©´ ì–´ë””ì—나
ë– ìžˆëŠ” 플로팅 카드를 ì „ì œë¡œ 하는ë°, ì–´ì‹ ìƒµì€ í•˜ë‹¨ ê³ ì • 시트로 노출하기로 ì •í–ˆë‹¤(ì‚¬ìš©ìž ìš”ì²).
좌표·í¬ê¸°ëŠ” 벤ë”ê°€ ì¸ë¼ì¸ style로 박아서 !important로만 ë®ì„ 수 있다 — 아래 ì¸ë¼ì¸ ìƒì‡„ê°€
ê·¸ ìš©ë„다. 어드민ì—서 좌표/í¬ê¸°ë¥¼ ë°”ê¿”ë„ ì´ì œ 시트 위치·íì—는 ì˜í–¥ì´ 없다(높ì´ëŠ” 콘í…ì¸ ì—
ë§žì¶° ëŠ˜ì–´ë‚˜ê³ í™”ë©´ì˜ 80%ì—서 멈춘 ë’¤ ë‚´ë¶€ 스í¬ë¡¤) */
.design-popup {
position: fixed !important;
top: auto !important;
bottom: 0 !important;
left: 0 !important;
width: 100%;
max-height: 80vh;
display: flex;
flex-direction: column;
/* 시트ë¼ì„œ 위쪽만 ë¼ìš´ë“œ + BottomNav(z-index 5)·ìƒë‹¨ í—¤ë”(5)보다 위 */
border-radius: 16px 16px 0 0;
z-index: 10;
box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.12);
}
/* 벤ë”ê°€ ì¸ë¼ì¸ìœ¼ë¡œ 넣는 어드민 í¬ê¸°(width/height)를 시트 í·ìžë™ 높ì´ë¡œ ë˜ëŒë¦°ë‹¤ */
.design-popup .design-popup__content {
width: 100% !important;
height: auto !important;
max-height: calc(80vh - 50px); /* 50px = 하단 버튼행 */
overflow-y: auto;
border-radius: 16px 16px 0 0;
}
/* ì–´ë“œë¯¼ì´ ë„£ì€ ì´ë¯¸ì§€ëŠ” 시트 íì— ë§žì¶˜ë‹¤(ì›ë³¸ 3240px ê°™ì€ í° ì´ë¯¸ì§€ë„ 잘리지 않게) */
.design-popup .design-popup__content img {
display: block;
width: 100%;
height: auto;
}
/* ── ì´ë¯¸ì§€ 위아래로 ìƒê¸°ëŠ” 빈 여백 ì œê±°(2026-08-31 ìš”ì²) ──
어드민 ì—디터가 ì´ë¯¸ì§€ë¥¼ 문단으로 ê°ì‹¸ê³ ë’¤ì— ë¹ˆ ì¤„ë°”ê¿ˆì„ í•˜ë‚˜ ë¶™ì¸ë‹¤:
`<p><a href="…"><img …></a><br></p>`
그래서 íŒì—… í¬ê¸° ì„¤ì •ê³¼ 무관하게 ①문단 기본 margin(위아래 14px씩)ê³¼ â‘¡ 빈 <br> 한 줄(16px)
ë§Œí¼ í° ë ê°€ ìƒê²¼ë‹¤(실측: 콘í…ì¸ 275px 중 ì´ë¯¸ì§€ 233px, 나머지 42pxì´ ì—¬ë°±).
문단 ì—¬ë°±ì„ ì—†ì• ê³ , **맨 ëì— ë¶™ì€** 줄바꿈만 지운다 — í…스트 íŒì—…ì—서 ì¤‘ê°„ì— ì¼ë¶€ëŸ¬ ë„£ì€
ì¤„ë°”ê¿ˆì€ ì‚´ë ¤ì•¼ 하므로 :last-child로 í•œì •í•œë‹¤. */
.design-popup .design-popup__content p {
margin: 0;
}
.design-popup .design-popup__content br:last-child {
display: none;
}
/* ── 멀티(MULTI) íŒì—… 슬ë¼ì´ë”(2026-09-22 개편) ──
ë²¤ë” Slider+ì¸ë„¤ì¼ 그리드 ëŒ€ì‹ ìƒë‹¨ 배너(EoshinMainBanner)와 ê°™ì€ ì¡°í•©(@x-plat Swiper +
BannerDot). 시트가 ì „íì´ë¼ 어드민 í¬ê¸°(slideMaxWidth/Height ì¸ë¼ì¸)는 ë¬´ì‹œí•˜ê³ í 100%,
높ì´ëŠ” ì´ë¯¸ì§€ ë¹„ìœ¨ì„ ë”°ë¥¸ë‹¤ */
.design-popup .design-popup__slider {
position: relative;
width: 100% !important;
height: auto !important;
}
.design-popup__slide {
display: block;
}
.design-popup .design-popup__slide-image {
width: 100% !important;
height: auto !important;
}
/* ë¼ì´ë¸ŒëŸ¬ë¦¬ 기본 ë‹·ì€ ìˆ¨ê¸°ê³ BannerDot(.design-popup__dots)ë§Œ 쓴다 — ìƒë‹¨ 배너와 ë™ì¼ 처리 */
.design-popup__slider .lib-xplat-swiper__dots {
display: none;
}
/* ë‹· ì¸ë””ì¼€ì´í„° — ìƒë‹¨ 배너(.main-banner__dots)와 ê°™ì€ ë°©ì‹ìœ¼ë¡œ íŒì—… ì´ë¯¸ì§€ 하단 중앙 */
.design-popup__dots {
position: absolute;
bottom: 12px;
left: 50%;
transform: translateX(-50%);
z-index: 2;
display: flex;
align-items: center;
gap: 8px;
}
/* ── PCì—서 íŒì—…ì„ ëª° 콘í…ì¸ ì»¬ëŸ¼ 기준으로 배치 ──
어드민 íŒì—… 좌표(detailInfo.screenLeftPosition/screenTopPosition)는 브ë¼ìš°ì € ì°½ 기준으로
í•´ì„ë˜ëŠ”ë°, PC ë ˆì´ì•„ì›ƒì€ ëª° 콘í…ì¸ ê°€ 화면 중앙 컬럼(page-inner 1000px ì•ˆì˜ ì˜¤ë¥¸ìª½
--pc-content-width)ì—ë§Œ 있어서 left:0 ì„¤ì •ì´ í™”ë©´ 맨 왼쪽(좌측 배너 위)ì— ë– ë²„ë ¸ë‹¤.
컬럼 왼쪽 ëë§Œí¼ ë°€ì–´ì„œ 어드민 좌표를 "컬럼 기준"으로 ì½ê²Œ 한다 —
컬럼 왼쪽 = 50vw + (1000px / 2) - var(--pc-content-width) (1440pxì—서 800px, 실측 ì¼ì¹˜).
모바ì¼(1000px ì´í•˜)ì€ í™”ë©´ ì „ì²´ê°€ 콘í…ì¸ ë¼ ê·¸ëŒ€ë¡œ ì°½ ê¸°ì¤€ì„ ì“´ë‹¤ */
@media (min-width: 1001px) {
.design-popup {
/* ì‹œíŠ¸ë„ ëª° 컬럼 íÂ·ìœ„ì¹˜ì— ë§žì¶˜ë‹¤. transform ëŒ€ì‹ left/width를 ì§ì ‘ 잡는 ì´ìœ 는
하단 ê³ ì •(position:fixed)ì—서 transformì„ ì“°ë©´ 어드민 ì¸ë¼ì¸ left와 ê²¹ì³ ê³„ì‚°ì´ ê¼¬ì´ê¸° 때문 */
left: calc(50vw + 500px - var(--pc-content-width)) !important;
width: var(--pc-content-width);
transform: none;
}
}
/* ì–´ì‹ ìƒµ 공용 ë²¤ë” ì»´í¬ë„ŒíЏ 오버ë¼ì´ë“œ — íŠ¹ì • 화면 ì „ìš©ì´ ì•„ë‹ˆë¼ ì—¬ëŸ¬ í™”ë©´ì´ ê³µìœ í•˜ëŠ”
ShopBy Aurora ì»´í¬ë„ŒíЏ(TextField/SelectBox/AddressForm/Tabs/ThumbItem/ProductSection
등)를 대ìƒìœ¼ë¡œ 한다. _layout.css는 GNB/BottomNav/Header/Footer/PC 공통 ë ˆì´ì•„웃/공용
모달 ì „ìš©ì´ê³ , 화면 하나만 쓰는 스타ì¼ì€ 해당 í™”ë©´ì˜ _*.cssì— ì“´ë‹¤ — 여기는 ê·¸ 사ì´,
"여러 í™”ë©´ì´ ê³µìœ í•˜ì§€ë§Œ ë ˆì´ì•„웃 뼈대는 아닌" ë²¤ë” ì»´í¬ë„ŒíЏ 리셋만 모아둔다.
새 화면ì—서 ì´ë¯¸ 여기 있는 ì»´í¬ë„ŒíЏ(íƒ/ì…€ë ‰íŠ¸ë°•ìŠ¤/주소í¼/ìƒí’ˆì¹´ë“œ 등)ì˜ ë²¤ë” ê¸°ë³¸ê°’ì´
ë˜ ìƒˆì–´ë‚˜ì˜¤ë©´, ê·¸ 화면 CSSì— ë”°ë¡œ 재구현하지 ë§ê³ ì´ íŒŒì¼ì˜ ì„ íƒìž 목ë¡ì— ì¶”ê°€í• ê²ƒ. */
/* ── TextField / SelectBox 공통 ë³´ë” â€” Figma Input/TextInput 스펙 ── */
/* ë²¤ë” ê¸°ë³¸ .text-field(TextField를 ê°ì‹¸ëŠ” <span>)ê°€ ìžì²´ì 으로 ê°ì§„ 회색 ë³´ë”를
ê°–ê³ ìžˆì–´ì„œ, 화면마다 ì–´ì‹ ìƒµ ìŠ¤íƒ€ì¼ ë‘¥ê·¼ ë³´ë”를 <input>ì— ì§ì ‘ ë§ìž…히면서
ë˜‘ê°™ì€ ë³´ë” ìŠ¤íŽ™(Figma Input/TextInput: 기본 #e6e6e6, í¬ì»¤ìФ #201f1f, 비활성 #d3d3d3,
8px ë¼ìš´ë“œ)ì„ íšŒì›ì •ë³´ìˆ˜ì •/배송지관리/검색모달 등ì—서 매번 중복 ì •ì˜í•´ì™”ìŒ â€”
여기 공통 ì§€ì 한 ê³³ì—서 ê´€ë¦¬í•˜ê³ , 화면별 CSS는 ì´ ë³´ë”를 그대로 ë¬¼ë ¤ë°›ê²Œ 함
(기존 ë²¤ë” ë³´ë” ì œê±° + ì–´ì‹ ìƒµ ë³´ë” ì ìš©ì„ í•¨ê»˜ 처리) */
.text-field {
border: 1px solid #e6e6e6;
border-radius: 8px;
}
.text-field:focus-within {
border-color: #201f1f;
}
.text-field:has(input:disabled) {
border-color: #d3d3d3;
}
/* ë²¤ë” QuantityChanger(component.css)ì˜ ê°€ìš´ë° ìˆ˜ëŸ‰ ìž…ë ¥ì¹¸(.quantity-changer__input)ë„
í´ëž˜ìŠ¤ëª…ì´ text-fieldë¼ ìœ„ 공통 ë³´ë”ê°€ 그대로 ë§ì”Œì›Œì§€ëŠ”ë°, ë²¤ë” ì›ëž˜ 설계는 ì´ ì¹¸ì—
ë³´ë”ê°€ ì—†ê³ ì–‘ì˜† ì¦ê° ë²„íŠ¼ì˜ border-right/border-left만으로 êµ¬ë¶„ì„ ì„ ë§Œë“œëŠ” 구조ë¼
(component.css: .quantity-changer__input{border:none}), 위 ê·œì¹™ì´ ë®ì–´ì“°ë©´ì„œ 스테í¼
ê°€ìš´ë° ì¹¸ì— ë‘¥ê·¼ í…Œë‘리 박스가 ê²¹ì³ ë³´ì˜€ìŒ â€” Cart/Claim/ProductThumbItem 등
QuantityChanger를 쓰는 ëª¨ë“ í™”ë©´ì— ê³µí†µë˜ëŠ” ë¬¸ì œë¼ ì—¬ê¸°ì„œ 한 ë²ˆì— ë˜ëŒë¦°ë‹¤ */
.quantity-changer__input.text-field {
border: none;
border-radius: 0;
}
/* ë²¤ë” .select-box(SelectBox를 ê°ì‹¸ëŠ” <span> — 주문서 배송지/íœ´ëŒ€í° í†µì‹ ì‚¬ ì„ íƒ ë“±)ë„
ê°ì§„ 회색(ë˜ëŠ” ê²€ì •) ë³´ë”를 ìžì²´ì 으로 ê°–ê³ ìžˆì–´ .text-field와 나란히 ì“°ì´ë©´ 한 í¼
안ì—서 ì¸í’‹ë¼ë¦¬ í…Œë‘리가 서로 ë‹¬ë¼ ë³´ì˜€ìŒ â€” ë™ì¼í•œ ì–´ì‹ ìƒµ ë³´ë” ìŠ¤íŽ™ìœ¼ë¡œ 통ì¼.
.phone-number-input .select-box/.order-sheet .select-box(벤ë”, í´ëž˜ìФ 2ê°œ)ê°€ ì¼ë°˜
.select-box(í´ëž˜ìФ 1ê°œ)보다 명시ë„ê°€ 높아 ì´ê²ƒë„ 따로 겨냥해야 함(안 그러면
ì£¼ë¬¸ì„œì˜ "배송지 ì„ íƒ" 드ë¡ë‹¤ìš´ë§Œ ë²¤ë” ê¸°ë³¸ 연한 í…Œë‘리(#e1eaef)로 새어나옴) */
.select-box,
.phone-number-input .select-box,
.order-sheet .select-box {
border: 1px solid #e6e6e6;
border-radius: 8px;
}
.select-box:focus-within {
border-color: #201f1f;
}
.select-box:has(select:disabled) {
border-color: #d3d3d3;
}
/* ── AddressForm 공통 — 마ì´íŽ˜ì´ì§€ 배송지 관리 · 주문서 배송지 ë³€ê²½ì´ ê³µìœ â”€â”€ */
/* "주소찾기" 버튼(.address-form__zip-code .btn) — ë²¤ë” ê¸°ë³¸ê°’(ê²€ì • í…Œë‘리/사ê°/130px
ê³ ì •í)ì´ ì˜† 우편번호 í…스트필드(#e6e6e6 ë³´ë”/8px ë¼ìš´ë“œ)와 ì „í˜€ 다르게 보였ìŒ.
마ì´íŽ˜ì´ì§€ 배송지 관리·주문서 배송지 변경 ë‘ í™”ë©´ ëª¨ë‘ AddressFormì„ ê·¸ëŒ€ë¡œ
재사용하는 ë™ì¼ ì»´í¬ë„ŒíŠ¸ë¼ ì—¬ê¸°ì„œ 한 ë²ˆì— ë§žì¶˜ë‹¤(80x_, #202020, radius 8) — 높ì´ë§Œ
화면마다 달ë¼ì„œ(마ì´íŽ˜ì´ì§€ 32px, 주문서는 벤ë”ê°€ ì´ë¯¸ 40px로 맞춰놔서 ë³„ë„ ì§€ì •
불필요) 페ì´ì§€ë³„ CSSì— ë‚¨ê²¨ë‘”ë‹¤ */
.address-form__zip-code {
display: flex;
align-items: center;
gap: 8px;
}
.address-form__zip-code .text-field {
flex: 1;
width: auto;
}
.address-form__zip-code .btn {
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: 80px;
padding: 0 20px;
border: none;
border-radius: 8px;
background-color: #202020;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
letter-spacing: 0.02em;
color: #ffffff;
white-space: nowrap;
}
/* ── Tabs 공통 — ìƒí’ˆìƒì„¸/마ì´íŽ˜ì´ì§€ ì¿ í°Â·ë¦¬ë·°Â·í´ë ˆìž„/ì•„ì´ë””·비밀번호 찾기·FAQ 등
.tabs를 쓰는 ëª¨ë“ í™”ë©´ì— ê³µí†µ ì ìš© ── */
/* 활성 íƒ í‘œì‹œê°€ ë²¤ë” ê¸°ë³¸ê°’ --point-color(ìƒµë°”ì´ ê´€ë¦¬ìžê°€ 몰 테마 색ìƒìœ¼ë¡œ 바꿀 수
있는 변수)를 그대로 ì¨ì„œ, 관리ìžê°€ í¬ì¸íЏ 컬러를 바꾸면 Figmaê°€ ì§€ì •í•œ ê³ ì • 블랙
밑줄 색ìƒì´ ìž„ì˜ë¡œ 바뀌어버림 — ìƒí’ˆìƒì„¸ íƒì—서 ì‹¤ì œë¡œ ë³´ë¼ìƒ‰ìœ¼ë¡œ 나오는 걸 확ì¸í•¨.
ì¹´í…Œê³ ë¦¬ 사ì´ë“œë°”/GNB/BottomNavì˜ active ìƒíƒœì™€ ë™ì¼í•˜ê²Œ ê³ ì • 색ìƒìœ¼ë¡œ ë®ì–´ì”€ */
.tabs__item.on {
color: var(--eoshin-text-primary);
border-bottom-color: var(--eoshin-text-primary);
}
/* íƒ ë¼ë²¨ í°íЏ — ë²¤ë” body{font:"Montserrat","Noto Sans KR",sans-serif}ê°€ ì „ì²´ì—
ê¹”ë ¤ìžˆê³ .tabs__item buttonì—는 font-family ì§€ì •ì´ ì•„ì˜ˆ 없어서 그대로 새어나ê°.
나머지 화면 ì „ì²´ê°€ Pretendard를 쓰는 것과 í†µì¼ */
.tabs__item button {
font-family: Pretendard, sans-serif;
}
/* sticky로 ê³ ì •ë˜ëŠ” 컨í…스트(ìƒí’ˆìƒì„¸ 등)ì—서 ë²¤ë” ê¸°ë³¸ê°’(top: 90px)ì´ ì´ ìŠ¤í‚¨ì˜
ì‹¤ì œ í—¤ë” ë†’ì´(56px)와 ë‹¬ë¼ ìŠ¤í¬ë¡¤ 중 í—¤ë” ë°”ë¡œ 아래가 ì•„ë‹ˆë¼ ê·¸ë³´ë‹¤ 34px 아래ì—
íƒì´ ê³ ì •ë˜ì–´ ê·¸ 틈으로 스í¬ë¡¤ ì¤‘ì¸ ì½˜í…ì¸ ê°€ ë¹„ì³ ë³´ì´ëŠ” ë¬¸ì œê°€ 있었ìŒ.
.tabsê°€ stickyê°€ 아닌 컨í…스트(예: ì•„ì´ë””/비밀번호 찾기)ì—서는 top ê°’ ìžì²´ê°€
ì ìš© 안 ë˜ë¯€ë¡œ 무해함 — .nav/.category-sidebar와 ë™ì¼í•˜ê²Œ --header-height 참조 */
.tabs {
top: var(--header-height);
}
/* ── ë²¤ë” aurora.cssì˜ í™”ë©´ë³„ 구 스킨 íƒ ì˜¤ë²„ë¼ì´ë“œ ë¬´ë ¥í™” ──
Figma Tab/CategoryMiddle·Tab/CategorySectionì€ ë§ˆì´íŽ˜ì´ì§€ ìƒí’ˆí›„기(MY-004)·
취소/반품/êµí™˜(MY-003)·주문내ì—(MY-002)·ìƒí’ˆìƒì„¸ ì •ë³´/리뷰/Q&A íƒÂ·FAQ(CS-002) 등ì—서
ì „ë¶€ ë™ì¼í•œ í•˜ë‚˜ì˜ ê³µìš© ì»´í¬ë„ŒíЏì¸ë°(Figma ì¸ìŠ¤í„´ìŠ¤ë¡œ ì§ì ‘ 확ì¸),
ë²¤ë” aurora.cssê°€ 하필 ì´ í™”ë©´ë“¤ì´ ì“¸ 법한 í´ëž˜ìŠ¤ëª…(.profile-product-review,
.claims__tabs)마다 서로 다른 구 스킨(ì§™ì€ ë‚¨ìƒ‰/네ì´ë¹„ ë°°ê²½ + í° ê¸€ì”¨) íƒ ë””ìžì¸ì„
미리 ë°•ì•„ë†¨ìŒ â€” 화면 하나 늘 때마다 매번 새로 발견해서 ê·¸ 화면 CSSì— ê°ê°
ë®ì–´ì¨ì™”ë˜ ê±¸(마ì´íŽ˜ì´ì§€ ìƒí’ˆí›„기ì—서 ì²˜ìŒ ë°œê²¬) 여기 공통 ì˜ì—으로 모아
한 ë²ˆì— ë¬´ë ¥í™”í•œë‹¤. 새 화면ì—서 ê°™ì€ ì¦ìƒ(íƒì´ ë²¤ë” êµ¬ 스킨 색으로 새어나옴)ì´
ë³´ì´ë©´ 페ì´ì§€ë³„ CSSê°€ ì•„ë‹ˆë¼ ì´ ì„ íƒìž 목ë¡ì— ì¶”ê°€í• ê²ƒ — 화면별로 따로 재구현하지
않는다(취소/반품/êµí™˜Â·FAQì—서 ê°ê° 따로 구현했다가 중복/누ë½ì´ ë°œê²¬ëœ ì 있ìŒ).
Figma 실측: í° ë°°ê²½, ë†’ì´ 48px, íƒ ë°” ì „ì²´ì— ê±¸ì¹œ 연한 êµ¬ë¶„ì„ (#e6e6e6 1px),
활성 íƒ ë°‘ì¤„(#202020 2px)ë§Œ ê·¸ ìœ„ì— ë®ì–´ ê·¸ë ¤ì§€ëŠ” 구조, ë¼ë²¨ 16px/500(활성 600),
비활성 ë¼ë²¨ #9b9b9b(--eoshin-tab-inactive).
.orders__tabs(ì£¼ë¬¸ë‚´ì— ìƒíƒœ íƒ)·.product-detail .tabs(ìƒí’ˆì •ë³´/리뷰/Q&A íƒ)·
.faq__tabs(ìžì£¼ 묻는 질문 ì¹´í…Œê³ ë¦¬ íƒ)는 벤ë”ê°€ ì´ í´ëž˜ìŠ¤ëª…ì„ ëª°ë¼ì„œ 위 ë‘ í™”ë©´ê³¼
달리 ì•„ì´í…œë³„ 구 스킨 오버ë¼ì´ë“œ ìžì²´ê°€ 없는ë°, ê·¸ ëŒ€ì‹ ì»´í¬ë„ŒíЏ 기본값(ì•„ì´í…œë§ˆë‹¤
1px var(--default-color) 밑줄, 활성색 var(--eoshin-text-primary))ì´ ê·¸ëŒ€ë¡œ
새어나와 ìžˆì—ˆìŒ â€” ê°™ì€ Figma ì»´í¬ë„ŒíŠ¸ì¸ ë§Œí¼ ë™ì¼í•˜ê²Œ 맞춘다 */
.profile-product-review__tabs,
.claims__tabs,
.orders__tabs,
.product-detail .tabs,
.faq__tabs {
height: 48px;
background-color: #ffffff;
border-bottom: 1px solid #e6e6e6;
}
/* 벤ë”ê°€ íƒ ì‚¬ì´ì— 넣는 세로 êµ¬ë¶„ì„ (ì–´ë‘ìš´ ë°°ê²½ ì „ìš© 장ì‹) — Figmaì—” 없어서 ì œê±° */
.profile-product-review__tabs li:not(:first-child):before,
.claims__tabs .tabs__item + .tabs__item::before {
display: none;
}
/* .orders__tabs/.product-detail .tabs/.faq__tabs는 벤ë”ê°€ ì´ í´ëž˜ìŠ¤ëª… ì „ìš© 리셋ì„
안 ê°–ê³ ìžˆì–´ì„œ ì»´í¬ë„ŒíЏ 기본값(ì•„ì´í…œë§ˆë‹¤ 1px var(--default-color) 밑줄)ì´ ê·¸ëŒ€ë¡œ
ë³´ìž„ — Figma는 컨테ì´ë„ˆ ì „ì²´ì— ê±¸ì¹œ 위 êµ¬ë¶„ì„ í•˜ë‚˜ë§Œ ìžˆê³ ì•„ì´í…œ ìžì²´ì—” ì„ ì´ ì—†ì–´ì„œ
ì œê±° */
.orders__tabs .tabs__item,
.product-detail .tabs .tabs__item,
.faq__tabs .tabs__item {
border-bottom: none;
}
/* 벤ë”ê°€ ê°™ì€ ëª…ì‹œë„(í´ëž˜ìФ 2ê°œ)로 뒤늦게(component.css ì´í›„ 로드ë˜ëŠ” aurora.css) ì „ì—
.tabs__item.onì„ ë®ì–´ì¨ì„œ í° ê¸€ì”¨/투명 밑줄로 새어나오는 걸, 명시ë„를 ë§žì¶° 다시 ì´ê¹€ */
.profile-product-review .tabs__item.on,
.claims__tabs .tabs__item.on,
.orders__tabs .tabs__item.on,
.product-detail .tabs .tabs__item.on {
color: #1a1a1a;
border-bottom: 2px solid #202020;
}
.profile-product-review__tabs .tabs__item button,
.claims__tabs .tabs__item button,
.orders__tabs .tabs__item button,
.product-detail .tabs .tabs__item button,
.faq__tabs .tabs__item button {
font-size: 16px;
font-weight: 500;
color: var(--eoshin-tab-inactive, #9b9b9b);
}
/* color: 위(.tabs__item button) ê·œì¹™ì˜ ëª…ì‹œì #9b9b9bê°€ li(.tabs__item.on)ì˜ ìƒ‰ ìƒì†ì„
ì´ê²¨ì„œ 활성 íƒ ë¼ë²¨ë„ 회색으로 계산ë˜ë˜ ë¬¸ì œ — ë¼ë²¨ í…스트는 button 요소 ì•ˆì— ìžˆìœ¼ë¯€ë¡œ
button ìžì²´ì— í™œì„±ìƒ‰ì„ ëª…ì‹œí•´ì•¼ 한다 (figma-audit-full.md PD Tab/CategoryMiddle ì°¸ê³ ,
Figma 활성 ë¼ë²¨ #1A1A1A/600) */
.profile-product-review__tabs .tabs__item.on button,
.claims__tabs .tabs__item.on button,
.orders__tabs .tabs__item.on button,
.product-detail .tabs .tabs__item.on button {
font-weight: 600;
color: #1a1a1a;
}
/* ── Checkbox(General/CheckBox) 공통 — ë°°ì†¡ì§€ê´€ë¦¬Â·ìž¬ìž…ê³ ì•Œë¦¼Â·ìƒí’ˆë¬¸ì˜(비밀글)·
약관ë™ì˜(회ì›ê°€ìž…/오픈아ì´ë”” 가입/ë§ˆì¼€íŒ…ìˆ˜ì‹ ë™ì˜/회ì›ì •ë³´ìˆ˜ì •)Â·ì–´ì‹ ê³„ì •ì—°ë™Â·ìž¥ë°”구니 등
여러 í™”ë©´ì´ ê³µìœ í•˜ëŠ” í•˜ë‚˜ì˜ Figma ì»´í¬ë„ŒíЏ(General/CheckBox, 20x20 ì›í˜•).
ë²¤ë” ê¸°ë³¸ì€ 16x16 사ê°í˜•ì´ê³ , 화면마다(8ê³³) ë™ì¼í•œ ìž¬ì •ì˜ë¥¼ ê°ìž ë³µë¶™í•´ì™”ìŒ â€” 여기
한 곳으로 모ì€ë‹¤. ì²´í¬ ì‹œ ë°°ê²½ìƒ‰ì€ Figma 실측 fill(#111111)ì´ ì •ë‹µì¸ë° 그중 7ê³³ì€
옮겨ì 으며 #202020으로 조금씩 미ë„러진 ê°’ì´ êµ³ì–´ ìžˆì—ˆê³ ìž¥ë°”êµ¬ë‹ˆ 1곳만 ì •í™•í•œ ê°’ì„
ì“°ê³ ìžˆì—ˆìŒ â€” Figmaê°€ í•ìƒ ìš°ì„ ì´ë¯€ë¡œ ì •í™•í•œ 값으로 통ì¼í•œë‹¤.
ì²´í¬ë°•스(Checkbox.js)와 ë¼ë””오(Radio.js)ê°€ ê°™ì€ .check-radio 래í¼ë¥¼ 쓰는ë°, ë¼ë””오는
벤ë”ê°€ .check-radio__ico ìžì²´ë¥¼ display:none으로 ìˆ¨ê¸°ê³ ìž…ë ¥ 엘리먼트를 ì§ì ‘ ì›í˜•으로
그리는 ë³„ë„ êµ¬ì¡°ë¼ ì´ ê·œì¹™ê³¼ 무관하다. 다만 ë ˆì´ì•„웃(.check-radio)ê³¼ ë¼ë²¨ 색
(.check-radio__label)ì€ ë¼ë””ì˜¤ë„ ê·¸ëŒ€ë¡œ ë Œë”ë§í•˜ë¯€ë¡œ, ì•„ì§ Figma 미검ì¦ì¸ ë¼ë””오 화면
(ì„±ë³„ì„ íƒ/현금ì˜ìˆ˜ì¦)ì— ìƒˆì–´ë‚˜ê°€ì§€ 않ë„ë¡ [type="checkbox"]로 명시ì 으로 í•œì •í•œë‹¤ */
.check-radio:has(input[type='checkbox']) {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
.check-radio__ico {
width: 20px;
height: 20px;
border-radius: 50%;
border: 1px solid #e6e6e6;
background-color: #ffffff;
}
/* ì²´í¬ ì•„ì´ì½˜(.ico) ìžì²´ëŠ” 벤ë”ê°€ í° ìŠ¤í”„ë¼ì´íЏ ì´ë¯¸ì§€ì—서 position:absolute + top/left:50% +
transform:translate(-50%,-50%)로 ìž˜ë¼ ë³´ì—¬ì£¼ëŠ” ë°©ì‹ì¸ë°, ì¼ë¶€ ëª¨ë°”ì¼ ê¸°ê¸°ì—서 ì´ ê³„ì‚°ì´
어긋나 ì•„ì´ì½˜ì´ 중앙ì—서 ë°€ë ¤ ê±°ì˜ ì•ˆ ë³´ì´ëŠ” ë¬¸ì œê°€ 있었다(2026-08-11 ì œë³´) — ê·¸ 메커니즘ì—
기대지 ì•Šê³ background-position:center로 ì§ì ‘ ê·¸ë ¤ì„œ 기기 종류와 무관하게 í•ìƒ ì •í™•ížˆ
ì¤‘ì•™ì— ì˜¤ê²Œ 한다. ë²¤ë” ì•„ì´ì½˜(.ico)ì€ ê²¹ì³ ë³´ì´ì§€ 않ë„ë¡ ìˆ¨ê¸´ë‹¤. */
.check-radio input[type='checkbox'] ~ .check-radio__ico .ico {
display: none;
}
.check-radio input:checked ~ .check-radio__ico {
background-color: #111111;
border-color: #111111;
}
.check-radio input:checked[type='checkbox'] ~ .check-radio__ico {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2024%2024%22%3E%3Cpath%20d%3D%22M5%2013L9%2017L19%207%22%20fill%3D%22none%22%20stroke%3D%22%23ffffff%22%20stroke-width%3D%223%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E");
background-repeat: no-repeat;
background-position: center;
background-size: 12px 12px;
}
.check-radio input[type='checkbox'] ~ .check-radio__label {
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
}
.check-radio input:checked[type='checkbox'] ~ .check-radio__label {
color: #1a1a1a;
}
/* ── ThumbItem 공통 — ìƒí’ˆ ì¸ë„¤ì¼ì„ 쓰는 ëª¨ë“ í™”ë©´(ìƒí’ˆ 목ë¡, 카트, 주문서, 마ì´íŽ˜ì´ì§€
ì°œ/최근본ìƒí’ˆ/리뷰, ìƒí’ˆìƒì„¸ ê´€ë ¨ìƒí’ˆ 등)ì´ ê³µìœ â”€â”€ */
/* 2ì—´ 그리드(.thumb-GALLERY/.thumb-CART)ì˜ ì¤„(í–‰) ì‚¬ì´ ê°„ê²© — ë² ì´ìФ ìŠ¤í‚¨ì€ flex-wrapë§Œ
걸어ë‘ê³ row-gapì´ ì—†ì–´ 줄바꿈 시 카드 ì‚¬ì´ ì—¬ë°±ì´ ê±°ì˜ ì—†ì—ˆìŒ.
Figma ProductCardGrid(5356:44524, 5356:44229 등 ëª¨ë“ ìƒí’ˆ ëª©ë¡ í™”ë©´ì—서 공통)ì˜
itemSpacing:24ì— ë§žì¶¤ */
.thumb-GALLERY,
.thumb-CART {
row-gap: 24px;
/* ë² ì´ìФ 스킨 기본 좌우 패딩(20px) ëŒ€ì‹ Figma ProductListSection(5356:44228 등)ì˜
16px로 맞춤 — ê°™ì€ í™”ë©´ì˜ ë‹¤ë¥¸ 요소(ì•„ì´ì½˜ 그리드, í•„í„°íƒ, 카운트바)는 ì „ë¶€ 16pxìž„ */
padding-left: 16px;
padding-right: 16px;
}
/* ì´ë¯¸ì§€ ì˜ì— ë°°ê²½ì„ ë‹¤ë¥¸ 카드들과 통ì¼(#FAFAFA), 위시 버튼 ì ˆëŒ€ìœ„ì¹˜ 기준ì 확보.
Figma ImageFrame(341:3566)ì´ cornerRadius:8ì¸ë° 여기 누ë½ë˜ì–´ 있어 다른 카드
(BestSellerCard, CampaignCard)와 달리 모서리가 ê°ì§€ê²Œ ë³´ì´ë˜ ë¬¸ì œë¥¼ 맞춤.
background는 ì†ëŒ€ì§€ 않는다 — 벤ë”ê°€ .thumb-item__mediaì— background:url(no-img.png)
형태로 "ì´ë¯¸ì§€ì—†ìŒ" ìžë¦¬í‘œì‹œìžë¥¼ shorthand로 깔아ë‘는ë°(ThumbItemContentê°€ src 없으면
.thumb-item__img ìžì²´ë¥¼ ë Œë”ë§ ì•ˆ 해서 ì´ ë°°ê²½ì´ ê·¸ëŒ€ë¡œ ìžë¦¬í‘œì‹œìžë¡œ ë³´ì´ëŠ” 구조),
지우면 ì§„ì§œ ì´ë¯¸ì§€ê°€ 없는 ìƒí’ˆì—ì„œë„ ìžë¦¬í‘œì‹œìžê°€ 안 ë³´ì´ê²Œ ëœë‹¤.
ëŒ€ì‹ ì•„ëž˜ img-box/img/img 규칙으로 ì‚¬ì§„ì´ ìžˆì„ ë•Œ 박스를 ì™„ì „ížˆ ë®ì–´ì¨ì„œ ìžì—°ìŠ¤ëŸ½ê²Œ
가리기만 한다 — 박스 í¬ê¸°(72px/174px 등)와 무관하게 í•ìƒ ì•ˆì „í•œ ë°©ì‹(ì‹¤ì œë¡œ 다른
í¬ê¸°ë¡œ ê°•ì œ 축소해서 확ì¸í•¨) */
.thumb-item__media {
position: relative;
background-color: #fafafa;
border-radius: 8px;
overflow: hidden;
}
/* ë²¤ë” <a>(.thumb-item__img-box)ê°€ 기본 display:inlineì´ë¼ ë Œë”ë§ëœ 박스 높ì´ê°€ í…스트
line-height(~18px)ë§Œí¼ë§Œ 잡혀서, í´ë¦ 가능 ì˜ì—ì´ ì‹¤ì œ ì´ë¯¸ì§€ë³´ë‹¤ 훨씬 작았ìŒ
(ì´ë¯¸ì§€ ìžì²´ëŠ” 시ê°ì ìœ¼ë¡ ë¬¸ì œì—†ì´ ê½‰ ì°¨ ë³´ì´ì§€ë§Œ 히트 ì˜ì—ë§Œ ìž‘ìŒ) — ì´ë¯¸ì§€ í¬ê¸°ì™€
ì‹¤ì œ 히트 ì˜ì—ì„ ì¼ì¹˜ì‹œí‚¨ë‹¤ */
.thumb-item__img-box {
display: block;
width: 100%;
height: 100%;
}
.thumb-item__img {
border: none;
width: 100%;
height: 100%;
}
/* .thumb-item__img(span)ê°€ display:flexë¼ ìžì‹ imgê°€ 기본 align-items:stretch로
높ì´ê¹Œì§€ ê°•ì œë¡œ ëŠ˜ì–´ë‚˜ê³ , width:100%(component.css)와 ê²¹ì³ ì›ë³¸ ë¹„ìœ¨ì´ ë¬´ì‹œëœ ì±„
가로/세로 ëª¨ë‘ ëŠ˜ì–´ë‚˜ ë³´ì´ëŠ”(ì‚¬ì‹¤ìƒ object-fit:fill) ë¬¸ì œê°€ 있었ìŒ.
Figmaì˜ scaleMode:FILL(=object-fit:cover, 비율 ìœ ì§€í•˜ë©° 채우기)ì— ë§žì¶¤ */
.thumb-item__img img {
width: 100%;
height: 100%;
object-fit: cover;
}
/* 카트/주문서 ìƒí’ˆ ì¸ë„¤ì¼ë§Œ 72x72/radius 4 — ì „ì— ê¸°ë³¸ê°’(위, ìƒí’ˆ ëª©ë¡ ê·¸ë¦¬ë“œìš©
8px ë¼ìš´ë“œ)ê³¼ 다른 ë‘ í™”ë©´ ì „ìš© í¬ê¸°ë¼ 여기서 따로 ì§€ì •í•œë‹¤ */
.cart__product-card__image .thumb-item__media,
.order-sheet .thumb-item__media {
width: 72px;
height: 72px;
border-radius: 4px;
box-sizing: border-box;
}
/* 브랜드명 — BrandName í…스트 */
.product-thumb-brand {
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.0017em;
color: #9b9b9b;
margin: 0;
}
/* í• ì¸ ì „ ì›ê°€ — ì·¨ì†Œì„ */
.product-thumb-origin-price {
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.0017em;
color: #9b9b9b;
text-decoration: line-through;
margin: 0;
}
/* ìƒí’ˆëª… — ë² ì´ìФ 스킨 기본값(Montserrat, 14px/lh14px)ì´ ë‚¨ì•„ìžˆì–´ Pretendard로
êµì²´ë˜ì§€ ì•Šê³ ìžˆì—ˆìŒ. Figma Card/ProductCard ProductName(341:3577) ìŠ¤íŽ™ì— ë§žì¶¤ */
.product-thumb-title,
.product-thumb-title-product-name {
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 18px;
letter-spacing: 0.0014em;
color: #404040;
}
/* 최종가 — ë² ì´ìФ 스킨 기본값(Montserrat, 16px/700/letter-spacing:-1px)ì´ ë‚¨ì•„ìžˆì–´
Pretendard로 êµì²´ë˜ì§€ ì•Šê³ ìžˆì—ˆìŒ. Figma Price(341:3580) ìŠ¤íŽ™ì— ë§žì¶¤ */
.product-thumb-price,
.product-thumb-unit {
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
letter-spacing: 0;
color: #1a1a1a;
}
/* í• ì¸ìœ¨ — 가격 ì•žì— ë¹¨ê°„ìƒ‰ìœ¼ë¡œ 표시. Figma DiscountRate(449:4995) 스펙(16px/lh24px)ì— ë§žì¶¤ */
.product-thumb-rate {
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #ff272b;
margin-right: 4px;
}
/* 위시(ì°œ) 버튼 — Figma Card/WishButton, ì´ë¯¸ì§€ 우하단 12px ê³ ì •, í•ìƒ ë…¸ì¶œ.
button 기본 í…Œë‘리가 리셋ë˜ì§€ 않아 Figmaì—는 없는 ê²€ì€ 1px ì„ ì´ ìƒˆì–´ë‚˜ì˜¤ê³ ìžˆì—ˆìŒ */
.product-card__wish-btn {
position: absolute;
right: 12px;
bottom: 12px;
z-index: 1;
width: 28px;
height: 28px;
display: flex;
align-items: center;
justify-content: center;
border: none;
border-radius: 50%;
background: rgba(0, 0, 0, 0.25);
}
/* ì°œ 활성화 ìƒíƒœ — Figma Wished=True, ë°°ê²½ì´ ë¹¨ê°„ìƒ‰ìœ¼ë¡œ 바뀜 */
.product-card__wish-btn--active {
background: #ff5a5d;
}
.product-card__wish-btn svg {
width: 16px;
height: 16px;
}
/* 프로모션 ë°°ì§€(ìµœì €ê°€ 등) — Figma Badge/Variation(Cheapest), ì´ë¯¸ì§€ 좌ìƒë‹¨ 4px ê³ ì •.
ThumbItem ë²¤ë” êµ¬ì¡°ìƒ ì´ ë°°ì§€ê°€ ìƒí’ˆ ë§í¬(<Link>)ì˜ í˜•ì œ 요소로 ê·¸ ìœ„ì— ê²¹ì³ ê·¸ë ¤ì ¸ì„œ,
ë°°ì§€ ì˜ì—ì„ í´ë¦í•˜ë©´ ë§í¬ë¥¼ 안 íƒ€ê³ ê·¸ëƒ¥ 씹혀버리는 ë¬¸ì œê°€ ìžˆì—ˆìŒ â€” 배지는 눌리는
ë²„íŠ¼ì´ ì•„ë‹ˆë¼ ì •ë³´ 표시용ì´ë¼ pointer-events:none으로 í´ë¦ì´ 아래 ë§í¬ë¡œ 그대로 통과ë˜ê²Œ 함 */
.product-card__sticker-badge {
position: absolute;
top: 4px;
left: 4px;
z-index: 1;
height: 24px;
padding: 0 8px;
display: flex;
align-items: center;
border-radius: 4px;
background: #ff5a5d;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 600;
color: #ffffff;
white-space: nowrap;
pointer-events: none;
}
/* 스티커 ìƒ‰ìƒ ë³€í˜• — Figma Badge/Variation(Best/New/순위/ìµœì €ê°€)ì€ ë¼ë²¨ë§ˆë‹¤ 배경색ì´
다름. ShopBy 어드민 스티커 ë°ì´í„°ì—” ìƒ‰ìƒ ì •ë³´ê°€ 없어 ë¼ë²¨ 문구로만 구분 가능한
변형(getStickerBadgeVariant)ì— í•œí•´ 여기서 ë°°ê²½/글ìžìƒ‰ì„ ë®ì–´ì“°ê³ , 매ì¹ë˜ì§€ 않는
ìž„ì˜ ë¬¸êµ¬ëŠ” 위 기본(ìµœì €ê°€ë¥˜ 빨간 ë°°ê²½) ìŠ¤íƒ€ì¼ ê·¸ëŒ€ë¡œ 노출ëœë‹¤ */
.product-card__sticker-badge--best,
.product-card__sticker-badge--rank-1 {
background: #202020;
}
.product-card__sticker-badge--new {
background: #4a69ea;
}
.product-card__sticker-badge--rank-2,
.product-card__sticker-badge--rank-3,
.product-card__sticker-badge--rank-4 {
background: #d3d3d3;
color: #1a1a1a;
}
/* stickerInfos[].typeì´ 'IMAGE'ì¸ ê²½ìš° — 관리ìžê°€ 올린 ë°°ì§€ ì´ë¯¸ì§€ë¥¼ 그대로 노출
(í…스트 배지와 ë™ì¼í•˜ê²Œ ì´ë¯¸ì§€ 좌ìƒë‹¨ 4px ê³ ì •, 높ì´ë§Œ ë§žì¶”ê³ ì›ë³¸ 비율 ìœ ì§€) */
.product-card__sticker-badge-img {
position: absolute;
top: 4px;
left: 4px;
z-index: 1;
height: 24px;
pointer-events: none;
width: auto;
}
/* ë²¤ë” .thumb-item-badges{top:0;left:0}ê°€ 배지를 ì´ë¯¸ì§€ ëª¨ì„œë¦¬ì— ë”± 붙여놔서(여백 ì—†ìŒ),
다른 프로모션 ë°°ì§€(.product-card__sticker-badge)와 ë™ì¼í•˜ê²Œ Figma 실측 4px ì¸ì…‹ì„ 준다 */
.thumb-item-badges {
margin: 4px;
}
/* í’ˆì ˆ/íŒë§¤ìƒíƒœ ë°°ì§€(구형, 좌ìƒë‹¨ ìž‘ì€ ë°°ì§€) — PCì˜ SIMPLE_IMAGE 목ë¡(ì´ë¯¸ì§€ ì—†ì´ í…스트만
나열, ProductGrid.tsxì˜ ProductThumbInfoBySimpleType)ì—서만 ì•„ì§ ì“°ì¸ë‹¤. ì´ë¯¸ì§€ê°€ 있는
ì¼ë°˜ 카드(ëª¨ë°”ì¼ GALLERY/LIST/CART 등)는 ì´ë¯¸ì§€ ìžì²´ê°€ 없어 아래 중앙 알약형 태그
(.product-card__sold-out-tag)로 통ì¼ëê³ ì´ ìž‘ì€ ë°°ì§€ëŠ” ë” ì´ìƒ ì“°ì§€ 않는다.
Figmaì— ì´ í…스트 ì „ìš© ë ˆì´ì•„ì›ƒì˜ ë°°ì§€ 예시가 따로 없어, ì´ë¯¸ ìŠ¤íŽ™ì´ ìžˆë˜ í’ˆì ˆ ë°°ì§€
(구 Figma í’ˆì ˆ 카드 예시 6930:30533, 40x24/radius4/#111111)와 톤만 맞춘다 */
.badge.product-card__badge--sold-out,
.badge.product-card__badge-sale-status {
min-width: 40px;
height: 24px;
padding: 0 8px;
display: inline-flex;
align-items: center;
justify-content: center;
border-color: #111111;
border-radius: 4px;
background-color: #111111;
font-size: 13px;
font-weight: 600;
}
/* í’ˆì ˆ/íŒë§¤ì˜ˆì •/íŒë§¤ì¢…료 ìƒí’ˆ ì´ë¯¸ì§€ ì˜¤ë²„ë ˆì´ â€” Figma Dimmed(7453:44998). ì˜ˆì „ì—” ì´ë¯¸ì§€
ì „ì²´ì— ê²€ì • 25% ì˜¤ë²„ë ˆì´ + í° ë¡œê³ ì›Œí„°ë§ˆí¬ì˜€ëŠ”ë°, ë””ìžì¸ì´ 바뀌어 ì´ë¯¸ì§€ ì¤‘ì•™ì— ê²€ì •
75% 알약형 태그로 ìƒíƒœ 문구를 보여주는 형태가 ë다(ì „ì²´ ì´ë¯¸ì§€ë¥¼ 어둡게 하는 처리는
ë¹ ì§). ProductSoldOutDimì´ ìœ„ì‹œë²„íŠ¼/스티커 배지와 ê°™ì€ HoverViewComponent 위치ì—서 ë¨¼ì €
ë Œë”ë§ë˜ì–´(DOM ìˆœì„œìƒ ì•„ëž˜) ê·¸ ìœ„ì— ìœ„ì‹œë²„íŠ¼/배지가 ìžì—°ìŠ¤ëŸ½ê²Œ ê²¹ì³ ë³´ì¸ë‹¤ */
.product-card__sold-out-dim {
position: absolute;
top: 0;
left: 0;
width: 100%;
aspect-ratio: 1 / 1;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
}
.product-card__sold-out-tag {
display: flex;
flex-direction: column;
align-items: center;
padding: 8px;
border-radius: 12px;
background-color: rgba(0, 0, 0, 0.75);
text-align: center;
color: #ffffff;
}
.product-card__sold-out-tag em {
font-family: Pretendard, sans-serif;
font-style: normal;
font-size: 18px;
font-weight: 600;
letter-spacing: -0.01em;
line-height: 24px;
}
.product-card__sold-out-tag span {
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
letter-spacing: 0.02em;
line-height: 18px;
}
/* ì´ ê°œìˆ˜ + ì •ë ¬ ë°” — Figma Bar/FilterBar(5356:44227). ë² ì´ìФ 스킨(aurora.css)ì´ ì—¬ê¸°ì—
sticky ê³ ì •/하단 ë³´ë”/32px ë§ˆì§„ì„ ê°•ì œë¡œ 걸어놔서 스í¬ë¡¤í•˜ë©´ 어색하게 ë– ìžˆê³ ë°‘ì—
불필요한 ê³µë°±ì´ ìƒê¸°ë˜ ë¬¸ì œë¥¼ ê°™ì´ ì •ë¦¬í•¨ */
.total-sort {
position: static;
margin-bottom: 0;
border-bottom: none;
padding: 12px 16px;
}
/* font-family를 ì§€ì • 안 해서 ë²¤ë” body{font:14px/1 "Montserrat",...} ì „ì— ê¸°ë³¸ê°’ì´
그대로 ìƒˆì–´ë‚˜ì˜¤ê³ ìžˆì—ˆë‹¤ — "ì´ Nê°œì˜ ì¿ í°/ìƒí’ˆ"ì˜ ìˆ«ìžë§Œ Pretendardê°€ 아닌
Montserrat 글꼴로 ë Œë”ë§ë˜ë˜ ë¬¸ì œ */
.total-sort__count {
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
}
.total-sort__count .highlight {
font-weight: 600;
font-style: normal;
color: #1a1a1a;
}
/* ── ProductSectionWrap í—¤ë” â€” SectionHeaderBar로 êµì²´í•˜ë©° ë² ì´ìФ ìŠ¤í‚¨ì˜ í° íƒ€ì´í‹€
(font-size:32px)/êµ¬ë¶„ì„ ìžˆëŠ” ë”보기 ë²„íŠ¼ì„ ë‹¤ë¥¸ 섹션들과 ë™ì¼í•œ í—¤ë” ìŠ¤íƒ€ì¼(좌우 16px
패딩)로 통ì¼. ì¹´í…Œê³ ë¦¬/검색 등 여러 화면ì—서 재사용ë˜ëŠ” ë²¤ë” í´ëž˜ìФ ── */
.product-section__header {
padding: 0 16px;
/* í—¤ë”-콘í…ì¸ ê°„ê²©ì€ SectionHeaderBar ìžì²´ì˜ margin-bottom(16px)ì´ ë‹´ë‹¹ —
여기서 12px를 ë” ì–¹ìœ¼ë©´ Figma 16pxê°€ ì•„ë‹ˆë¼ 24px+ê°€ ë¨(flex 컨테ì´ë„ˆë¼ 마진 미ìƒì‡„) */
margin-bottom: 0;
}
/* .l-panelì˜ í…Œë‘리/그림ìž/margin-bottomì€ ì´ì œ ì „ì—ì—서 ê»ì§€ë§Œ(_layout.cssì˜ .l-panel
규칙), .product-section ìžì‹ ì—게 벤ë”ê°€ 별ë„로 걸어둔 margin-top:60px는 .l-panelê³¼
무관한 규칙ì´ë¼ 여기서 따로 꺼야 한다 — Figma SCR-010_ë©”ì¸ í”„ë ˆìž„ì€ ì„¹ì…˜ 사ì´
ê°„ê²©ì´ ì „í˜€ ì—†ì´(gap 0) ë”± ë¶™ì–´ìžˆìŒ */
.product-section {
margin-top: 0;
}
/* ë©”ì¸ íŽ˜ì´ì§€ 섹션 ê°„ 여백(ì¹´í…Œê³ ë¦¬ë°°ë„ˆ/기íšì „/BEST 섹션과 ë™ì¼í•˜ê²Œ 28px)ì„
ì´ ì„¹ì…˜ì—ë„ ë§žì¶˜ë‹¤ — .product-sectionì€ ì¹´í…Œê³ ë¦¬/검색 등 다른 화면ì—서ë„
재사용ë˜ëŠ” ë²¤ë” í´ëž˜ìŠ¤ë¼ ë©”ì¸ íŽ˜ì´ì§€(.main-wrap)로만 스코프함 */
.main-wrap .product-section {
padding-bottom: 28px;
}
/* ── ìƒí’ˆë¬¸ì˜ í…스트 ìž…ë ¥ 공통 — ìƒí’ˆìƒì„¸ "ìƒí’ˆ 문ì˜í•˜ê¸°"(ProductInquiryForm)와
리뷰/Q&A "ì‹ ê³ í•˜ê¸°"(ReportForm)ê°€ ê°™ì€ í´ëž˜ìŠ¤ëª…(product-inquiry-form__title/__text)ì„
그대로 재사용해서 ì“°ëŠ”ë° ë‘˜ 다 스타ì¼ì´ ì „í˜€ 없어 ë²¤ë” ê¸°ë³¸ê°’ ê·¸ëŒ€ë¡œì˜€ìŒ â€” 여기
한 ê³³ì—서 맞춘다. Figmaì— ì´ ë‘ í¼ì˜ ì‹¤ì œ ëª©ì—…ì´ ì—†ì–´ 리뷰작성(ReviewForm)·1:1문ì˜
(PersonalInquiryForm) 등 ì´ë¯¸ 스타ì¼ì´ 있는 다른 ê²Œì‹œíŒ í¼ê³¼ 톤만 맞춘다 */
.product-inquiry-form__title input {
height: 44px;
padding: 0 12px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #404040;
}
/* TextArea는 TextField와 달리 .text-field 래í¼ê°€ 없어(ë²¤ë” TextArea.js 확ì¸) ë³´ë”를
ì§ì ‘ ì§€ì •í•´ì•¼ 한다 */
.product-inquiry-form__text {
height: 160px;
padding: 12px;
border: 1px solid #e6e6e6;
border-radius: 8px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #404040;
}
.product-inquiry-form__text:focus {
border-color: #201f1f;
}
.product-inquiry-form__title ~ .character-counter__status,
.product-inquiry-form__text ~ .character-counter__status {
margin-top: 8px;
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
color: #9b9b9b;
}
/* 벤ë”ê°€ 현재 글ìžìˆ˜ 숫ìžì—ë§Œ --point-color(몰 관리ìžê°€ 바꿀 수 있는 색ìƒ)를 ê°•ì œë¡œ
입혀놔서, ì–´ì‹ ìƒµ í¬ì¸íŠ¸ì»¬ëŸ¬(파란색)ê°€ 그대로 ìƒˆì–´ë‚˜ì˜¤ê³ ìžˆì—ˆìŒ â€” 위ì—서 ì§€ì •í•œ
부모 ìƒ‰ì„ ê·¸ëŒ€ë¡œ ë¬¼ë ¤ë°›ê²Œ 리셋 */
.product-inquiry-form__title ~ .character-counter__status .character-counter__count,
.product-inquiry-form__text ~ .character-counter__status .character-counter__count {
color: inherit;
font-weight: 400;
}
/* 순위 리본 ë°°ì§€ — Figma Badge/Variation, ìƒë‹¨ì—서 ì´ë¯¸ì§€ í”„ë ˆìž„ 좌측으로 8px 안쪽 ê³ ì •
(Badge/Variation ì»´í¬ë„ŒíЏ ìžì²´ëŠ” 64px íì´ì§€ë§Œ ì‹¤ì œ ë¦¬ë³¸ì€ ê·¸ 안ì—서 8px ì¸ì…‹ëœ ìœ„ì¹˜ì— ìžˆìŒ).
벡터 경로(M0 0H36V35.6436L18 45L0 35.6436V0Z)는 í:ë†’ì´ ë¹„ìœ¨ì´ í•ìƒ 100%:79.2%ì¸
ì§€ì ì—서 꺾ì´ë¯€ë¡œ clip-path í¼ì„¼íЏ ê°’ì€ rank1(36x45)/rank2+(32x40) ëª¨ë‘ ë™ì¼í•˜ê²Œ ì ìš©ë¨.
ì›ëž˜ ë©”ì¸íŽ˜ì´ì§€ BestSellerCardRowSection ì „ìš©ì´ì—ˆë‹¤ê°€ BEST ì „ì²´ë³´ê¸°(GalleryListPage)ë„
ê°™ì€ ë°°ì§€ë¥¼ ì¨ì„œ ì´ íŒŒì¼ë¡œ 옮김 — í´ëž˜ìŠ¤ëª…ì€ ê·¸ëŒ€ë¡œ ìœ ì§€(ë‘ ê³³ 다 ë¦¬ìŠ¤í¬ ì—†ì´ ìž¬ì‚¬ìš©) */
.best-seller-card__rank {
position: absolute;
top: 0;
left: 8px;
z-index: 1;
display: flex;
justify-content: center;
clip-path: polygon(0 0, 100% 0, 100% 79.2%, 50% 100%, 0 79.2%);
}
.best-seller-card__rank--first {
width: 36px;
height: 45px;
padding-top: 6px;
background: #202020;
}
.best-seller-card__rank--rest {
width: 32px;
height: 40px;
padding-top: 5px;
background: #d3d3d3;
}
/* 4위 ì´í•˜ — Figma Badge/Variationì€ 4위부터 ë” ìž‘ì€ 28×28 ë°°ì§€(2·3위 32×40ê³¼ 구분).
clip-path는 í¼ì„¼íЏ 기반ì´ë¼ 그대로 재사용 */
.best-seller-card__rank--rest-small {
width: 28px;
height: 28px;
padding-top: 2px;
background: #d3d3d3;
}
.best-seller-card__rank-label {
font-family: Pretendard, sans-serif;
font-weight: 600;
}
/* 1위 배지 — Figma Badge/Variation Container/1위(16px/lh24px) */
.best-seller-card__rank--first .best-seller-card__rank-label {
font-size: 16px;
line-height: 24px;
color: #ffffff;
}
/* 2~3위 ë°°ì§€ — 1위보다 ìž‘ì€ ë°°ì§€(32x40)ì— ë§žì¶° í…ìŠ¤íŠ¸ë„ ì¶•ì†Œ.
Figma Badge/Variation Container/2위(13px/lh18px/letter-spacing 0.02) */
.best-seller-card__rank--rest .best-seller-card__rank-label {
font-size: 13px;
line-height: 18px;
letter-spacing: 0.0015em;
color: #1a1a1a;
}
/* 4위 ì´í•˜ ë°°ì§€ — Figma 12px/400(2·3위 13px/600ê³¼ 구분) */
.best-seller-card__rank--rest-small .best-seller-card__rank-label {
font-size: 12px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.0015em;
color: #1a1a1a;
}
/* 사진 첨부 ì¹´ë©”ë¼ íƒ€ì¼ ê·¸ë¦¬ë“œ(ImageAttachTileGrid.tsx) — Figma PD-007_ìƒí’ˆìƒì„¸_리뷰작성
(5593:8123) ImageUploadSection. 리뷰/1:1문ì˜/취소·반품·êµí™˜ ì‹ ì²ì´ ì „ë¶€ ê°™ì€ 100x100
ì¹´ë©”ë¼ íƒ€ì¼ + 첨부 사진 그리드를 쓰는ë°, 화면마다(review-form__*, board-form__* ë‘ ë²Œë¡œ)
따로 구현/중복 ì •ì˜ë¼ ìžˆë˜ ê±¸ 여기 하나로 모았다 */
.board-form__tile-grid {
display: flex;
flex-wrap: wrap;
gap: 10px;
margin: 0 16px;
}
.board-form__upload-tile {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 8px;
flex-shrink: 0;
width: 100px;
height: 100px;
padding: 0;
border: 1px solid #e6e6e6;
border-radius: 4px;
background-color: #ffffff;
}
.board-form__upload-tile span {
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
color: #404040;
}
.board-form__image-tile {
position: relative;
flex-shrink: 0;
width: 100px;
height: 100px;
border-radius: 4px;
overflow: hidden;
}
.board-form__image-tile img {
width: 100%;
height: 100%;
object-fit: cover;
}
.board-form__image-tile-remove {
position: absolute;
top: 0;
right: 0;
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
padding: 0;
border: none;
background-color: #201f1f;
}
/* ── 간편로그ì¸(OpenIdSignIn) 버튼 — 로그ì¸(MB-001)/재ì¸ì¦(회ì›ì •ë³´ìˆ˜ì •Â·íšŒì›íƒˆí‡´ ì§„ìž…)
등 여러 í™”ë©´ì´ ê°™ì€ ì»´í¬ë„ŒíŠ¸ë¥¼ 쓰는ë°, 브랜드 버튼 ë””ìžì¸ì´ SignInForm.cssì˜
.sign-in-open-id ìŠ¤ì½”í”„ì— ê°‡í˜€ 있어서 재ì¸ì¦ 화면엔 ë²¤ë” ê¸°ë³¸ê°’(ê°€ìš´ë° ì¤„ 그어진
"간편로그ì¸" 문구, 네ì´ë²„ ì—°ë‘색 #1fd771 ì‚¬ê° ë²„íŠ¼, ì•„ì´ì½˜ ì—†ìŒ)ì´ ê·¸ëŒ€ë¡œ 새ê³
있었ìŒ(QA ì§€ì , 2026-08-14) — 규칙대로 ì´ íŒŒì¼ë¡œ 승격해 어디서 ì“°ë“ ê°™ì€ ë””ìžì¸.
("간편로그ì¸" êµ¬ë¶„ì„ ë¬¸êµ¬ëŠ” Figma ë¡œê·¸ì¸ í™”ë©´ì— ì—†ê³ ìž¬ì¸ì¦ 화면ì—ì„œë„ ì–´ìƒ‰í•˜ë‹¤ëŠ”
확ì¸ì„ 받아 ì»´í¬ë„ŒíЏ ì „ì—ì—서 숨긴다) ── */
.open-id-sign-in__title {
display: none;
}
.open-id-sign-in__list {
display: flex;
flex-direction: column;
gap: 12px;
margin-top: 0;
}
.open-id-sign-in__item {
margin-top: 0;
}
/* 공용 ì»´í¬ë„ŒíŠ¸ê°€ provider를 알파벳 ì—순 ì •ë ¬í•´ 네ì´ë²„ê°€ ë¨¼ì € 오지만, Figma(MB-001)는
카카오 → 네ì´ë²„ ìˆœì„œë¼ ì‹œê° ìˆœì„œë§Œ 바꾼다(재ì¸ì¦ì²˜ëŸ¼ providerê°€ 1ê°œì¸ í™”ë©´ì—” ì˜í–¥ ì—†ìŒ) */
.open-id-sign-in__item.type-kakao {
order: -1;
}
/* Figma ì‹¤ì¸¡ì€ ì¹´ì¹´ì˜¤/네ì´ë²„ 48pxì´ì§€ë§Œ ë¡œê·¸ì¸ í™”ë©´ì—서 ì–´ì‹ ì•± 버튼(52px)ê³¼ 높ì´ë¥¼
통ì¼í•´ë‹¬ë¼ëŠ” ìš”ì²ì´ ìžˆì—ˆìŒ â€” ëª¨ë“ í™”ë©´ì—서 52px로 í†µì¼ */
.open-id-sign-in__item button {
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
height: 52px;
border-radius: 8px;
font-weight: 600;
}
.open-id-sign-in__item button::before {
content: '';
width: 20px;
height: 20px;
background-repeat: no-repeat;
background-position: center;
background-size: contain;
}
.open-id-sign-in__item.type-naver button {
background-color: #03c75a;
}
.open-id-sign-in__item.type-naver button::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2020%22%3E%3Cpath%20d%3D%22M13.5596%2010.704L6.14589%200L0%200L0%2020L6.43845%2020L6.43845%209.296L13.8521%2020L20%2020L20%200L13.5596%200L13.5596%2010.704Z%22%20fill%3D%22%23ffffff%22%2F%3E%3C%2Fsvg%3E");
}
.open-id-sign-in__item.type-kakao button {
color: #000000;
}
.open-id-sign-in__item.type-kakao button::before {
background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2020%2018.6667%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M10.0001%200C4.47688%200%200%203.45884%200%207.72476C0%2010.3778%201.73157%2012.7166%204.36838%2014.1077L3.25893%2018.1606C3.16091%2018.5187%203.57047%2018.8041%203.88498%2018.5966L8.74819%2015.3869C9.1586%2015.4265%209.57568%2015.4496%2010.0001%2015.4496C15.5228%2015.4496%2020%2011.9909%2020%207.72476C20%203.45884%2015.5228%200%2010.0001%200Z%22%20fill%3D%22%23000000%22%2F%3E%3C%2Fsvg%3E");
}
/* ==========================================================================
다ì´ë‚˜ë¯¹ 컬러 ìƒí’ˆ 카드 스킨(스펙 v2.2, Figma 9553:40769) —
entities/product/productCard ê°€ ëª¨ë“ ìƒí’ˆ 목ë¡(ì¹´í…Œê³ ë¦¬/기íšì „/ì§„ì—´ ì „ì²´ë³´ê¸°/검색/BEST)
ì—서 ì“°ì´ë¯€ë¡œ 여기 ë‘ë©´ ì „ í™”ë©´ì— ì¼ê´„ ì ìš©ëœë‹¤. ìƒ‰ìƒ ê°’(--card-bg)ì€ ì¹´ë“œê°€
ì¸ë„¤ì¼ì—서 추출해 ì¸ë¼ì¸ 변수로 ì£¼ìž…í•˜ê³ , ì´ íŒŒì¼ì€ 모양·í…스트 í† í°ë§Œ ì •í•œë‹¤.
========================================================================== */
.thumb-item--dyn {
border-radius: 12px;
overflow: hidden;
border: 0.4px solid rgba(0, 0, 0, 0.08);
background: #fff;
/* 네ì´í‹°ë¸Œ ê°€ìƒ ìŠ¤í¬ë¡¤ — 화면 ë°– 카드는 ë ˆì´ì•„웃/페ì¸íЏ 스킵(긴 ëª©ë¡ ìµœì í™”).
intrinsic-size는 대략ì 카드 높ì´ì´ë©° autoë¼ ì‹¤ì¸¡ 후엔 ì‹¤ì œê°’ì„ ê¸°ì–µí•œë‹¤ */
content-visibility: auto;
contain-intrinsic-size: auto 300px;
}
/* ì´ë¯¸ì§€ ì˜ì—ì˜ ìžì²´ ë¼ìš´ë“œ(ì „ì— ê¸°ë³¸ 8px, 위쪽 규칙) ì œê±° — 카드 루트가 ì´ë¯¸ ë¼ìš´ë“œ+
overflow:hiddenì´ë¼ 안쪽 ë¼ìš´ë“œê°€ 남으면 info 패ë„ê³¼ 만나는 ëª¨ì„œë¦¬ì— í° í‹ˆì´ ë³´ì¸ë‹¤ */
.thumb-item--dyn .thumb-item__media {
border-radius: 0;
}
/* ì´ë¯¸ì§€ → info ì—°ê²° ê·¸ë¼ë°ì´ì…˜(ì´ë¯¸ì§€ 높ì´ì˜ 24%) — ìƒ‰ì€ ì¹´ë“œê°€ ì¸ë¼ì¸ìœ¼ë¡œ 주입 */
.thumb-item__dyn-gradient {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 24%;
pointer-events: none;
}
/* info íŒ¨ë„ â€” ë²¤ë” ê¸°ë³¸ padding(10px)ì„ ê±·ì–´ë‚´ê³ ìƒ‰ 있는 패ë„ì´ ì¹´ë“œ íì„ ê½‰ 채우게 */
.thumb-item--dyn .thumb-item__info {
padding: 0;
}
.thumb-item--dyn .thumb-item__info > .thumb-item__dyn-info {
display: block;
padding: 10px 12px 14px;
background: var(--card-bg, #f0ede8);
transition: background-color 0.3s;
}
/* í…스트 — 피그마 카드 light 변형: ìƒí’ˆëª…/가격 ê²€ì •, ë³´ì¡°(ë¸Œëžœë“œÂ·í• ì¸ìœ¨Â·ì •ê°€) ê²€ì • 60% */
.thumb-item--dyn .product-thumb-brand,
.thumb-item--dyn .product-thumb-rate,
.thumb-item--dyn .product-thumb-origin-price {
color: rgba(0, 0, 0, 0.6);
}
/* 벤ë”ê°€ ìƒí’ˆëª… ë‚´ë¶€(-product-name)와 가격(em)ì— ìƒ‰ì„ ë”°ë¡œ ì§€ì •í•´ 둬서 ê·¸ ì„ íƒìžê¹Œì§€ ë®ëŠ”ë‹¤ */
.thumb-item--dyn .product-thumb-title,
.thumb-item--dyn .product-thumb-title-product-name,
.thumb-item--dyn .product-thumb-price-info,
.thumb-item--dyn .product-thumb-price,
.thumb-item--dyn .product-thumb-unit {
color: #000000;
}
/* ë‹¤í¬ ì¹´ë“œ(v2.2 ì§™ì€ìƒ‰) — í° í…스트 */
.thumb-item--dyn-dark .product-thumb-brand,
.thumb-item--dyn-dark .product-thumb-rate,
.thumb-item--dyn-dark .product-thumb-origin-price {
color: rgba(255, 255, 255, 0.6);
}
.thumb-item--dyn-dark .product-thumb-title,
.thumb-item--dyn-dark .product-thumb-title-product-name,
.thumb-item--dyn-dark .product-thumb-price-info,
.thumb-item--dyn-dark .product-thumb-price,
.thumb-item--dyn-dark .product-thumb-unit {
color: #ffffff;
}
/* 아코디언 화살표 íšŒì „ ì• ë‹ˆë©”ì´ì…˜ — 벤ë”는 transformë§Œ ìžˆê³ transitionì´ ì—†ì–´ 딱딱 ëŠê¸´ë‹¤.
useAccordionAnimationì´ ì—¬ë‹«ëŠ” ë™ì•ˆ 붙여주는 data-accordion-open으로 ë°©í–¥ì„ ë¨¼ì € ëŒë ¤ì„œ,
ë†’ì´ ì• ë‹ˆë©”ì´ì…˜(250ms)ì´ ë나기를 기다리지 ì•Šê³ í´ë¦ 즉시 화살표가 ë”°ë¼ ëˆë‹¤. */
.accordion__title::after {
transition: transform 0.2s ease-out;
}
.accordion[data-accordion-open='true'] .accordion__title::after {
transform: translateY(-50%) rotate(-90deg);
}
.accordion[data-accordion-open='false'] .accordion__title::after {
transform: translateY(-50%) rotate(90deg);
}
/* ì¹´í…Œê³ ë¦¬ 페ì´ì§€ ë ˆì´ì•„웃 — Figma 5218-33971 기준.
CategoryBrowse(/category) 페ì´ì§€ ì „ìš© — DisplayCategoryList/CategoryDisplayListê°€
쓰는 widgets/CategoryMenu ê´€ë ¨ 스타ì¼(ì¹´í…Œê³ ë¦¬ ìƒì„¸ ìƒë‹¨ ì•„ì´ì½˜ 그리드/í•„í„°íƒ)ì€
CategoryMenu.css 등 ìœ„ì ¯ì— ì½œë¡œì¼€ì´ì…˜ë¨. .category-content는 ì´ íŒŒì¼ì˜ 우측
콘í…ì¸ ë ˆì´ì•„웃 컨테ì´ë„ˆ ì „ìš©ì´ë©°, widgets/CategoryMenu/CategoryContent.tsxì˜
ê´€ë¦¬ìž ë“±ë¡ ì½˜í…ì¸ ì˜ì—ì€ ì´ë¦„ì´ ê°™ì•„ ë³´ì´ì§€ë§Œ 별개(category-menu__content)다 */
/* 다른 페ì´ì§€ì™€ ë™ì¼í•˜ê²Œ 문서 스í¬ë¡¤ 사용 — 좌측 íƒë§Œ sticky로 ê³ ì • */
.category-layout {
display: flex;
align-items: flex-start;
}
/* 좌측 사ì´ë“œë°” íƒ â€” sticky로 ê³ ì •, topì€ ê³µí†µ í—¤ë” ë†’ì´ë§Œí¼ 오프셋 */
/* Figma 스펙(노드 5218-33971 CategoryTabGroup)ì—서 사ì´ë“œë°” ë°°ê²½ì´ íƒ ê°œìˆ˜ì™€ 무관하게
콘í…ì¸ ì˜ì— 높ì´(ë·°í¬íЏ)ë§Œí¼ í•ìƒ ì±„ì›Œì§€ë¯€ë¡œ, min-height로 ë°°ê²½ì´ íƒ ì•„ëž˜ê¹Œì§€ ì´ì–´ì§€ê²Œ 함.
하단 ê³ ì • GNBë§Œí¼ì€ 빼야 ì‹¤ì œ ë³´ì´ëŠ” ì˜ì—ê³¼ ë§žê³ , sticky ë²”ìœ„ë„ ë¶ˆí•„ìš”í•˜ê²Œ 줄지 않ìŒ.
--header-height / --bottom-nav-height는 style.css :rootì—서 공통으로 관리 */
.category-sidebar {
width: 100px;
min-width: 100px;
min-height: calc(100dvh - var(--header-height) - var(--bottom-nav-height) - env(safe-area-inset-bottom, 0px));
background-color: #fafafa;
display: flex;
flex-direction: column;
position: sticky;
top: var(--header-height);
}
/* Figma CategoryPage/CategoryTab(5218:37283) — ë¼ë²¨ 14px, 좌측 ì •ë ¬(pad-left 12),
비활성 #9B9B9B */
.category-sidebar__tab {
display: flex;
align-items: center;
justify-content: flex-start;
width: 100%;
min-height: 52px;
padding: 8px 8px 8px 12px;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
background-color: #fafafa;
text-decoration: none;
text-align: left;
word-break: keep-all;
line-height: 1.3;
box-sizing: border-box;
}
.category-sidebar__tab.is-active {
background-color: #ffffff;
font-weight: 600;
color: #1a1a1a;
}
/* 우측 콘í…ì¸ ì˜ì—. min-width:0ì´ ì—†ìœ¼ë©´ flex ì•„ì´í…œ 기본값(min-width:auto)ì´ ì ìš©ë˜ì–´,
í•˜ìœ„ì— white-space:nowrapì¸ í…스트가 있으면(ì˜ˆì „ category-campaign-banner__title) ê·¸ í…스트ì˜
최소 í(min-content)ë§Œí¼ ì´ ì˜ì—ì´ ê°•ì œë¡œ ë„“ì–´ì ¸ 사ì´ë“œë°” 옆으로 í™”ë©´ì´ ë°€ë ¤ë‚œë‹¤(기íšì „
ì œëª©ì´ ê¸¸ 때 ì‹¤ì œë¡œ ë°œìƒ í™•ì¸, 2026-08-10). min-width:0으로 min-content ê°•ì œ í™•ìž¥ì„ ë„ë©´
flex:1ì´ ì›ëž˜ ì˜ë„대로 ë‚¨ì€ ê³µê°„ê¹Œì§€ë§Œ ì°¨ì§€í•˜ê³ , ê·¸ 안ì—서 titleì˜ ellipsisë„ ì •ìƒ ë™ìž‘한다. */
.category-content {
flex: 1;
min-width: 0;
background-color: #ffffff;
}
/* ì¹´í…Œê³ ë¦¬ í—¤ë” (타ì´í‹€ + 화살표). Figma(CategoryHeader ì¸ìŠ¤í„´ìŠ¤)는 화살표가
í–‰ ëì´ ì•„ë‹ˆë¼ íƒ€ì´í‹€ 바로 옆(4px gap)ì— ë¶™ëŠ” packed ë ˆì´ì•„웃 */
.category-header {
display: flex;
align-items: center;
gap: 4px;
padding: 0 16px;
height: 48px;
}
.category-header__title {
font-size: 16px;
font-weight: 600;
color: #1a1a1a;
}
.category-header__icon {
color: #9a9a9a;
display: flex;
align-items: center;
}
/* 하위 ì¹´í…Œê³ ë¦¬ 3ì—´ 그리드 — Figma CategoryPage/Category/ItemGrid:
í–‰ ê°„ gap 20 / 가로 gap 12 / 좌우 ì¸ì…‹ 16 / pad-bottom 28 +
하단 1px #F5F5F5 êµ¬ë¶„ì„ */
.category-item-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px 12px;
padding: 0 16px 28px;
border-bottom: 1px solid #f5f5f5;
}
/* ì•„ì´í…œ 68×86 = ì´ë¯¸ì§€ 68 + ë¼ë²¨ 18, 간격 0 (Figma) */
.category-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 0;
text-decoration: none;
}
/* ì¹´í…Œê³ ë¦¬ ìƒì„¸ 페ì´ì§€ ìƒë‹¨ ì•„ì´ì½˜ 그리드(CategoryIconGrid)ì—서 현재 ë³´ê³ ìžˆëŠ”
하위 ì¹´í…Œê³ ë¦¬ë¥¼ 표시 — /category ì „ì²´ 그리드ì—서는 ì“°ì´ì§€ 않ìŒ(활성 ê°œë…ì´ ì—†ìŒ) */
.category-item.is-active .category-item__label {
font-weight: 700;
color: #1a1a1a;
}
.category-item__img {
width: 68px;
height: 68px;
object-fit: fill;
border-radius: 4px;
}
.category-item__img--placeholder {
width: 68px;
height: 68px;
border-radius: 4px;
background-color: #f0f0f0;
display: flex;
align-items: center;
justify-content: center;
}
/* Figma CategoryItemLabel — 14px/500/lh18/#404040, ì´ë¯¸ì§€-ë¼ë²¨ 간격 0 */
.category-item__label {
margin-top: 0;
font-size: 14px;
font-weight: 500;
color: #404040;
text-align: center;
word-break: keep-all;
line-height: 18px;
}
/* ── 기íšì „ ëª¨ìŒ (맨 아래 ì •ì íƒ) — Figma 5218:36704 ── */
.category-header--link {
text-decoration: none;
cursor: pointer;
}
/* 맨 마지막 섹션ì´ë¼ 콘í…ì¸ ê°€ ë·°í¬íŠ¸ë³´ë‹¤ 짧으면 íƒ í´ë¦ 스í¬ë¡¤ì´ 문서 ëì—서 막혀
í—¤ë” ì•„ëž˜ë¡œ ì™„ì „ížˆ 못 올ë¼ì˜´ — min-height로 부족한 ë§Œí¼ë§Œ ìžë™ìœ¼ë¡œ 채운다.
콘í…ì¸ ê°€ ì´ë¯¸ ë” ê¸¸ë©´(기íšì „ 개수가 늘어난 경우) min-height는 아무 ì˜í–¥ì´ 없어
불필요한 빈 ê³µê°„ì´ ë‚¨ì§€ 않는다. .header/.bottom-nav 둘 다 position:stickyë¼
fixed처럼 겹치는 게 ì•„ë‹ˆë¼ ì‹¤ì œ 문서 í름 ê³µê°„ì„ ì°¨ì§€í•˜ë¯€ë¡œ 둘 다 빼야 한다 —
.category-sidebarì˜ min-height ê³µì‹ê³¼ ë™ì¼(--header-heightë§Œ ëºë‹¤ê°€ .bottom-nav
높ì´ë§Œí¼ 스í¬ë¡¤ì´ ë” ë‚´ë ¤ê°€ëŠ” ë¬¸ì œê°€ 있어서 맞춤) */
.category-campaign-section {
min-height: calc(100dvh - var(--header-height) - var(--bottom-nav-height) - env(safe-area-inset-bottom, 0px));
box-sizing: border-box;
}
.category-campaign-list {
display: flex;
flex-direction: column;
gap: 12px;
padding: 0 16px 16px;
}
/* Figma 5218:36704 — TextAreaê°€ 카드 세로 중앙(ë†’ì´ 68, ìƒí•˜ 16px 여백)ì— ì˜¤ë„ë¡
flex center. í…스트가 2줄로 ëŠ˜ì–´ë„ ì¤‘ì•™ ì •ë ¬ì´ ìœ ì§€ëœë‹¤(ì´ë¯¸ì§€ëŠ” absoluteë¼ ë¬´ê´€) */
.category-campaign-banner {
position: relative;
display: flex;
align-items: center;
/* ì–´ë“œë¯¼ì´ labelì— ì¤„ë°”ê¿ˆì„ ë„£ìœ¼ë©´ ì œëª©ì´ 2ì¤„ì´ ë˜ì–´ ë‚´ìš© 높ì´ê°€ 100px를 넘는다(ì œëª© 48 +
캡션 26 + 패딩 32 = 106). ê³ ì • 높ì´ë¡œ ë‘ë©´ overflow:hiddenì— ìž˜ë ¤ì„œ 최소 높ì´ë¡œ 바꿨다. */
min-height: 100px;
border-radius: 8px;
overflow: hidden;
background-color: #ffffff;
text-decoration: none;
}
/* object-fit:cover는 넘치는 ë¶€ë¶„ì„ ìž˜ë¼ë‚´ëŠ” ë°©ì‹ì´ë¼ ì •ì‚¬ê° ì´ë¯¸ì§€ë¥¼ 와ì´ë“œ 배너ì—
채울 때 위아래가 í¬ê²Œ ìž˜ë ¤ë‚˜ê° â€” 잘ë¼ë‚´ì§€ ì•Šê³ ê°€ë¡œ/세로 100%ì— ê·¸ëŒ€ë¡œ ë§žì¶° 채움 */
.category-campaign-banner__img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: fill;
}
.category-campaign-banner__text {
position: relative;
display: flex;
flex-direction: column;
max-width: 70%;
padding: 16px;
box-sizing: border-box;
}
.category-campaign-banner__tag {
font-size: 13px;
font-weight: 400;
line-height: 18px;
color: #1a1a1a;
}
.category-campaign-banner__title {
margin: 0;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #1a1a1a;
/* ì–´ë“œë¯¼ì´ labelì— ìž…ë ¥í•œ 줄바꿈(\n → useMainEventsì—서 ì‹¤ì œ 개행으로 ì •ê·œí™”)ì„ ê·¸ëŒ€ë¡œ
ë°˜ì˜í•œë‹¤. ë©”ì¸ ê¸°íšì „ 카드(campaign-card__headline)와 ê°™ì€ ë°©ì‹.
줄바꿈 ì—†ì´ ì•„ì£¼ 긴 ì œëª©ì´ ì¹´ë“œë¥¼ 늘리지 않ë„ë¡ 2줄ì—서 ë§ì¤„임한다(기존 nowrap+ellipsisê°€
í•˜ë˜ ë°©ì–´ ì—í• ). */
white-space: pre-line;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.category-campaign-banner__caption {
margin-top: 8px;
font-size: 12px;
font-weight: 400;
line-height: 18px;
color: #404040;
}
/* ── PL-002 ë¼ì´í”„ìŠ¤íƒ€ì¼ ì¹´í…Œê³ ë¦¬ 배너 (widgets/categoryMenu/LifestyleCategoryBanner)
— Figma 5295:27014~27039. 360×160, bg #F0F4FE, í…스트 좌 20/ìƒ 24 ── */
.lifestyle-category-banner {
position: relative;
width: 100%;
height: 160px;
background-color: #f0f4fe;
overflow: hidden;
}
.lifestyle-category-banner__text {
position: absolute;
top: 24px;
left: 20px;
display: flex;
flex-direction: column;
gap: 4px;
}
/* 헤드카피 — Figma 20/600/lh30/-0.01em/#1A1A1A */
.lifestyle-category-banner__title {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 20px;
font-weight: 600;
line-height: 30px;
letter-spacing: -0.01em;
color: #1a1a1a;
white-space: pre-line;
}
/* 서브카피 — Figma 13/400/lh18/0.02em/#404040 */
.lifestyle-category-banner__subtitle {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #404040;
white-space: pre-line;
}
/* ê³µì§€ì‚¬í• ëª©ë¡ â€” Figma CS-001_공지사í•목ë¡(5295:27045) */
.notice {
background-color: #ffffff;
}
.notice__list {
margin: 0;
padding: 0 16px 20px;
list-style: none;
}
/* ë²¤ë” ê¸°ë³¸ .notice__list li{padding:1.45rem 1.5rem 1.5rem;border-bottom:...}ê°€
태그 ê²°í•© ì„ íƒìž(타입+í´ëž˜ìФ)ë¼ ëª…ì‹œì„±ì´ .notice__list-item 한 í´ëž˜ìŠ¤ë³´ë‹¤ 높아
패딩/ë³´ë” ì¼ë¶€ê°€ ê³„ì† ìƒˆì–´ ë‚˜ì™”ìŒ â€” .notice__list 아래로 한 단계 ë” ë¬¶ì–´ì„œ 명시성ì„
ì˜¬ë ¤ì•¼ 확실히 ë®ì–´ì¨ì§(ê°’ ìžì²´ë¥¼ !important ì—†ì´ ì´ê¸°ë ¤ë©´ ì´ ë°©ë²•ì´ ì•ˆì „).
Figma NoticeCard(5295:27048)는 individualStrokeWeights가 top/right/left:0,
bottom:1ì´ë¼ ì‹¤ì œë¡œëŠ” 아래쪽 êµ¬ë¶„ì„ í•˜ë‚˜ë¿ â€” 좌우/위 ë³´ë”는 ì—†ìŒ */
.notice__list .notice__list-item {
padding: 0;
border-bottom: 1px solid #e6e6e6;
}
.notice__list-button {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
width: 100%;
padding: 20px 0;
border: none;
background: none;
text-align: left;
}
.notice__text-area {
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
}
/* ë²¤ë” ê¸°ë³¸ .notice__tit{display:-webkit-box;-webkit-line-clamp:2;margin-top:.6rem;
line-height:1.52 등}ê°€ ê°™ì€ í´ëž˜ìŠ¤ë¼ ëª…ì‹œì„±ì´ ê°™ì•„ì„œ, 겹치지 않는 ì†ì„±(margin-top/
display/line-height 등)ì€ ê³„ì† ë‚¨ì•„ìžˆì—ˆìŒ â€” Figma는 줄 ì œí•œ ì—†ì´ ê·¸ëŒ€ë¡œ 줄바꿈ë˜ëŠ”
í…ìŠ¤íŠ¸ë¼ ì „ë¶€ 명시ì 으로 리셋 */
.notice__tit {
display: block;
overflow: visible;
margin-top: 0;
-webkit-line-clamp: unset;
-webkit-box-orient: unset;
letter-spacing: normal;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
line-height: 1.5;
color: #404040;
}
.notice__date {
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
line-height: 1.5;
color: #9b9b9b;
}
.notice__chevron {
flex-shrink: 0;
}
/* ê³µì§€ì‚¬í• ìƒì„¸ — Figma CS-008_세부공지사í•(5295:29013), ëª¨ë‹¬ì´ ì•„ë‹ˆë¼ /notice/:postNo 페ì´ì§€ */
.notice-detail {
display: flex;
flex-direction: column;
background-color: #ffffff;
}
.notice-detail__head {
display: flex;
flex-direction: column;
gap: 8px;
padding: 20px 16px;
/* Figma HeadTitle — individualStrokeWeights bottom:1(#E6E6E6)ë§Œ 있는 하단 êµ¬ë¶„ì„ */
border-bottom: 1px solid #e6e6e6;
}
.notice-detail__title {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 17px;
font-weight: 600;
color: #404040;
}
.notice-detail__date {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 12px;
font-weight: 400;
color: #9b9b9b;
}
/* 본문 ê¸°ë³¸ê°’ì€ Figma BodyTextContainer(14px/500/lh18) — ì‹¤ì œ 콘í…ì¸ ëŠ” 어드민 ì—디터
HTMLì´ë¼ ìžì²´ ì¸ë¼ì¸ 스타ì¼ì´ 있으면 ê·¸ìª½ì´ ì´ê¹€(기본값만 맞춰둔다) */
.notice-detail__content {
padding: 20px 16px 80px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 18px;
color: #404040;
}
.notice-detail__list-button {
align-self: center;
height: 40px;
margin-bottom: 20px;
padding: 0 20px;
border: none;
border-radius: 8px;
background-color: #f0f4fe;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
color: #3c56d6;
}
/* 주문 ìƒì„¸ë‚´ì— 페ì´ì§€(OrderDetail) — Figma OR-004_주문ìƒì„¸ë‚´ì—(5850:31048 등).
지금까지 ì „í˜€ ì†ëŒ€ì§€ 않아 ë²¤ë” ê¸°ë³¸ ë””ìžì¸(진한 네ì´ë¹„ í—¤ë”, í…Œë‘리 없는 회색 박스,
Montserrat 계열 여백)ì´ ê·¸ëŒ€ë¡œ 노출ë˜ê³ ìžˆì—ˆìŒ â€” Cart/OrderSheet와 ë™ì¼í•œ ë°©ì‹ìœ¼ë¡œ
Figma 카드 스펙(í° ë°°ê²½, padding 16px)으로 êµì²´í•œë‹¤. */
.order-detail .l-panel {
margin-bottom: 0;
padding: 16px 16px 20px;
border: none;
box-shadow: none;
background-color: #fff;
}
/* Figma General/Divider(5850:30893/30913/30923) — 섹션 ì‚¬ì´ 8px ë†’ì´ #fafafa 구간.
PriceListContainer(ê²°ì œ ì •ë³´) ë’¤ 버튼/안내 ì˜ì— 앞ì—는 ì´ ì—¬ë°±ì´ ì—†ì–´ì„œ(8ê°œ ìƒíƒœ
ì „ë¶€ 확ì¸) ì¸ì ‘ í˜•ì œ ì„ íƒìžë¡œ "바로 ì•žì— ë‹¤ë¥¸ ì„¹ì…˜ì´ ìžˆì„ ë•Œ"ë§Œ ë¶™ì¸ë‹¤ */
.order-detail__delivery-info-list + .l-panel,
.order-detail .l-panel + .l-panel {
border-top: 8px solid #fafafa;
}
/* 최ìƒë‹¨ 브랜드 블루 ë°”(Figma PaymentHead)는 í—¤ë”보다 ìœ„ì— ìžˆì–´ì•¼ 해서
.top-color-bar(hasTopColorBar ë ˆì´ì•„웃 ìƒíƒœ, Layout.tsxê°€ Header ì•žì— ë Œë”ë§)로
옮겼다 — _layout.css ì°¸ê³ */
/* ëª¨ë“ ì„¹ì…˜ì´ ê³µìœ í•˜ëŠ” ì œëª© — Figma SectionTitle/HeadLabel(16/600/#1a1a1a).
벤ë”ê°€ ì´ í´ëž˜ìŠ¤ì— ìžì²´ padding:20px(ì „ë°©í–¥) + border-bottomì„ ê°–ê³ ìžˆì–´ì„œ,
ì´ë¯¸ 16px íŒ¨ë”©ì´ ìžˆëŠ” 부모(.l-panel)와 ê²¹ì³ ì¢Œìš° 36px로 ì´ì¤‘ 들여쓰기 ë˜ê³
ìžˆì—ˆê³ Figmaì—는 없는 êµ¬ë¶„ì„ ê¹Œì§€ 타ì´í‹€ ë°‘ì— ê·¸ë ¤ì§€ê³ ìžˆì—ˆìŒ */
.order-detail-info__item-title {
margin: 0 0 16px;
padding: 0;
border-bottom: none;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
color: #1a1a1a;
}
/* ── ìƒë‹¨ 주문번호 ë°” — ë²¤ë” ê¸°ë³¸ê°’(진한 네ì´ë¹„ #3f434c ë°°ê²½, í° í…스트)ì„ ê±·ì–´ë‚´ê³
Figma DeliveryInfoList 톤(í° ë°°ê²½, 회색 ë¼ë²¨/진한 ê°’ í…스트)으로 êµì²´ ── */
.order-no-label {
display: flex;
align-items: center;
justify-content: space-between;
padding: 16px;
background-color: #ffffff;
border-bottom: 1px solid #e6e6e6;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
}
.order-no-label__no {
margin-left: 8px;
color: #404040;
}
/* Figma OR-004_주문ìƒì„¸ë‚´ì—_ìƒí’ˆì¤€ë¹„중(5850:30960) — "ì „ì²´ 취소"는 주문번호 옆ì´
ì•„ë‹ˆë¼ íŽ˜ì´ì§€ ìµœí•˜ë‹¨ì— ì „ì²´ë„ˆë¹„ 버튼으로 노출ëœë‹¤("ëª©ë¡ ë³´ê¸°"는 Figmaì— ì—†ëŠ”
문구였ìŒ). í†¤ì€ êµ¬í˜• 하단 CTA(í° ë°°ê²½/ë ˆë“œ í…Œë‘리/ë ˆë“œ í…스트) 스펙 그대로 —
ì² íšŒ(WITHDRAW_*) 버튼과 ê°™ì€ íŒŒê´´ì 톤(카드 안 "ìƒí’ˆ 취소하기"는 ì‹ í˜•ì—서 연블루) */
.order-detail__list-btn-wrap .order-detail__cancel-all-btn {
width: 100%;
height: 52px;
border: 1px solid #ff9698;
border-radius: 8px;
background-color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
color: #d40105;
cursor: pointer;
}
/* ── 주문 ìƒí’ˆ — Figma OrderProductSectionê³¼ ë™ì¼ 패턴(OrderSheet OrderProductTable ì°¸ê³ ) ── */
.order-detail__product-table .thumb-LIST {
display: flex;
flex-direction: column;
gap: 16px;
}
/* Figma ì‹ í˜• ë¦¬ë¹„ì „(7770:40898) ProductStatusCard — ìƒí’ˆë§ˆë‹¤ r12/#E6E6E6 1px ë³´ë” ì¹´ë“œë¡œ
ê°ì‹¸ê³ , 카드 ì•ˆì— ìƒíƒœ ë°°ì§€/ìƒí’ˆ ì •ë³´/íƒë°°ì‚¬Â·ì†¡ìž¥ í–‰/ë²„íŠ¼ì„ í•¨ê»˜ 담는다
(구형처럼 카드 ë³´ë” ì—†ì´ í”Œëž«í•˜ê²Œ 나열하지 않ìŒ) */
.order-detail__product {
display: flex;
flex-direction: column;
gap: 12px;
padding: 12px;
border: 1px solid #e6e6e6;
border-radius: 12px;
background-color: #fff;
}
/* 카드 안 ìƒíƒœ ë°°ì§€ ëž˜í¼ â€” ë°°ì§€(span)ê°€ 줄 ì „ì²´ë¡œ 늘어나지 않게 ë¸”ë¡ ì—¬ë°±ë§Œ 리셋 */
.order-detail__product-status {
margin: 0;
}
/* ìƒí’ˆ ì´ë¯¸ì§€ — Figma ImageContainer(7298:44019) 72x72/radius 4pxì¸ë°, OrderSheetì—”
ì´ë¯¸ ê°™ì€ ìŠ¤ì½”í”„ 규칙(.order-sheet .thumb-item__media)ì´ ìžˆì–´ ì ìš©ë˜ì§€ë§Œ OrderDetailì—”
없어서 ë²¤ë” ê¸°ë³¸ê°’(84x84/radius 8px)ì´ ê·¸ëŒ€ë¡œ 노출ë˜ê³ ìžˆì—ˆìŒ */
.order-detail__product-table .thumb-item__media {
width: 72px;
height: 72px;
border-radius: 4px;
box-sizing: border-box;
}
/* ì´ë¯¸ì§€-ì •ë³´ ì˜ì— 가로 간격 — Figma OrderProductContainer(7298:44018) itemSpacing 12pxì¸ë°
ë²¤ë” .thumb-item__info ê¸°ë³¸ê°’ì´ padding-left:20pxë¼ ì‹¤ì œë¡œëŠ” 20px로 ë” ë²Œì–´ì ¸ 있었ìŒ
(2026-08-11 실측으로 확ì¸) */
.order-detail__product-table .thumb-item__info {
padding-left: 12px;
}
/* ìƒí’ˆëª… — Figma ProductName(7298:44022) 14px/weight 500/letter-spacing 2%/line-height
18px(ë²¤ë” ê¸°ë³¸ì€ weight 400, letter-spacing/line-height ë¯¸ì§€ì •) */
.order-detail__product-table .product-thumb-item__name .editor {
font-weight: 500;
line-height: 18px;
letter-spacing: 0.02em;
}
/* 옵션/수량 줄 — Figma ì‹ í˜•(7770:40898) "옵션: 기본 1ê°œ" 13px/400/line-height 16px/#9B9B9B.
ë²¤ë” OptionLabel ëŒ€ì‹ OrderDetailProductTableì˜ OrderOptionLineì´ ì§ì ‘ 그린다 */
.order-detail__product-option p {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 16px;
color: #9b9b9b;
}
/* 가격 — Figma ì‹ í˜•(7770:40898) SalePrice 16px/weight 600/#1a1a1a/line-height 19px.
(14px는 구형 7298:44038 실측값ì´ì—ˆìŒ — ì‹ í˜• 재실측으로 16px ë³µì›, 2026-08-14) */
.order-detail__product-table .product-thumb-item__amount li:last-child {
font-size: 16px;
font-weight: 600;
line-height: 19px;
letter-spacing: 0;
color: #1a1a1a;
}
/* 벤ë”ê°€ ì´ í´ëž˜ìŠ¤ì— ìžì²´ 스타ì¼(--empty-color ë°°ê²½ + ë§í’ì„ ëª¨ì–‘ radius + 12px 회색
í…스트)ì„ ì´ë¯¸ ê°–ê³ ìžˆì–´ì„œ, ë°°ê²½/여백/í°íŠ¸ë¥¼ 명시ì 으로 리셋하지 않으면 안쪽ì˜
ìƒíƒœ ë°°ì§€(.order-detail__status-label)ê°€ ì´ ë„“ì€ íšŒìƒ‰ 박스 ìœ„ì— ì–¹ížŒ 것처럼 ë³´ì˜€ìŒ */
.order-detail__product-top-label {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
margin: 0;
padding: 0;
border-radius: 0;
background-color: transparent;
}
/* Figma DeliveryState/Badge(8ê°œ ìƒíƒœ) — 3가지 톤: 준비중·진행중(파랑, 기본값)/
완료(ì´ˆë¡)/취소·반품·êµí™˜(회색). 톤 í´ëž˜ìŠ¤ëŠ” OrderDetailProductTable.tsxì˜
getStatusToneì´ ì‹¤ì œ ë¼ë²¨ 문구를 ë³´ê³ ê³„ì‚°í•œë‹¤ */
.order-detail__status-label {
/* Figma ë°°ì§€ ë†’ì´ 24 = í…스트 lh16 + ìƒí•˜ 4px */
padding: 4px 8px;
border-radius: 4px;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 600;
line-height: 16px;
}
.order-detail__status-label--blue {
background-color: #f1f4fd;
color: #303ec5;
}
.order-detail__status-label--green {
background-color: #e5f6ea;
/* Figma 실측값 #009143 (구형 44282Â·ì‹ í˜• 7770 ë™ì¼) */
color: #009143;
}
.order-detail__status-label--gray {
background-color: #d3d3d3;
color: #404040;
}
/* íƒë°°ì‚¬/송장번호 í–‰ — Figma ì‹ í˜•(7770:40898) ShippingInfoRow: 좌측 "íƒë°°ì‚¬ 송장번호"
(10/500/#9B9B9B), 우측 "배송 조회"(10/400/#9B9B9B) ì–‘ë 배치 */
.order-detail__delivery-info {
display: flex;
flex: 1;
align-items: center;
justify-content: space-between;
gap: 8px;
font-family: Pretendard, sans-serif;
font-size: 10px;
font-weight: 500;
color: #9b9b9b;
}
/* "배송 조회"(NextActionButtonì´ ê·¸ë¦¬ëŠ” 버튼) — í…스트 ë§í¬ 모양으로 리셋 */
.order-detail__delivery-info .btn--view_delivery {
padding: 0;
border: none;
background: none;
font-family: Pretendard, sans-serif;
font-size: 10px;
font-weight: 400;
color: #9b9b9b;
cursor: pointer;
}
/* Figma Button/CTAArea — 버튼 1ê°œ(ìƒí’ˆ 취소하기 ë‹¨ë… ë“±)ì¼ ë• ì¹´ë“œ í ì „ì²´ë¥¼, 2ê°œ
(배송완료: êµí™˜â‹…반품 ì‹ ì² + 구매 í™•ì •)ì¼ ë• ì ˆë°˜ì”© 차지한다. flex:1 하나로
ë‘ ê²½ìš° ëª¨ë‘ ìžì—°ìŠ¤ëŸ½ê²Œ 대ì‘.
í¬ê¸°ëŠ” ì‹ í˜• ë¦¬ë¹„ì „(7770:40898) ProductStatusCard 실측 — ë†’ì´ 48px/í°íЏ 15px
(구형 7298:43997ì€ 52px/16pxì˜€ê³ ì´ì „ êµ¬í˜„ì´ ê·¸ê±¸ ë”°ë¥´ê³ ìžˆì—ˆìŒ) */
.order-detail__next-action-btns {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.order-detail__next-action-btns button {
flex: 1;
min-width: 0;
height: 48px;
padding: 12px 20px;
border: none;
border-radius: 8px;
font-family: Pretendard, sans-serif;
font-size: 15px;
font-weight: 500;
cursor: pointer;
}
/* 기본(세컨ë”리) 톤 — Figma "êµí™˜ â‹… 반품 ì‹ ì²"(연한 블루 ë°°ê²½/블루 í…스트).
Figmaì— ì—†ëŠ” ì•¡ì…˜(리뷰 작성 등)ë„ ìœ„í—˜í•˜ì§€ ì•Šì€ ì¼ë°˜ ì•¡ì…˜ì´ë¼ ì´ í†¤ì„ ê¸°ë³¸ê°’ìœ¼ë¡œ 둔다 */
.order-detail__next-action-btns button {
background-color: #f0f4fe;
color: #3c56d6;
}
/* 프ë¼ì´ë¨¸ë¦¬ 톤 — Figma "구매 í™•ì •"(브랜드 블루/í° í…스트), ìœ ì¼í•˜ê²Œ ê°•ì¡°ë˜ëŠ” ì•¡ì…˜ */
.order-detail__next-action-btns .btn--confirm_order {
background-color: #4a69ea;
color: #ffffff;
font-weight: 600;
}
/* 카드 안 "ìƒí’ˆ 취소하기"(CANCEL) — ì‹ í˜• ë¦¬ë¹„ì „(7770:40898) 실측: 연블루 ë°°ê²½(#f0f4fe)
+ í…스트 #4a69ea. êµí™˜Â·ë°˜í’ˆ(#3c56d6)ê³¼ 미묘하게 다른 í…스트 ìƒ‰ì´ Figmaì— ê·¸ëŒ€ë¡œ
ì°í˜€ 있어 ì‹¤ì¸¡ê°’ì„ ë”°ë¥¸ë‹¤. ë ˆë“œ 파괴ì í†¤ì€ êµ¬í˜•(7298:43997) 하단 CTA 스펙ì´ë¼
카드 안 버튼ì—는 ì“°ì§€ 않는다 */
.order-detail__next-action-btns .btn--cancel {
color: #4a69ea;
}
/* "êµí™˜ · 반품 ì‹ ì²" 통합 버튼(ì‹ í˜• 7770:40898 배송완료 카드) — 세컨ë”리 톤과 ë™ì¼.
위 기본 규칙(.order-detail__next-action-btns button)ì´ ì´ë¯¸ í¬ê¸°/í†¤ì„ ìž…í˜€ì£¼ë¯€ë¡œ
ì—¬ê¸°ì„ ì¶”ê°€ ì •ì˜ ì—†ìŒ(í´ëž˜ìŠ¤ëŠ” ì‹ë³„ìš©). */
/* 통합 버튼 í´ë¦ 시 êµí™˜/반품 ì„ íƒ ë°”í…€ì‹œíŠ¸ 옵션 — 시트 ì…¸ì€ ê³µìš© BottomSheetê°€ 담당 */
.order-detail__claim-sheet-options {
display: flex;
flex-direction: column;
gap: 8px;
padding: 16px;
}
.order-detail__claim-sheet-options button {
height: 52px;
border: 1px solid #e6e6e6;
border-radius: 8px;
background-color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 15px;
font-weight: 500;
color: #404040;
cursor: pointer;
}
/* 파괴ì 톤 — 구형 Figma 하단 "ìƒí’ˆ 취소하기"(í° ë°°ê²½/연한 ë ˆë“œ í…Œë‘리/ë ˆë“œ í…스트) 스펙.
ì² íšŒ(WITHDRAW_*) ì•¡ì…˜ì€ ì§„í–‰ ì¤‘ì¸ ì‹ ì²ì„ ë˜ëŒë¦¬ëŠ” ë™ìž‘ì´ê³ ì‹ í˜• ì‹œì•ˆì— ë³„ë„ ìŠ¤íŽ™ì´
없어 ì´ í†¤ì„ ìœ ì§€í•œë‹¤ */
.order-detail__next-action-btns .btn--withdraw_cancel,
.order-detail__next-action-btns .btn--withdraw_return,
.order-detail__next-action-btns .btn--withdraw_exchange {
background-color: #ffffff;
border: 1px solid #ff9698;
color: #d40105;
}
/* ── 주문ì¼/주문번호 — Figma DeliveryInfoList(ì‹ í˜• 7770:40898), 행마다
label(#9b9b9b)/value(#404040) 좌우 배치. 송장번호 ê°’ë§Œ 배송조회로 ì´ì–´ì§€ëŠ”
í´ë¦ ìš”ì†Œë¼ í¬ì¸íЏ 컬러(#303ec5) ìœ ì§€.
Figma는 리스트 ìžì²´(DeliveryInfoList)ì—” íŒ¨ë”©ì´ ì—†ê³ ê° í–‰(DeliveryInfoRow)ì´
좌우 16px/ìƒí•˜ 4px íŒ¨ë”©ì„ ê°–ëŠ” 구조ì¸ë°, 반대로 ë¦¬ìŠ¤íŠ¸ì— 12px 16px를 ì£¼ê³ í–‰ì—”
좌우 íŒ¨ë”©ì´ ë¹ ì ¸ìžˆì–´ ìƒí•˜ ì—¬ë°±ì´ ì´ì¤‘으로 ë” í¬ê²Œ ë‚˜ê³ ìžˆì—ˆìŒ. 아래쪽 20px
ì—¬ë°±ì€ DeliveryInfoSection ìžì²´ì˜ paddingBottomì´ë¼ ë¦¬ìŠ¤íŠ¸ì˜ ë§ˆì§€ë§‰ 여백으로 옮김 */
.order-detail__delivery-info-list {
display: flex;
flex-direction: column;
gap: 4px;
margin: 0;
padding: 0 0 20px;
list-style: none;
/* 아래 경계는 8px #fafafa 디바ì´ë”(.l-panel border-top)ë§Œ — Figma General/Dividerì—”
스트로í¬ê°€ 없어(실측) ì˜ˆì „ì— í•¨ê»˜ ê·¸ë¦¬ë˜ 1px #e6e6e6 ì„ ì€ ì œê±° */
}
.order-detail__delivery-info-list li {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 4px 16px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
}
.order-detail__delivery-info-list li > span:first-child {
color: #9b9b9b;
}
.order-detail__delivery-info-list li > span:last-child {
color: #404040;
}
/* ── 배송 안내 — Figma DeliveryNoticeSection(배송준비중/배송중 ìƒíƒœì—서만 노출) ── */
.order-detail__delivery-notice {
padding: 16px;
}
.order-detail__delivery-notice p {
margin: 0;
padding: 12px 20px;
border-radius: 4px;
background-color: #fafafa;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 18px;
color: #404040;
text-align: center;
}
/* ── ì£¼ë¬¸ìž ì •ë³´ / 배송지 — Figma DeliveryInfoSection, Label(#9b9b9b)/Value(#404040) ── */
.order-detail-info dl {
display: flex;
flex-direction: column;
gap: 8px;
margin: 0;
}
.order-detail-info dl > div,
.order-detail-info dl {
font-family: Pretendard, sans-serif;
}
.order-detail-info dt {
display: inline;
margin-right: 12px;
font-size: 14px;
font-weight: 500;
color: #9b9b9b;
}
.order-detail-info dd {
display: inline;
margin: 0;
font-size: 14px;
font-weight: 500;
color: #404040;
}
/* ë²¤ë” aurora.cssì˜ `.order-detail-info dl:not(.price-tag__final-amount) dd{word-break:break-all}`
(ëª…ì‹œë„ 0,2,2)ê°€ 위 규칙(0,1,1)보다 높아서 keep-allì´ ì•ˆ ë¨¹í˜”ìŒ â€” ì£¼ì†Œê°’ì´ ê¸¸ì–´ 줄바꿈ë 때
"우편번호" ê°™ì€ ë‹¨ì–´ê°€ ìŒì ˆ 중간(ìš° / 편번호)ì—서 ëŠê²¨ ë³´ì´ëŠ” ë¬¸ì œë¼, ê°™ì€ ì¡°í•© ì„ íƒìžë¡œ
명시ë„를 맞춰서 ì´ê¸´ë‹¤ */
.order-detail-info dl:not(.price-tag__final-amount) dd {
word-break: keep-all;
}
/* dt/ddê°€ ê°ê° 한 줄씩 í르는 ë²¤ë” dl 기본 구조를 Figma처럼 "ë¼ë²¨ + ê°’" 한 행으로 묶는다 */
.order-detail-info dl {
display: grid;
grid-template-columns: auto 1fr;
row-gap: 8px;
column-gap: 12px;
}
/* ── ê²°ì œì •ë³´ — ê²°ì œìˆ˜ë‹¨ ë¼ë²¨ + 무통장입금 ìƒì„¸ + PriceTag(Cart와 ë™ì¼ ì»´í¬ë„ŒíЏ) ──
벤ë”ê°€ ì´ í´ëž˜ìŠ¤ì— ìžì²´ padding(20px 20px 0)ì„ ê°–ê³ ìžˆì–´, ì´ë¯¸ 16px íŒ¨ë”©ì´ ìžˆëŠ”
부모(.l-panel)와 ê²¹ì³ ì¢Œìš°ê°€ 36px로 ì´ì¤‘ 들여쓰기 ë˜ê³ ìžˆì—ˆìŒ â€” 리셋 */
.order-detail-info__pay-method {
padding: 0;
gap: 0;
}
.order-detail-info__pay-type-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin: 0 0 12px;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
}
.order-detail-info__pay-type-row > span:first-child {
color: #9b9b9b;
}
.order-detail-info__pay-type-row > span:last-child {
color: #404040;
}
.order-detail-info__app-card-info {
margin: 4px 0 0;
font-size: 13px;
font-weight: 400;
color: #9b9b9b;
}
.order-detail-info__pay-method dl {
margin-bottom: 12px;
padding: 12px;
border-radius: 8px;
background-color: #fafafa;
}
.order-detail-info__copy-btn {
width: 100%;
height: 40px;
margin-bottom: 16px;
border: 1px solid #e6e6e6;
border-radius: 8px;
background-color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
color: #404040;
cursor: pointer;
}
/* 가격 í–‰ ìžì²´(.price-info-list__*)는 주문서와 ê³µìœ í•˜ëŠ” entities/order/PriceInfoList
ì»´í¬ë„ŒíŠ¸ê°€ co-located CSS로 ì§ì ‘ 관리한다 — ì´ íŒŒì¼ì—서 관리하지 ì•ŠìŒ */
/* ── 하단 "ì „ì²´ 취소" 버튼 래í¼(canCancelAllì¼ ë•Œë§Œ ë Œë”ë§) ── */
.order-detail__list-btn-wrap {
padding: 16px;
}
/* ReceiptInfo(ê°„ì´ì˜ìˆ˜ì¦/거래명세서/ê²°ì œì˜ìˆ˜ì¦)ë„ ê°™ì€ ëž˜í¼ í´ëž˜ìŠ¤ë¥¼ ìž¬ì‚¬ìš©í•˜ê³ ìžˆì–´,
ì „ì²´ 취소 버튼과 분리ë˜ë„ë¡ receipt-info로 스코프해 기존 스타ì¼ì„ ìœ ì§€í•œë‹¤ */
.order-detail__list-btn-wrap.receipt-info .btn {
width: 100%;
height: 52px;
border-radius: 8px;
background-color: #4a69ea;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
color: #ffffff;
}
/* 기íšì „ ìƒì„¸ 페ì´ì§€(EX-002, EventContents.tsx) ì „ìš© CSS */
/* 히어로 배너 — Figma CampaignBanner(5236:29413) 실측. ì´ë¯¸ì§€ ìœ„ì— ê¸°íšì „ 타ì´í‹€(20px/600)
+서브타ì´í‹€(13px/400)ì„ ì™¼ìª½ ì •ë ¬ë¡œ ì˜¤ë²„ë ˆì´í•œë‹¤. ë²¤ë” ê¸°ë³¸ .event-hero는 width:100%ë§Œ
ìžˆê³ ë†’ì´ëŠ” ì›ë³¸ ì´ë¯¸ì§€ 비율 ê·¸ëŒ€ë¡œë¼ Figmaì˜ ê³ ì • 160px í¬ë¡ 배너와 다름 */
.event-hero-banner {
position: relative;
overflow: hidden;
background-color: #f0f4fe;
}
.event-hero-banner .event-hero {
display: block;
width: 100%;
height: 160px;
object-fit: cover;
}
.event-hero-banner__text {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
justify-content: center;
gap: 4px;
max-width: 200px;
padding-left: 20px;
pointer-events: none;
}
.event-hero-banner__title {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 20px;
font-weight: 600;
line-height: 30px;
letter-spacing: -0.01em;
color: #1a1a1a;
white-space: pre-line;
}
.event-hero-banner__sub-text {
margin: 0;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
line-height: 18px;
letter-spacing: 0.02em;
color: #404040;
/* 타ì´í‹€ê³¼ ë™ì¼ — ì–´ë“œë¯¼ì´ ìž…ë ¥í•œ 줄바꿈(\n)ì„ ê·¸ëŒ€ë¡œ 살린다(EventTopImg.tsx ì°¸ê³ ) */
white-space: pre-line;
}
/* ì „ì‹œ 섹션 íƒ â€” ì‚¬ìš©ìž ìš”ì²ìœ¼ë¡œ ì¹´í…Œê³ ë¦¬ 3ëŽìФ í•„í„°íƒ(Tab/FilterSection,
widgets/categoryMenu/CategoryFilterTabs.css)ê³¼ ë™ì¼í•œ pill 스타ì¼ë¡œ 맞춘다.
ë²¤ë” ê¸°ë³¸ê°’ì€ ì—°íšŒìƒ‰ ë°°ê²½ ë°” ìœ„ì— ì–´ë‘ìš´ pill(활성)ë§Œ 스타ì¼ì´ ìžˆê³ ë¹„í™œì„± 버튼ì€
ìƒ‰ìƒ ì§€ì •ì´ ì•„ì˜ˆ 없어 브ë¼ìš°ì € 기본 버튼 회색으로 보였다 */
.event-nav {
padding: 12px 16px;
background-color: #ffffff;
border: none;
}
.event-nav .swiper-slide {
width: auto;
margin-right: 8px;
}
.event-nav .swiper-slide:last-child {
margin-right: 0;
}
.event-nav__btn {
display: flex;
align-items: center;
height: 32px;
padding: 0 14px;
border: 1px solid #e6e6e6;
border-radius: 999px;
background-color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 600;
color: #9b9b9b;
white-space: nowrap;
}
.event-nav__btn.is-active {
border-color: transparent;
background-color: #202020;
color: #ffffff;
}
/* ── 회ì›íƒˆí‡´ 페ì´ì§€ — Figma CS-005_회ì›íƒˆí‡´(5295:28222) ──
ë²¤ë” aurora.cssì˜ .member-withdrawal 계열(회색 í¼ ë°•ìŠ¤ + ì•„ì´ë”” 필드 + 빨강/남색 버튼)
구조를 ì“°ì§€ ì•Šê³ Figma 구성(ì‚¬ìœ ì²´í¬ë°•스 → ìžìœ ìž…ë ¥ ì˜ê²¬ → ë™ì˜ → ìœ ì˜ì‚¬í• → CTA)으로
재구성한 화면(src/pages/memberWithdrawal/ui/memberWithdrawalContent)ì˜ ì „ìš© 스타ì¼.
ìž¬í™•ì¸ ëª¨ë‹¬ì˜ ë¹¨ê°„ í†¤ì€ _layout.cssì˜ ê³µìš© 패턴(.modal__box--confirm:has(.modal-danger-marker))ì´
담당한다. */
/* ë²¤ë” .member-withdrawal{padding:20px} 리셋 — ê° ì„¹ì…˜ì´ ìžê¸° ëª«ì˜ íŒ¨ë”©ì„ ê°–ëŠ”ë‹¤ */
.member-withdrawal {
padding: 0;
background-color: #ffffff;
}
/* 섹션 타ì´í‹€ — Figma Bar/SectionHeaderBar(17px, pad 12/16, ë”보기 버튼 숨김).
회ì›ì •ë³´ìˆ˜ì •(.member-modification-section-title)ê³¼ ë™ì¼ 스펙 */
.member-withdrawal__section-title {
margin: 0;
padding: 12px 16px 0;
background-color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 17px;
font-weight: 600;
line-height: 26px;
color: #1a1a1a;
}
/* 탈퇴 ì‚¬ìœ ëª©ë¡ â€” Figma WithdrawSurveySection(í–‰ 52px, pad 16, 하단 ë³´ë” #f5f5f5) */
.member-withdrawal__reason-list {
margin: 0;
padding: 4px 0 0;
list-style: none;
}
.member-withdrawal__reason-item {
display: flex;
align-items: center;
height: 52px;
padding: 0 16px;
}
.member-withdrawal__reason-item:not(:last-child) {
border-bottom: 1px solid #f5f5f5;
}
/* ìžìœ ìž…ë ¥ ì˜ê²¬ — Figma WithdrawReasonSection > ReviewBox(328x120, r8, #e6e6e6 ë³´ë”,
í”Œë ˆì´ìŠ¤í™€ë” 14/500/#9b9b9b) */
.member-withdrawal__opinion {
padding: 16px 16px 20px;
}
.member-withdrawal__opinion textarea {
box-sizing: border-box;
width: 100%;
height: 120px;
padding: 12px 16px;
border: 1px solid #e6e6e6;
border-radius: 8px;
background-color: #ffffff;
resize: none;
font-family: Pretendard, sans-serif;
font-size: 14px;
font-weight: 500;
line-height: 18px;
color: #404040;
}
.member-withdrawal__opinion textarea::placeholder {
color: #9b9b9b;
}
/* 8px 회색 ê±°í„° — Figma General/Divider(#fafafa), 다른 마ì´íŽ˜ì´ì§€ 화면들과 ë™ì¼ 스펙 */
.member-withdrawal__divider {
height: 8px;
background-color: #fafafa;
}
/* ë™ì˜ ì˜ì— — Figma AgreementSection: "ë™ì˜í•©ë‹ˆë‹¤" ì²´í¬(ë¼ë²¨ 14/500) + ë³´ì¡° 문구
(13/400/#9b9b9b, ì²´í¬ë°•스 20px + gap 8ë§Œí¼ ë“¤ì—¬ì“°ê¸°) */
.member-withdrawal__agreement {
padding: 16px;
background-color: #ffffff;
}
.member-withdrawal__agreement-sub {
margin: 8px 0 0;
padding-left: 28px;
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
letter-spacing: 0.02em;
line-height: 18px;
color: #9b9b9b;
}
/* ìœ ì˜ì‚¬í• — Figma CautionSection(#fafafa, 타ì´í‹€ 16px + 본문 13/400/#404040).
ë³¸ë¬¸ì€ ì–´ë“œë¯¼ 약관(WITHDRAWAL_GUIDE) HTMLì´ë¼ 컨테ì´ë„ˆì— 기본 타ì´í¬ë§Œ 깔아준다 */
.member-withdrawal__caution {
padding: 20px 16px;
background-color: #fafafa;
}
.member-withdrawal__caution-title {
margin: 0 0 8px;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: #404040;
}
.member-withdrawal__caution-content {
font-family: Pretendard, sans-serif;
font-size: 13px;
font-weight: 400;
letter-spacing: 0.02em;
line-height: 18px;
color: #404040;
}
/* CTA — Figma Button/CTAArea(pad 12/16, 좌 "취소" 160px + 우 "탈퇴하기" 160px, gap 8).
버튼 ìžì²´ 배색(#f0f4fe/#3c56d6, #4a69ea, disabled #e6e6e6/#ababab)ì€ EoshinButtonì´ ë‹´ë‹¹ */
.member-withdrawal__btn-wrap {
display: flex;
gap: 8px;
padding: 12px 16px;
background-color: #ffffff;
}
.member-withdrawal__btn-wrap .eoshin-btn {
flex: 1;
}
/* ── ìƒí’ˆìƒì„¸ 페ì´ì§€ ë²¤ë” ì˜¤ë²„ë¼ì´ë“œ — Figma PD-000(5218:34098) ê°ì‚¬ ê²°ê³¼ ë°˜ì˜ â”€â”€
ì»´í¬ë„ŒíЏ 로컬 CSS(Summary.css/Purchase.css 등)ê°€ ì´ë¯¸ 있는 í•ëª©ì€ ê±°ê¸°ì„œ ì²˜ë¦¬í•˜ê³ ,
여기ì—는 ë²¤ë” ì»¨í…Œì´ë„ˆ í´ëž˜ìФ ìžì²´ë¥¼ ë®ì–´ì•¼ 하는(로컬 파ì¼ì´ 마땅치 않ì€) 것만 둔다 */
/* ProductInfo 섹션 패딩 — Figma ProductInfo(5236:30949) padding: 40px 16px.
ë²¤ë” .product-summary{padding:3.2857rem 1.2857rem}(=46px 18px)ê°€ 그대로 ë‚¨ì•„ìžˆì—ˆìŒ */
.product-summary {
padding: 40px 16px;
}
/* ë°°ì†¡ì •ë³´ ë¼ì¸ — Figma DeliveryInfo(5236:30949): 위·아래 ëª¨ë‘ 1px #E6E6E6
(individualStrokeWeights top:1/bottom:1) + padding 16px 0, 바로 위 PriceArea와ì˜
ê°„ê²©ì€ ProductInfo itemSpacing 20px. ë²¤ë” ê¸°ë³¸(margin-top:2rem; padding-top:1.7rem;
border-top:1px solid #eaeaea)ì€ í•˜ë‹¨ ë³´ë”ê°€ ì—†ê³ ìƒ‰/ì—¬ë°±ì´ ì „ë¶€ 달ëžìŒ */
.product-summary__freight-line {
margin-top: 20px;
padding: 16px 0;
border-top: 1px solid #e6e6e6;
border-bottom: 1px solid #e6e6e6;
}
/* ì´ë¯¸ì§€ ìºëŸ¬ì…€ 페ì´ì§€ë„¤ì´ì…˜ ë„트 — Figma General/Dot: 활성/비활성 ëª¨ë‘ 8x8 ì›í˜•,
활성 #202020 / 비활성 #000000 25%. 벤ë”는 비활성 8x8 #9ea1a8ì— í™œì„±ë§Œ 24x8
알약형(#40444d)ì´ë¼ 모양 ìžì²´ê°€ 달ëžìŒ */
.product-image-slider .swiper-pagination-bullet {
width: 8px;
height: 8px;
border-radius: 50%;
background-color: rgba(0, 0, 0, 0.25);
}
.product-image-slider .swiper-pagination-bullet-active {
width: 8px;
border-radius: 50%;
background: #202020;
}
/* ìƒì„¸ 본문(ìƒí’ˆì •ë³´ íƒ) — Figma ProductDetailSection(5236:30944) padding: 16px 16px 20px.
ëž˜í¼ .product-content__boxì˜ ë²¤ë” íŒ¨ë”©(10px 20px)ì€ ë¦¬ë·°/Q&A íƒì´ ê°ìž ìŒìˆ˜ 마진으로
ìƒì‡„하는 ì „ì œë¼ ê±´ë“œë¦¬ì§€ ì•Šê³ (그쪽 ê·œì¹™ì´ -20px ê³ ì •), DETAIL íƒ ì½˜í…ì¸ ë„ ê°™ì€
ë°©ì‹ìœ¼ë¡œ ëž˜í¼ íŒ¨ë”©ì„ ìƒì‡„한 ë’¤ ìžê¸° 패딩만 갖게 한다. 벤ë”ê°€ ê°™ì€ í´ëž˜ìŠ¤ì— ê±¸ì–´ë‘”
margin-bottom:3.57rem(50px)ë„ ì´ margin 단축 ì†ì„±ìœ¼ë¡œ 함께 ì œê±°ë¨ â€” Figma는 ìƒì„¸
본문과 하단 아코디언 ì‚¬ì´ ì¶”ê°€ ì—¬ë°±ì´ ì—†ìŒ */
.product-detail .product-content__content {
/* ì´ ìš”ì†ŒëŠ” 벤ë”ê°€ .editor í´ëž˜ìŠ¤ë¥¼ 함께 붙여 width:100%ê°€ ê±¸ë ¤ 있다. íì´ autoê°€ 아니면
아래 좌우 ìŒìˆ˜ ë§ˆì§„ì´ ë°•ìŠ¤ë¥¼ 왼쪽으로만 20px ë‹¹ê¸°ê³ íì€ ê·¸ëŒ€ë¡œì—¬ì„œ(ëž˜í¼ íŒ¨ë”©ì„ ëº€ 350px)
ì˜¤ë¥¸ìª½ì— 40pxì´ ë‚¨ê³ ë³¸ë¬¸ì´ ì™¼ìª½ì— ë¶™ëŠ”ë‹¤ — 좌 16px / ìš° 56px. width를 auto로 ë˜ëŒë ¤
ìŒìˆ˜ ë§ˆì§„ë§Œí¼ íì´ ëŠ˜ì–´ë‚˜ê²Œ 해야 좌우 16px로 맞는다 */
width: auto;
margin: -10px -20px;
padding: 16px 16px 20px;
}
/* ì¼ë°˜(ID/비밀번호) 회ì›ê°€ìž… 화면 — src/pages/signUp. Figmaì— ì´ í™”ë©´ ì‹œì•ˆì´ ì—†ì–´
(회ì›ê°€ìž…ì€ ì–´ì‹ /소셜만 기íšë¨, 9efcf76 커밋 ì°¸ê³ ) ë²¤ë” aurora 기본 스타ì¼ì„ 그대로
ì“°ê³ , ë²¤ë” ê¸°ë³¸ì´ ì–´ê¸‹ë‚˜ëŠ” 부분만 여기서 최소로 ì†ë³¸ë‹¤.
주ì˜: .sign-up-form 루트 í´ëž˜ìŠ¤ëŠ” ì–´ì‹ SSO 가입 화면(EoshinSignUpContent, 루트ì—
.eoshin-sign-up-form 병기)ë„ í•¨ê»˜ 쓴다 — ê·¸ 화면 ì „ìš© 스타ì¼ì€ EoshinSignUpContent.cssì—
.eoshin-sign-up-form 스코프로 있으므로, 여기 ê·œì¹™ì´ ê·¸ í™”ë©´ì— ìƒˆì–´ë“¤ì§€ 않게 ì´ íŒŒì¼ì€
ì¼ë°˜ 가입ì—ë§Œ 존재하는 요소(.email-input 등) 기준으로만 ìž‘ì„±í• ê²ƒ. */
/* ì´ë©”ì¼ ì§ì ‘ìž…ë ¥(ì•„ì´ë””@ë„ë©”ì¸)ê³¼ ë„ë©”ì¸ ì„ íƒ ë“œë¡ë‹¤ìš´ ì‚¬ì´ ê°„ê²© — ë²¤ë” aurora.css는
ìžê¸°ë„¤ SelectBox 기준(.email-input + .select-box{margin-top:8px})으로만 ê°„ê²©ì„ ì£¼ëŠ”ë°,
ì´ í”„ë¡œì 트는 SelectBox ëŒ€ì‹ ì»¤ìŠ¤í…€ OptionDropdownì„ ì“°ê³ ìžˆì–´ ì´ ê·œì¹™ì´ ì•ˆ ê±¸ë ¤
드ë¡ë‹¤ìš´ì´ ì´ë©”ì¼ ìž…ë ¥ì¹¸ì— ë”± 붙어 보였다 — ê°™ì€ ê°’(8px)으로 맞춰준다. */
.sign-up-form__input-wrap .email-input + .option-dropdown {
margin-top: 8px;
}
/* ì¸ì¦ë²ˆí˜¸ 발송/재ì¸ì¦/í™•ì¸ ë²„íŠ¼ — ë²¤ë” ê¸°ë³¸ Button(theme=default, 회색) ëŒ€ì‹ ê³µìš©
EoshinButton(variant=dark)으로 êµì²´í•˜ë©´ì„œ, 가입 CTA(52px)와 구분ë˜ë„ë¡ ë²¤ë”ê°€ ì›ëž˜
ì£¼ë˜ í¬ê¸°(.authentication-btn / .text-field+.btn--defaultì˜ height:44px, margin-top:6px)를
ìœ ì§€í•œë‹¤. EoshinButton.cssì˜ .eoshin-btn.eoshin-btn(0,2,0)ì„ ë¡œë“œ 순서와 무관하게
ì´ê¸°ë„ë¡ ëª…ì‹œë„ 0,3,0으로 작성. ì´ í´ëž˜ìŠ¤ëŠ” ì¼ë°˜ 가입 í¼ì—서만 쓰므로 ì–´ì‹ SSO 가입
화면(.eoshin-sign-up-form)ì—는 ì˜í–¥ ì—†ìŒ */
.sign-up-form .eoshin-btn.sign-up-form__btn--certificate {
height: 44px;
margin-top: 6px;
font-size: 14px;
}
/* newMain — ì‹ ê·œ ë©”ì¸ í”„ë¡œí† íƒ€ìž… ìƒí’ˆ 카드 피드.
다ì´ë‚˜ë¯¹ 컬러 스펙 v2.1: 카드마다 DynamicProductCardê°€ ì¸ë„¤ì¼ì—서 추출·변환한 색ì„
--card-bg ì¸ë¼ì¸ CSS 변수로 ì£¼ìž…í•˜ê³ (모드는 컨트롤 ë°” í† ê¸€ì´ ê²°ì •), 카드 배경·
ê·¸ë¼ë°ì´ì…˜Â·info ì˜ì—ì´ ì´ ë³€ìˆ˜ 하나로 ì œì–´ëœë‹¤. 파스텔 모드는 L 87% ê³ ì •ì´ë¼ í…스트는
ê³ ì •ìƒ‰(#333/#666/#444)ì„ ì“´ë‹¤. */
.new-main {
padding: 16px;
}
/* ì¡°í•© 테스트(/newMain/test) — 배너·출ì„바가 ìžì²´ 마진(12px 16px)ì„ ê°–ê³ ìžˆì–´
페ì´ì§€ íŒ¨ë”©ì„ ë¹¼ê³ , 피드 그리드ì—ë§Œ ê°™ì€ ì—¬ë°±ì„ ì¤€ë‹¤ */
.new-main--test {
padding: 0 0 16px;
}
.new-main--test .new-main__grid {
margin: 0 16px;
}
/* 추천 ìƒí’ˆ 섹션 í—¤ë” â€” Figma 9553:40767: ì¶œì„바와 16px 간격(+í—¤ë” ìžì²´ pt 12),
좌우 16px. í—¤ë”ì˜ ê¸°ë³¸ margin-bottom 16ì´ ì²« ì¹´ë“œì™€ì˜ ê°„ê²©ì„ ë§Œë“ ë‹¤ */
.new-main__section-header {
margin: 16px 16px 0;
}
.new-main__grid {
display: grid;
/* 1fr(=minmax(auto,1fr))ì´ë©´ ì¸ë„¤ì¼ ì›ë³¸íì´ ì»¬ëŸ¼ 최소íì„ ë°€ì–´ ì˜¬ë ¤ 가로 오버플로가 ìƒê¹€ */
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 8px;
align-items: start;
}
/* 좌우 ë…립 컬럼 — í–‰ 단위로 높ì´ë¥¼ 맞추지 ì•Šê³ ê° ì»¬ëŸ¼ì´ ìžê¸° ì¹´ë“œë§Œí¼ ìŒ“ì¸ë‹¤ */
.new-main__column {
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
}
/* í…스트·칩 ìƒ‰ì€ í† í°ìœ¼ë¡œ — ê¸°ë³¸ê°’ì€ í”¼ê·¸ë§ˆ 카드 light 변형(9553:40769 실측):
ìƒí’ˆëª…/가격 ê²€ì •, í• ì¸ìœ¨ ê²€ì • 60%, 태그 칩 í° 40% 바탕 + ê²€ì • 70% 글ìž, ì 립 #4a69ea.
ì–´ë‘ìš´ 카드(--dark)ë©´ 아래 블ë¡ì´ í† í°ì„ 통째로 바꾼다 */
.new-main-card {
/* ê°€ìƒ ìŠ¤í¬ë¡¤ — 화면 ë°– 카드는 브ë¼ìš°ì €ê°€ ë ˆì´ì•„웃/페ì¸íŠ¸ë¥¼ 건너뛴다(네ì´í‹°ë¸Œ ê°€ìƒí™”).
intrinsic-size는 대략ì 카드 높ì´(스í¬ë¡¤ë°” ì•ˆì •ìš©)ì´ê³ autoë¼ ì‹¤ì¸¡ 후엔 ì‹¤ì œê°’ 사용.
ë¯¸ì§€ì› ë¸Œë¼ìš°ì €(구형 사파리)는 무시ë˜ì–´ 기존처럼 ì „ë¶€ 그린다 */
content-visibility: auto;
contain-intrinsic-size: auto 360px;
--text-main: #000000;
--text-sub: rgba(0, 0, 0, 0.6);
--chip-bg: rgba(255, 255, 255, 0.4);
--chip-text: rgba(0, 0, 0, 0.7);
--reward: #4a69ea;
display: flex;
flex-direction: column;
border-radius: 12px;
overflow: hidden;
border: 0.4px solid rgba(0, 0, 0, 0.08);
background: var(--card-bg);
text-align: left;
/* 카드 ì „ì²´ê°€ ìƒì„¸ ë§í¬(Link) — 앵커 기본 ìŠ¤íƒ€ì¼ ë¬´íš¨í™” + í´ë¦ 가능 표시 */
color: inherit;
text-decoration: none;
cursor: pointer;
}
/* ì–´ë‘ìš´ 패ë„(v2.2 ì§™ì€ìƒ‰ 카드 í¬í•¨) — 피그마 dark 변형: í° í…스트 + ê²€ì • 40% 칩 + ì 립 #7097ff.
ì§™ì€ìƒ‰ ìŠ¤íŽ™ì˜ text_color #FFFFFF 는 í…스트 ê³ ì • í† ê¸€ê³¼ 무관하게 í•ìƒ ì ìš©ëœë‹¤
(ë°ì€ ê°’ì€ ê¸°ë³¸ í† í°ê³¼ ì ì‘ ëª¨ë“œê°€ ê°™ì•„ì ¸ì„œ light ì „ìš© 블ë¡ì€ ì—†ìŒ â€” í† ê¸€ì€ raw 모드ì—서
ì–´ë‘ìš´ ì¶”ì¶œìƒ‰ì´ ë‚˜ì™”ì„ ë•Œ ì´ dark í† í°ìœ¼ë¡œ 갈아탈지만 ì •í•œë‹¤) */
.new-main-card--dark {
--text-main: #ffffff;
--text-sub: rgba(255, 255, 255, 0.6);
--chip-bg: rgba(0, 0, 0, 0.4);
--chip-text: rgba(255, 255, 255, 0.7);
--reward: #7097ff;
}
.new-main-card__thumb {
position: relative;
width: 100%;
aspect-ratio: 1 / 1;
background: #fff;
}
/* ìƒí’ˆ ì´ë¯¸ì§€ë§Œ(ì§ê³„ ìžì‹). ìžì† ì„ íƒìžë¡œ ë‘ë©´ 좌ìƒë‹¨ ë°°ì§€ í–‰ì˜ ì–´ë“œë¯¼ 스티커 ì´ë¯¸ì§€ê¹Œì§€
100%x100%로 늘어나 ì¸ë„¤ì¼ì„ 통째로 ë®ëŠ”ë‹¤ — ì‹¤ì œë¡œ 겪ìŒ(2026-09-23) */
.new-main-card__thumb > img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* ì´ë¯¸ì§€ → 파스텔 ì—°ê²° ê·¸ë¼ë°ì´ì…˜ — 스펙: px ê³ ì • 금지, ì´ë¯¸ì§€ 높ì´ì˜ % 비율.
기본 24%(v2.2 ì¡°ì •ê°’), 컨트롤 ë°” ìž…ë ¥ì´ --gradient-height로 ë®ì–´ì”€ */
.new-main-card__thumb::after {
content: '';
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: var(--gradient-height, 24%);
background: linear-gradient(to bottom, transparent 0%, var(--card-bg) 100%);
pointer-events: none;
}
/* 좌ìƒë‹¨ ë°°ì§€ í–‰ — 어드민 스티커(왼쪽) → í• ì¸ìœ¨(오른쪽), 스티커 좌표(4/4)와 ë™ì¼ 기준.
í• ì¸ìœ¨ 배지가 ìš°ìƒë‹¨ì—서 ìƒí’ˆ ì´ë¯¸ì§€ì˜ 브랜드 ë¡œê³ ë¥¼ 가린다는 브랜드사 ìš”ì²ìœ¼ë¡œ ì´ë™(2026-09-22) */
.new-main-card__badges {
position: absolute;
top: 4px;
left: 4px;
z-index: 1;
display: flex;
align-items: center;
gap: 4px;
}
/* í–‰ ì•ˆì˜ ìŠ¤í‹°ì»¤ëŠ” ì „ì— ì ˆëŒ€ë°°ì¹˜(좌ìƒë‹¨ 4/4)를 í’€ê³ í–‰ íë¦„ì„ ë”°ë¥¸ë‹¤ */
.new-main-card__badges .product-card__sticker-badge,
.new-main-card__badges .product-card__sticker-badge-img {
position: static;
}
/* BEST 순위 ë°°ì§€(리본, left:8 최대í 36)와 겹치지 않게 순위 ë°°ì§€ 오른쪽으로 비켜난다 */
.new-main-card__thumb:has(.best-seller-card__rank) .new-main-card__badges {
left: 48px;
}
/* ì°œ 목ë¡ì˜ BEST ë°°ì§€(좌ìƒë‹¨ 0,0 모서리형)와 겹치지 않게 ê·¸ 아래로 내린다 */
.new-main-card__thumb:has(.profile-like__best-badge) .new-main-card__badges {
top: 34px;
}
.new-main-card__badge {
padding: 2px 6px;
border-radius: 4px;
background: #ff373b;
color: #fff;
font-size: 12px;
font-weight: 700;
line-height: 18px;
white-space: nowrap;
}
.new-main-card__body {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 8px;
flex: 1;
padding: 10px 12px 14px;
background: var(--card-bg);
transition: background-color 0.3s;
}
.new-main-card__stock {
padding: 2px 6px;
border-radius: 4px;
background: var(--chip-bg);
border: 1px solid rgba(255, 39, 43, 0.5);
color: #ff272b;
font-size: 12px;
font-weight: 500;
line-height: 18px;
}
/* ìƒí’ˆëª… — 피그마 규칙: 최대 3줄, 단어 단위 줄바꿈(중간 잘림 ì—†ìŒ), ì´ˆê³¼ë¶„ì€ ë§ì¤„ìž„.
keep-allì´ë¼ ì¤„ì´ í•ìƒ ë„어쓰기ì—서 꺾여 â€¦ë„ ì™„ì „í•œ 단어 ë’¤ì— ë¶™ëŠ”ë‹¤ */
.new-main-card__title {
margin: 0;
font-size: 14px;
font-weight: 500;
line-height: 18px;
letter-spacing: 0.02px;
color: var(--text-main);
display: -webkit-box;
-webkit-line-clamp: 3;
line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
word-break: keep-all;
}
.new-main-card__price {
display: flex;
align-items: center;
gap: 4px;
margin: 0;
font-size: 16px;
font-weight: 600;
line-height: 24px;
color: var(--text-main);
}
.new-main-card__pct {
font-size: 14px;
font-weight: 700;
color: var(--text-sub);
}
/* í™ë³´ 태그 — 줄 êµ¬ì„±ì€ ê¸°ë³¸ì 으로 파서(promoTags, 12ìž/줄·최대 2줄)ê°€ ì •í•œë‹¤ */
.new-main-card__tags {
display: flex;
flex-direction: column;
gap: 4px;
}
/* 12ìž ê·œì¹™ì„ ì§€ì¼œë„ ì¢ì€ 카드ì—서 물리ì 으로 한 ì¤„ì— ì•ˆ 들어갈 수 있다 — 그럴 ë•
칩 안 í…스트를 꺾지 ë§ê³ (ì¹©ì´ ê¹¨ì ¸ ë³´ìž„) 칩 단위로 ë‹¤ìŒ ì¤„ë¡œ 내린다 */
.new-main-card__cats {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.new-main-card__chip {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 3px 4px;
border-radius: 4px;
background: var(--chip-bg);
color: var(--chip-text);
font-size: 12px;
font-weight: 500;
line-height: 18px;
/* 칩 ë‚´ë¶€ 줄바꿈 금지 — í…스트가 ë‘ ì¤„ë¡œ 꺾ì´ë©´ 칩 ëª¨ì–‘ì´ ê¹¨ì§„ë‹¤ */
white-space: nowrap;
flex-shrink: 0;
}
/* ì ë¦½ê¸ˆì€ ë³´ì¡° í…스트 — 스펙 í…스트 ê°€ì´ë“œì˜ #666.
ì 립 ì¹©ë§Œì€ íì´ ëª¨ìžë¼ë©´ 한 줄 ê³ ì • ëŒ€ì‹ ë‘ ì¤„ë¡œ 떨어뜨린다(ì‚¬ìš©ìž í™•ì¸ 2026-09-11) —
하트 버튼과 한 í–‰ì„ ë‚˜ëˆ ì“°ëŠ” ìžë¦¬ë¼ nowrapì´ë©´ 카드 밖으로 ë„˜ì¹ ìˆ˜ ìžˆìŒ */
.new-main-card__reward {
color: var(--reward);
white-space: normal;
word-break: keep-all;
flex-shrink: 1;
/* ë‘ ì¤„ë¡œ 떨어질 때 ì½”ì¸ ì•„ì´ì½˜ì€ 첫 줄(맨 위) 기준 ê³ ì • */
align-items: flex-start;
}
/* 한 ì¤„ì¼ ë•Œë„ ì–´ê¸‹ë‚˜ ë³´ì´ì§€ 않게 ì•„ì´ì½˜ì„ 첫 줄(18px)ì˜ ì„¸ë¡œ ì¤‘ì•™ì— ê´‘í•™ ë³´ì • */
.new-main-card__reward img {
margin-top: 1px;
}
/* "0,000ì› ì 립"ì€ í•œ ë©ì–´ë¦¬ë¡œ — ë‘ ì¤„ì´ ë˜ë©´ "최대 / 0,000ì› ì 립" 모양으로만 꺾ì¸ë‹¤ */
.new-main-card__reward-amount {
white-space: nowrap;
}
/* ë‘ ì¤„ë¡œ êº¾ì¸ ì¹©(카드가 ë†’ì´ ì‹¤ì¸¡ìœ¼ë¡œ í† ê¸€) — 꺾ì´ë©´ì„œ 차지한 남는 íì„ ê±·ì–´ë‚´
오른쪽 ì—¬ë°±ì´ í•œ ì¤„ì¼ ë•Œì²˜ëŸ¼ í…ìŠ¤íŠ¸ì— ë¶™ê²Œ 한다. í…스트 래í¼ë¥¼ min-content(= 금액 줄 í)로
줄ì´ë©´ ì¹©ì€ ì•„ì´ì½˜+ê°+íŒ¨ë”©ì„ ìœ ì§€í•œ 채 ë‚´ìš© í으로 ê°ì‹¼ë‹¤(ì¹©ì— ì§ì ‘ width를 주면
ì•„ì´ì½˜Â·íŒ¨ë”© ëª«ì´ ë¹ ì ¸ í…스트가 칩 밖으로 넘침 — 실측으로 확ì¸) */
.new-main-card__reward--wrapped > span {
width: min-content;
}
.new-main-card__foot {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
margin-top: 4px;
}
.new-main-card__pick {
padding: 0;
border: none;
background: none;
cursor: pointer;
line-height: 0;
}
/* ëª©ë¡ íŽ˜ì´ì§€(GalleryListPage: ì¹´í…Œê³ ë¦¬/기íšì „/ì§„ì—´ ì „ì²´ë³´ê¸°/검색)ìš© 그리드 변형 —
페ì´ì§€ 컨테ì´ë„ˆ(.gallery-list-page)ì— ì¢Œìš° íŒ¨ë”©ì´ ì—†ì–´ 여기서 준다 */
.new-main__grid--page {
padding: 0 16px;
margin-bottom: 20px;
}
/* ëª©ë¡ íŽ˜ì´ì§€ì˜ ì‹¤ì œ ì°œ 버튼(ProductWishButton)ì„ ì¹´ë“œ 하단 ìŠ¬ë¡¯ì— ì¸ë¼ì¸ë¡œ 배치 —
ì „ì— ê·œì¹™(ì´ë¯¸ì§€ 우하단 absolute)ì„ í’€ê³ ë”미 하트(pick.svg)와 ê°™ì€ ìžë¦¬Â·í¬ê¸°ë¡œ */
.new-main-card__wish-slot {
line-height: 0;
}
.new-main-card__wish-slot .product-card__wish-btn {
position: static;
width: 24px;
height: 24px;
}
/* ì„±ì¸ ì¸ì¦ ì „ ì„±ì¸ ìƒí’ˆ 블러(ë²¤ë” bg--adult ë°°ê²½ ì´ë¯¸ì§€ 재사용) — ì¸ë„¤ì¼ ì „ì²´ ë®ê¸° */
.new-main-card__adult {
position: absolute;
inset: 0;
z-index: 1;
}
@charset 'utf-8';
:root {
/* ì–´ì‹ ìƒµ 브랜드 ìƒ‰ìƒ */
--eoshin-blue: #4dacdf;
--eoshin-navy: #101f3b;
--eoshin-red: #e43d3d;
--eoshin-bg: #f5f8fb;
--eoshin-card: #e0f1fb;
--eoshin-border: #e1eaef;
--eoshin-gray-text: #9e9e9e;
--eoshin-tab-inactive: #9b9b9b;
/* ì–´ì‹ ìƒµ í…스트/공용 ìƒ‰ìƒ í† í° */
--eoshin-white: #ffffff;
--eoshin-text-primary: #1a1a1a;
--eoshin-text-secondary: #404040;
--eoshin-text-muted: #9b9b9b;
/* 공통 ë ˆì´ì•„웃 치수 — í—¤ë”/하단바 높ì´ì— ì˜ì¡´í•˜ëŠ” 페ì´ì§€(예: ì¹´í…Œê³ ë¦¬ sticky 사ì´ë“œë°”)는
ì´ ê°’ì„ ì°¸ì¡°í•´ì„œ 계산해야 ì‹¤ì œ í—¤ë”/하단바 í¬ê¸°ê°€ ë°”ë€Œì–´ë„ ê°™ì´ ì–´ê¸‹ë‚˜ì§€ ì•ŠìŒ */
--header-height: 56px;
--bottom-nav-height: 70px;
/* PC 공통 ë ˆì´ì•„웃(Figma 5236:41112) ë°°ê²½ — 콘í…ì¸ ì¹´ë“œ(420px) 양옆으로 ë³´ì´ëŠ” ì „ì²´ ë°°ê²½ */
--pc-layout-gradient: linear-gradient(135deg, #f0f4fe 0%, #dbe6ff 100%);
/* 위 ê·¸ë¼ë””ì–¸íŠ¸ì˜ ì¤‘ê°„ 톤. ë·°í¬íЏ ê³ ì • ê·¸ë¼ë””언트가 ë‹¿ì§€ 않는 순간(ë§¥ 오버스í¬ë¡¤ 등)ì—
캔버스가 í°ìƒ‰ìœ¼ë¡œ 비치지 않ë„ë¡ html 배경색으로 함께 ê¹ë‹¤ */
--pc-layout-bg: #e6edfe;
/* PC(1001px~)ì—ì„œì˜ ì½˜í…ì¸ í — 모달/바텀시트(.portal)ë„ ì´ ê°’ì„ ê·¸ëŒ€ë¡œ 참조해서
콘í…ì¸ íì´ ë°”ë€Œì–´ë„ ë‘˜ì´ ë”°ë¡œ 어긋나지 않게 함 */
--pc-content-width: 420px;
/* Aurora 기본 변수 → ì–´ì‹ ìƒµ 브랜드로 êµì²´
주ì˜: ì´ ë³€ìˆ˜ë“¤ì€ ë²¤ë” CSS(component.css/aurora.css) 안ì—서 수ì‹~백여 ê³³ì— ì“°ì´ê³ 있어서,
하나를 바꾸면 ì• ì´ˆì— ì˜ë„한 화면 ë§ê³ ë„ ì „í˜€ 무관한 곳까지 조용히 ì˜í–¥ì„ 줄 수 있다
(예: --default-color를 바꿨다가 페ì´ì§€ë„¤ì´ì…˜ 비활성 버튼 ë°°ê²½ì´ ë©ë‹¬ì•„ ë°”ë€ ì‚¬ë¡€ ìžˆìŒ â€”
pages/ProductDetail/ui/Review(Inquiry)/*.cssì˜ .pagination__prev:disabled ì°¸ê³ ).
ì´ ê°’ì„ ë°”ê¾¸ê±°ë‚˜ @shopby/react-components ë²„ì „ì„ ì˜¬ë¦° ë’¤ì—는 `yarn audit:css`로
ì˜ë„치 않게 새어나온 ê³³ì´ ìžˆëŠ”ì§€ 다시 확ì¸í• 것(scripts/audit-vendor-css.mjs) */
--whole-color: #fff;
--background-color: #f5f8fb;
--point-color: #4dacdf;
--point-color-secondary: #101f3b;
--black-color: #111;
--dark-gray-color: #262626;
--empty-color: #f5f8fb;
--default-color: #e1eaef;
--blue-gray-color: #3f434c;
--gray-color: #9b9b9b;
--gray-font-color: #828282;
--tooltip-bg-color: #f7f7f7;
--default-font-color: #181818;
}
/* 벤ë”(common.css)ê°€ body{font:14px/1 "Montserrat","Noto Sans KR",sans-serif}로 ì „ì— ê¸°ë³¸
ê¸€ê¼´ì„ Montserrat로 깔아둬서, font-family를 따로 ì§€ì •í•˜ì§€ ì•Šì€ ìš”ì†ŒëŠ” ì „ë¶€ ì´ ê°’ì„
ìƒì†ë°›ì•„ Montserrat/Noto Sans KR로 새어나갔다(Figma는 ì „ì²´ê°€ Pretendard) — 지금까지
여러 화면ì—서 ì´ ë¬¸ì œë¥¼ ë°œê²¬í• ë•Œë§ˆë‹¤ ê·¸ 화면 CSSì— ê°œë³„ì 으로 patch해왔는ë°
(_sharedComponents.css 등 ì°¸ê³ ), 뿌리(body)를
여기서 한 ë²ˆì— ê³ ì³ë‘ë©´ 앞으로 새로 발견ë˜ëŠ” 화면ì—ì„œë„ ë°˜ë³µí• í•„ìš”ê°€ 없다.
font-familyë§Œ override하므로 font 단축 ì†ì„±ì˜ 나머지 ê°’(font-size:14px 등)ì€
그대로 ë‚¨ì•„ìžˆê³ , 그건 기존처럼 화면별로 필요한 ê³³ì—서 개별 ì§€ì •í•œë‹¤ */
body {
font-family: Pretendard, sans-serif;
}
/* 벤ë”(aurora.css)는 페ì´ì§€ 최ìƒìœ„ í´ëž˜ìŠ¤ë§ˆë‹¤(.claim/.cart/.order-sheet/.order-confirm/
.order-detail) line-height:1.5emì„ ê°ê° 따로 ì •ì˜í•´ë‘¬ì„œ, ê·¸ 목ë¡ì— 없는 새 페ì´ì§€ë¥¼
ì¶”ê°€í• ë•Œë§ˆë‹¤ 화면 CSSì— ê°™ì€ ê°’ì„ ë°˜ë³µí•´ì„œ ì¨ì•¼ 했다(Pretendard í°íЏ ìžì²´ 지표가
빡빡해서 line-height:normalì´ ê¸€ìž í¬ê¸°ì™€ ê±°ì˜ 1:1로 계산ë˜ëŠ” ë¬¸ì œ — claimSelect
화면ì—서 ì‹¤ì œë¡œ 겪ìŒ). ë²¤ë” ìª½ ì¤‘ë³µì€ node_modulesë¼ ì†ëŒˆ 수 없지만, 우리가 새로
만드는 페ì´ì§€ 루트 í´ëž˜ìŠ¤ëŠ” 여기 한 ê³³ì— ëª¨ì•„ë‘”ë‹¤ — 새 페ì´ì§€ë¥¼ ì¶”ê°€í• ë•Œ ì´ ì…€ë ‰í„°
목ë¡ì— í´ëž˜ìŠ¤ëª…ë§Œ 보태면 ë˜ê³ , ê·¸ 페ì´ì§€ CSSì—서 다시 ì„ ì–¸í• í•„ìš”ê°€ 없다 */
.claim-select {
line-height: 1.5em;
}
/* 아래 @importë“¤ì€ í•ìƒ index.tsxì˜ ë²¤ë” ìŠ¤íƒ€ì¼(@shopby/shared/styles/common·component·aurora)
보다 ë‚˜ì¤‘ì— ë¡œë“œëœë‹¤(index.tsxê°€ ë²¤ë” import í›„ì— ì´ style.css를 import함) — ì´ í”„ë¡œì 트ì˜
ëª¨ë“ ì˜¤ë²„ë¼ì´ë“œëŠ” "ê°™ì€ ëª…ì‹œë„ë©´ ë‚˜ì¤‘ì— ë¡œë“œëœ ê·œì¹™ì´ ì´ê¸´ë‹¤"는 ì´ ìˆœì„œ í•˜ë‚˜ì— ì˜ì¡´í•œë‹¤.
@import 순서를 ìž„ì˜ë¡œ 재배열하지 ë§ ê²ƒ(알파벳순 ì •ë ¬ 등) — 특히 ì´ íŒŒì¼ë“¤ 사ì´ì˜ 순서가
바뀌는 ê±´ 무해하지만, ë²¤ë” ìŠ¤íƒ€ì¼ import보다 ì´ style.cssê°€ ë¨¼ì € 로드ë˜ë„ë¡ ë°”ë€Œë©´
지금까지 ê³ ì¹œ 오버ë¼ì´ë“œê°€ ì „ë¶€ 조용히 ë¬´ë ¥í™”ëœë‹¤ */
/* ìƒµë°”ì´ ê³µìš© Button(@shopby/react-components) — theme="dark"/"caution"ì˜ ê¸°ë³¸ ë°°ê²½/
radius/í°íŠ¸ê°€ ì–´ì‹ ìƒµ ë””ìžì¸ê³¼ ë‹¬ë¼ í™”ë©´ë§ˆë‹¤ ê°™ì€ ë‚´ìš©ì„ ë°˜ë³µí•´ì„œ 스코프 오버ë¼ì´ë“œí•˜ê³
있었ìŒ(1:1ë¬¸ì˜ ë“±ë¡/취소, 구매하기 등ì—서 ê°ê° #4a69ea·#f0f4fe·radius 8·Pretendard로
ë…립ì 으로 실측·확ì¸ëœ ê°’ì´ ë™ì¼í•´ ì–´ì‹ ìƒµ 공통 브랜드 버튼 스타ì¼ë¡œ íŒë‹¨, ì „ì—으로 통ì¼).
theme="default"(ìˆ˜ì •/ì‚ì œ 등 í…스트형 버튼 95ê³³)는 ì´ í™”ë©´ë“¤ë§ˆë‹¤ ì´ë¯¸ ìžì²´ 스타ì¼ì„
ê°–ê³ ìžˆì–´ ì˜í–¥ 범위 ë°–ì— ë‘기 위해 dark/caution ë‘ í…Œë§ˆì—ë§Œ í•œì •í•œë‹¤. 화면별로
flex/margin/width 등 ë ˆì´ì•„웃 ê°’ë§Œ 다르므로 ê·¸ ë¶€ë¶„ì€ ê° íŽ˜ì´ì§€ CSSì— ë‚¨ê²¨ë‘”ë‹¤. */
.btn--dark {
border: 0;
border-radius: 8px;
background-color: #f0f4fe;
color: #3c56d6;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
}
.btn--caution {
border: 0;
border-radius: 8px;
background-color: #4a69ea;
color: #ffffff;
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 600;
}
.app-loading-fallback {
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.app-loading-fallback__spinner {
width: 32px;
height: 32px;
border: 3px solid #e1eaef;
border-top-color: #4dacdf;
border-radius: 50%;
animation: app-loading-fallback-spin 0.7s linear infinite;
}
@keyframes app-loading-fallback-spin {
to {
transform: rotate(360deg);
}
}
/* ë Œë”ë§ ì˜ˆì™¸ë¡œ ì „ì²´ í™”ë©´ì´ ëŒ€ì²´ë 때만 ë³´ì´ëŠ” ì•ˆì „ë§ í™”ë©´ — Figma ë””ìžì¸ 대ìƒì´ 아니ë¼
브랜드 컬러만 맞춰 최소한으로 구성한다 */
.render-error-boundary {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 16px;
min-height: 100vh;
padding: 24px;
text-align: center;
}
.render-error-boundary__message {
font-family: Pretendard, sans-serif;
font-size: 16px;
font-weight: 500;
color: #101f3b;
}
.render-error-boundary__reload-btn {
border: 0;
border-radius: 8px;
padding: 12px 24px;
background-color: #4dacdf;
font-family: Pretendard, sans-serif;
font-size: 15px;
font-weight: 600;
color: #ffffff;
cursor: pointer;
}