이벤트/교통 예약 서비스 UI/UX 디자인 가이드
K.Rideus 공연/이벤트 페이지 리디자인에 직접 적용 가능한 실전 가이드. AETHER 디자인 시스템(네이비/블루/골드/화이트/그레이) 기준.
1. 정보 위계 (Information Hierarchy)
1-1. Need-to-Know vs Nice-to-Know 구조
예약 서비스에서 사용자 의사결정에 직접 영향을 주는 정보와 보조적 정보를 명확히 분리해야 한다.
| 레벨 | 분류 | 예시 (이벤트/교통) | 처리 |
|---|---|---|---|
| L1 | Critical | 이벤트명, 날짜/시간, 가격, CTA 버튼 | Above-the-fold, 최대 크기 |
| L2 | Important | 장소, 좌석 등급, 셔틀 출발지, 소요시간 | Above-the-fold 하단 |
| L3 | Supportive | 상세 설명, 포함 사항, 주의사항 | 스크롤 후 노출 |
| L4 | Reference | FAQ, 환불 정책, 약관 | 접힘(Accordion) 또는 페이지 하단 |
K.Rideus 적용: 이벤트 상세 페이지에서 포스터 + 핵심 정보(L1~L2)가 뷰포트 상단, 상세 설명(L3)은 탭/스크롤 영역, FAQ(L4)는 아코디언.
1-2. 스캐닝 패턴
F-Pattern (텍스트 중심 페이지):
- 적용 대상: 이벤트 상세 설명, FAQ, 이용 안내
- 핵심: 왼쪽 정렬 + 첫 두 줄에 핵심 정보 + 볼드 키워드
Z-Pattern (시각 중심 페이지):
- 적용 대상: 이벤트 리스트, 카드 그리드, 히어로 섹션
- 핵심: 좌상단(로고/네비) → 우상단(CTA) → 좌하단(보조정보) → 우하단(액션)
/* F-pattern을 강화하는 텍스트 스타일 */
.ev-info-block h3 {
font-weight: 700;
margin-bottom: 0.5rem;
color: var(--color-ink); /* 진한 잉크 */
}
.ev-info-block p {
color: var(--color-ink-secondary); /* 약간 연한 톤 */
line-height: 1.75;
}
.ev-info-block strong {
color: var(--color-accent); /* 핵심 수치는 액센트 */
font-weight: 600;
}1-3. Above-the-Fold 전환 우선순위
예약 서비스의 ATF(Above-the-Fold)에 반드시 포함해야 할 요소:
- 이벤트/서비스 비주얼 (포스터 또는 히어로 이미지)
- 제목 + 날짜 (가장 큰 텍스트)
- 가격 또는 가격 범위 (“~원부터”)
- Primary CTA (예약하기/문의하기)
- 신뢰 시그널 (평점, 리뷰 수, “N명 예약”)
/* ATF 영역의 최소 높이 확보 */
.ev-hero {
min-height: 85vh; /* 모바일에서도 충분한 높이 */
display: flex;
flex-direction: column;
justify-content: flex-end; /* 콘텐츠를 하단에 배치 */
padding-bottom: 3rem;
}
@media (min-width: 1024px) {
.ev-hero {
min-height: 90vh;
}
}2. 비주얼 리듬 (Visual Rhythm)
2-1. 섹션 교차 기법 (3-Tone System)
다크/라이트 이진법 대신 3단계 톤 시스템을 사용한다.
| 톤 | 용도 | K.Rideus 배경색 | 텍스트색 |
|---|---|---|---|
| Dark | 히어로, 임팩트 섹션 | --color-bg: #0F1115 | --color-text: #FFF |
| Mid | 정보 밀도 높은 섹션 | #1A1D24 또는 #1E2128 | #E2E8F0 |
| Light | 상세 정보, 폼, 리뷰 | --color-cool-surface: #f2f4f7 | --color-ink: #1c1917 |
교차 패턴 예시 (이벤트 상세 페이지):
[Dark] 히어로 — 포스터 + 제목 + CTA
[Light] 이벤트 상세 정보 — 날짜, 장소, 포함사항
[Mid] 셔틀 서비스 옵션 — 카드 그리드
[Light] 이용 안내 + FAQ
[Dark] 하단 CTA 밴드 — "지금 예약하기"
/* Mid-tone 섹션 토큰 (AETHER 확장) */
:root {
--color-bg-mid: #1A1D24;
--color-bg-mid-alt: #1E2128;
--color-text-on-mid: #E2E8F0;
}
.section--mid {
background: var(--color-bg-mid);
color: var(--color-text-on-mid);
padding: 5rem 0;
}
/* Light 섹션 */
.section--light {
background: var(--color-cool-surface);
color: var(--color-ink);
padding: 5rem 0;
}
/* 섹션 간 부드러운 전환 (gradient bridge) */
.section--transition-dark-to-light {
background: linear-gradient(180deg, var(--color-bg) 0%, var(--color-cool-surface) 100%);
height: 120px;
}2-2. 콘텐츠 밀도 vs 여백 균형
| 섹션 유형 | padding-y | 콘텐츠 max-width | 여백 비율 |
|---|---|---|---|
| 히어로 | 5rem ~ 8rem | 100% | 60% 여백 : 40% 콘텐츠 |
| 정보 그리드 | 4rem ~ 5rem | 1216px | 40% 여백 : 60% 콘텐츠 |
| 텍스트 블록 | 3rem ~ 4rem | 768px (좁게) | 45% 여백 : 55% 콘텐츠 |
| CTA 밴드 | 3rem | 960px | 50% 여백 : 50% 콘텐츠 |
/* 텍스트 중심 섹션은 좁은 max-width */
.content-narrow {
max-width: 768px;
margin: 0 auto;
padding: 0 var(--container-px);
}
/* 그리드/카드 섹션은 넓은 max-width */
.content-wide {
max-width: var(--container-max); /* 1216px */
margin: 0 auto;
padding: 0 var(--container-px);
}2-3. 수직 리듬 (Vertical Rhythm)
일관된 간격 체계를 위해 8px 기반 스페이싱 스케일을 사용한다.
:root {
--space-xs: 0.25rem; /* 4px */
--space-sm: 0.5rem; /* 8px */
--space-md: 1rem; /* 16px */
--space-lg: 1.5rem; /* 24px */
--space-xl: 2rem; /* 32px */
--space-2xl: 3rem; /* 48px */
--space-3xl: 4rem; /* 64px */
--space-4xl: 6rem; /* 96px */
--space-5xl: 8rem; /* 128px */
}3. 타이포그래피 위계 (Typography Hierarchy)
3-1. 스케일 비율
K.Rideus는 현재 자체 스케일을 사용 중. 예약 서비스에 적합한 비율은 Major Third (1.25) 또는 Perfect Fourth (1.333).
| 레벨 | Major Third (1.25) | Perfect Fourth (1.333) | 현재 AETHER | 용도 |
|---|---|---|---|---|
| Display | 3.052rem (48.8px) | 4.209rem (67.3px) | 3rem (48px) | 페이지 타이틀 |
| H1 | 2.441rem (39px) | 3.157rem (50.5px) | 2.25rem (36px) | 섹션 제목 |
| H2 | 1.953rem (31.2px) | 2.369rem (37.9px) | 1.5rem (24px) | 서브 섹션 |
| H3 | 1.563rem (25px) | 1.777rem (28.4px) | — | 카드 제목 |
| Large | 1.25rem (20px) | 1.333rem (21.3px) | 1.125rem (18px) | 인트로 |
| Base | 1rem (16px) | 1rem (16px) | 1rem (16px) | 본문 |
| Small | 0.8rem (12.8px) | 0.75rem (12px) | 0.875rem (14px) | 보조 |
권장: K.Rideus의 프리미엄 포지셔닝에는 Major Third가 적합. Perfect Fourth는 너무 극적.
/* 이벤트 페이지 타이포 확장 (Major Third 기반) */
.ev-display {
font-family: var(--font-display);
font-size: clamp(2rem, 5vw, 3.052rem);
font-weight: 800;
line-height: 1.1;
letter-spacing: -0.02em;
}
.ev-h1 {
font-family: var(--font-display);
font-size: clamp(1.5rem, 3.5vw, 2.441rem);
font-weight: 700;
line-height: 1.2;
letter-spacing: -0.015em;
}
.ev-h2 {
font-family: var(--font-display);
font-size: clamp(1.25rem, 2.5vw, 1.953rem);
font-weight: 600;
line-height: 1.3;
}
.ev-h3 {
font-family: var(--font-body);
font-size: clamp(1.125rem, 2vw, 1.563rem);
font-weight: 600;
line-height: 1.4;
}3-2. 효과적인 위계 레벨 수
권장: 5~6레벨이 최적. 7레벨 이상은 사용자가 구별하지 못한다.
K.Rideus 이벤트 페이지 기준:
- Display — 이벤트명 (Outfit 800)
- H1 — 섹션 제목 (Outfit 700)
- H2 — 서브타이틀, 카드 제목 (Outfit 600)
- Body Large — 인트로, 설명 첫 문단 (Pretendard 400)
- Body — 일반 본문 (Pretendard 400)
- Caption — 라벨, 메타, 가격 단위 (Pretendard 500)
3-3. 폰트 페어링 원칙
K.Rideus 현재: Outfit(디스플레이) + Pretendard(본문) — 이미 우수한 조합.
| 원칙 | 설명 | K.Rideus 적용 |
|---|---|---|
| 대비(Contrast) | 산세리프 vs 세리프, 또는 기하학적 vs 휴머니스트 | Outfit(기하학적) vs Pretendard(휴머니스트) |
| 일관성 | x-height가 비슷해야 나란히 놓았을 때 자연스러움 | 두 폰트 모두 x-height 높음 |
| 역할 분리 | 디스플레이 폰트는 제목만, 본문 폰트는 긴 텍스트만 | --font-display vs --font-body |
| Weight 활용 | 같은 폰트 내에서 weight 차이로 위계 표현 | Outfit: 500/600/700/800 |
/* 폰트 페어링 실전 */
.ev-title {
font-family: var(--font-display); /* Outfit */
font-weight: 800;
text-transform: uppercase;
letter-spacing: -0.02em;
}
.ev-subtitle {
font-family: var(--font-display);
font-weight: 400; /* 같은 폰트, 가벼운 weight */
letter-spacing: 0.05em;
text-transform: uppercase;
font-size: var(--text-sm);
color: var(--color-text-muted);
}
.ev-body {
font-family: var(--font-body); /* Pretendard */
font-weight: 400;
line-height: 1.75; /* 한글은 1.6~1.8이 최적 */
}4. 색상 전략 (Color Strategy)
4-1. 60-30-10 비율
| 비율 | 역할 | K.Rideus AETHER 매핑 |
|---|---|---|
| 60% | 지배색 (배경) | #0F1115 (다크) 또는 #f2f4f7 (라이트 섹션) |
| 30% | 보조색 (서피스/카드) | #282c35 (카드), #1A1D24 (미드톤) |
| 10% | 강조색 (CTA/액션) | #2E5CFF (블루 액센트) |
보조 강조색 (골드): 가격, 프리미엄 뱃지, 등급 표시에만 사용 (전체의 2~3%).
:root {
/* Gold accent — 프리미엄 시그널 전용 */
--color-gold: #D4A84B;
--color-gold-light: #E8C97A;
--color-gold-subtle: rgba(212, 168, 75, 0.15);
}
/* 가격 하이라이트 */
.ev-price {
color: var(--color-gold);
font-family: var(--font-display);
font-weight: 700;
font-size: 1.75rem;
}
.ev-price-unit {
font-size: 0.875rem;
font-weight: 400;
color: var(--color-text-muted);
}
/* 프리미엄 뱃지 */
.badge--premium {
background: var(--color-gold-subtle);
color: var(--color-gold);
border: 1px solid rgba(212, 168, 75, 0.3);
padding: 0.25rem 0.75rem;
font-size: var(--text-overline);
font-weight: 600;
letter-spacing: 0.05em;
border-radius: var(--radius-full);
}4-2. 프리미엄 vs 버짓 서비스의 색상 차이
| 요소 | 버짓 서비스 | 프리미엄 서비스 (K.Rideus) |
|---|---|---|
| 주 배경 | 밝은 흰색, 밝은 그레이 | 다크 네이비/차콜 |
| 액센트 | 밝은 오렌지/그린 (친근함) | 블루/골드 (신뢰+고급) |
| 그라디언트 | 거의 사용 안 함 | 미묘한 방사형 글로우 |
| 텍스트 대비 | 높은 대비 (검정/흰) | 중~높은 대비 (뮤트 톤 활용) |
| 이미지 처리 | 원본 그대로 | 오버레이 + 그레이딩 |
| 여백 | 최소화 (정보 밀도 높음) | 넉넉한 여백 (호흡감) |
/* 프리미엄 이미지 오버레이 */
.ev-hero-image::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(
180deg,
rgba(15, 17, 21, 0.3) 0%,
rgba(15, 17, 21, 0.0) 40%,
rgba(15, 17, 21, 0.85) 100%
);
}
/* 프리미엄 카드 글로우 */
.ev-card:hover {
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.3),
0 0 0 1px rgba(46, 92, 255, 0.15);
}4-3. 다크 모드 — “올블랙이 아닌” 디자인 원칙
K.Rideus는 이미 다크 테마지만, “깊이감 있는 다크”를 만들기 위한 원칙:
- 순수 검정(#000) 사용 금지 — 가장 어두운 톤도
#080A0E(현재--color-bg-deep) - 배경에 미세한 색조(tint) 부여 — 네이비 틴트(
#0F1115)로 차가운 톤 유지 - 서피스 레이어 간 명도 차이: 3~5% —
#0F1115→#1A1D24→#282c35 - 그림자 대신 보더/글로우 — 다크 배경에서 box-shadow는 잘 안 보임
- 텍스트는 순백(#FFF)보다 약간 낮게 — 눈 피로 감소, 단 제목은 FFF 허용
/* 다크 서피스 레이어 체계 */
:root {
--surface-0: #080A0E; /* 최심층: 페이지 배경 */
--surface-1: #0F1115; /* 기본 섹션 */
--surface-2: #1A1D24; /* 올린 섹션, 사이드바 */
--surface-3: #282c35; /* 카드, 모달 */
--surface-4: #353942; /* 호버, 선택 상태 */
}
/* 서피스에 미세한 보더로 분리감 */
.card-on-dark {
background: var(--surface-3);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: var(--radius-md);
}5. CTA 디자인 패턴 (Call-to-Action)
5-1. 버튼 위계
| 레벨 | 스타일 | 용도 | 페이지당 개수 |
|---|---|---|---|
| Primary | Filled, 액센트 컬러 | 예약하기, 문의하기 | 1~2개 |
| Secondary | Outlined 또는 Subtle Fill | 자세히 보기, 일정 확인 | 2~4개 |
| Ghost/Tertiary | 텍스트 + 밑줄 또는 화살표 | 더보기, 약관 보기 | 무제한 |
/* Primary CTA */
.btn-primary {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.875rem 2rem;
background: var(--color-accent);
color: #fff;
font-family: var(--font-display);
font-size: 1rem;
font-weight: 600;
letter-spacing: 0.02em;
border-radius: var(--radius-sm);
transition: all var(--duration-fast) var(--ease-spring);
cursor: pointer;
min-height: 48px; /* 터치 타겟 */
}
.btn-primary:hover {
background: var(--color-accent-light);
transform: translateY(-1px);
box-shadow: 0 4px 16px var(--color-accent-glow);
}
.btn-primary:active {
transform: translateY(0);
}
/* Secondary CTA */
.btn-secondary {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.875rem 2rem;
background: transparent;
color: var(--color-accent);
font-family: var(--font-display);
font-size: 1rem;
font-weight: 600;
border: 1.5px solid var(--color-accent);
border-radius: var(--radius-sm);
transition: all var(--duration-fast) var(--ease-spring);
cursor: pointer;
min-height: 48px;
}
.btn-secondary:hover {
background: rgba(46, 92, 255, 0.08);
border-color: var(--color-accent-light);
}
/* Ghost CTA */
.btn-ghost {
display: inline-flex;
align-items: center;
gap: 0.375rem;
padding: 0.5rem 0;
color: var(--color-accent);
font-size: var(--text-sm);
font-weight: 500;
background: none;
border: none;
cursor: pointer;
transition: gap var(--duration-fast) var(--ease-spring);
}
.btn-ghost::after {
content: '\2192'; /* → 화살표 */
transition: transform var(--duration-fast) var(--ease-spring);
}
.btn-ghost:hover::after {
transform: translateX(4px);
}5-2. Floating/Sticky CTA 패턴
모바일에서 긴 스크롤 페이지의 전환율을 높이는 핵심 패턴.
/* 모바일 Sticky CTA Bar */
.sticky-cta {
position: fixed;
bottom: 0;
left: 0;
right: 0;
z-index: 100;
background: rgba(15, 17, 21, 0.95);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-top: 1px solid rgba(255, 255, 255, 0.08);
padding: 0.75rem 1rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 1rem;
transform: translateY(100%);
transition: transform 0.3s var(--ease-spring);
}
.sticky-cta.visible {
transform: translateY(0);
}
.sticky-cta__price {
font-family: var(--font-display);
font-weight: 700;
font-size: 1.25rem;
color: #fff;
}
.sticky-cta__price span {
display: block;
font-size: var(--text-overline);
font-weight: 400;
color: var(--color-text-muted);
}
.sticky-cta .btn-primary {
flex-shrink: 0;
padding: 0.75rem 1.5rem;
font-size: 0.9375rem;
}
/* 데스크톱에서는 숨김 */
@media (min-width: 1024px) {
.sticky-cta { display: none; }
}/* Sticky CTA 표시 로직 — 히어로 CTA가 화면에서 사라지면 표시 */
const heroCTA = document.querySelector('.ev-hero .btn-primary');
const stickyCTA = document.querySelector('.sticky-cta');
if (heroCTA && stickyCTA) {
const observer = new IntersectionObserver(([entry]) => {
stickyCTA.classList.toggle('visible', !entry.isIntersecting);
}, { threshold: 0 });
observer.observe(heroCTA);
}5-3. Urgency Without Pressure (압박 없는 긴급성)
| 패턴 | 좋은 예 | 나쁜 예 |
|---|---|---|
| 잔여 수량 | ”남은 좌석 12석” (사실 기반) | “곧 마감! 서두르세요!” (압박) |
| 타임라인 | ”예약 마감: 4월 15일” (정보) | “3분 후 가격 인상!” (거짓 긴급) |
| 사회적 증거 | ”이번 주 24명 예약” (행동) | “지금 83명이 보고 있어요” (불안) |
| 혜택 프레이밍 | ”얼리버드 10% 할인 적용 중” (긍정) | “할인 놓치지 마세요!” (부정) |
/* 잔여 수량 인디케이터 */
.ev-availability {
display: inline-flex;
align-items: center;
gap: 0.5rem;
font-size: var(--text-sm);
color: var(--color-text-muted);
}
.ev-availability__dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #22C55E; /* 충분 */
}
.ev-availability__dot--low {
background: #F59E0B; /* 잔여 소량 */
animation: pulse-dot 2s infinite;
}
.ev-availability__dot--urgent {
background: #EF4444; /* 거의 매진 */
animation: pulse-dot 1.5s infinite;
}
@keyframes pulse-dot {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.6; transform: scale(1.3); }
}
/* 얼리버드 뱃지 */
.badge--earlybird {
background: rgba(34, 197, 94, 0.12);
color: #22C55E;
border: 1px solid rgba(34, 197, 94, 0.25);
padding: 0.2rem 0.625rem;
font-size: var(--text-overline);
font-weight: 600;
border-radius: var(--radius-full);
}6. 카드 디자인 패턴 (Card Design)
6-1. 이미지 대 콘텐츠 비율
| 카드 유형 | 이미지 비율 | 콘텐츠 비율 | 적용 |
|---|---|---|---|
| 이벤트 리스트 카드 | 55~60% | 40~45% | 세로 카드 (3:4 이미지) |
| 셔틀 옵션 카드 | 0~30% | 70~100% | 정보 중심, 아이콘 사용 |
| 갤러리 카드 | 75~80% | 20~25% | 이미지 오버레이 텍스트 |
| 가로 카드 (모바일) | 35% | 65% | 1:1 또는 4:3 썸네일 |
/* 이벤트 리스트 카드 — 세로형 */
.ev-card {
display: flex;
flex-direction: column;
background: var(--surface-3);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: var(--radius-md);
overflow: hidden;
transition: all var(--duration-fast) var(--ease-spring);
}
.ev-card__image {
position: relative;
aspect-ratio: 3 / 4; /* 포스터 비율 */
overflow: hidden;
}
.ev-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s var(--ease-spring);
}
.ev-card__body {
padding: 1.25rem;
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
}
.ev-card__meta {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: var(--text-overline);
color: var(--color-text-dim);
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.05em;
}
.ev-card__title {
font-family: var(--font-display);
font-size: 1.125rem;
font-weight: 600;
line-height: 1.3;
color: #fff;
/* 2줄 제한 */
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.ev-card__info {
display: flex;
align-items: center;
gap: 1rem;
font-size: var(--text-sm);
color: var(--color-text-muted);
margin-top: auto;
padding-top: 0.75rem;
border-top: 1px solid rgba(255, 255, 255, 0.06);
}6-2. 정보 밀도 가이드
카드 내 정보는 최대 5개 요소로 제한한다:
- 카테고리/타입 태그
- 제목 (최대 2줄)
- 날짜 또는 위치 (1줄)
- 가격 또는 상태
- 액션 힌트 (화살표, 더보기)
과밀도 경고 신호: 카드 높이가 콘텐츠 영역만 200px 이상이면 정보 분리 필요.
/* 정보 밀도 높은 셔틀 옵션 카드 */
.shuttle-card {
display: grid;
grid-template-columns: auto 1fr auto;
align-items: center;
gap: 1rem;
padding: 1.25rem 1.5rem;
background: var(--surface-3);
border: 1px solid rgba(255, 255, 255, 0.06);
border-radius: var(--radius-md);
transition: all var(--duration-fast) var(--ease-spring);
}
.shuttle-card__icon {
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: rgba(46, 92, 255, 0.1);
border-radius: var(--radius-sm);
color: var(--color-accent);
font-size: 1.25rem;
}
.shuttle-card__details {
display: flex;
flex-direction: column;
gap: 0.25rem;
}
.shuttle-card__route {
font-weight: 600;
font-size: 1rem;
color: #fff;
}
.shuttle-card__time {
font-size: var(--text-sm);
color: var(--color-text-muted);
}
.shuttle-card__price {
font-family: var(--font-display);
font-weight: 700;
font-size: 1.25rem;
color: var(--color-gold);
text-align: right;
}6-3. 호버 상태 — 가치를 더하는 인터랙션
호버는 단순 색상 변화가 아닌 추가 정보 노출 또는 시각적 깊이 변화로 가치를 더해야 한다.
| 패턴 | 효과 | 적용 |
|---|---|---|
| Lift | translateY(-4px) + 그림자 강화 | 클릭 가능한 카드 전반 |
| Image Zoom | 이미지 scale(1.05) | 이벤트/갤러리 카드 |
| Reveal | 숨겨진 설명이나 CTA 노출 | 갤러리형 카드 |
| Border Glow | 보더 색상이 액센트로 변경 | 선택 가능한 옵션 카드 |
| Overlay Info | 반투명 오버레이에 추가 정보 | 이벤트 포스터 카드 |
/* 복합 호버: lift + image zoom + border glow */
.ev-card:hover {
transform: translateY(-4px);
border-color: rgba(46, 92, 255, 0.2);
box-shadow:
0 12px 40px rgba(0, 0, 0, 0.25),
0 0 0 1px rgba(46, 92, 255, 0.1);
}
.ev-card:hover .ev-card__image img {
transform: scale(1.05);
}
/* Reveal 패턴 — 호버 시 추가 정보 등장 */
.ev-card__overlay {
position: absolute;
inset: 0;
background: linear-gradient(0deg, rgba(15,17,21,0.9) 0%, transparent 60%);
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 1.25rem;
opacity: 0;
transition: opacity 0.3s var(--ease-spring);
}
.ev-card:hover .ev-card__overlay {
opacity: 1;
}
.ev-card__overlay-text {
font-size: var(--text-sm);
color: var(--color-text-muted);
line-height: 1.5;
/* 3줄 제한 */
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}7. 종합 적용: 이벤트 상세 페이지 구조
K.Rideus 이벤트/공연 상세 페이지에 위 원칙을 모두 적용한 섹션 구조:
Section | 톤 | 콘텐츠 | 타이포 레벨
──────────────────|───────|────────────────────────────────|──────────
1. Hero | Dark | 포스터 풀블리드 + 이벤트명 + CTA | Display + Body
2. Quick Info | Light | 날짜/장소/가격/잔여석 그리드 | H2 + Body + Caption
3. Description | Light | 이벤트 상세 설명 (좁은 컬럼) | H2 + Body Large
4. Shuttle Options| Mid | 셔틀 옵션 카드 3~4개 | H1 + H3 + Body
5. Gallery | Dark | 이미지 갤러리/리뷰 | H2 + Caption
6. FAQ | Light | 아코디언 FAQ | H2 + Body
7. Bottom CTA | Dark | 최종 예약 유도 밴드 | H1 + Primary CTA
+ Sticky CTA | — | 모바일 하단 고정 | Price + Primary CTA
Quick Info 그리드 예시
.ev-quick-info {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 1.5rem;
padding: 2rem;
background: #fff;
border-radius: var(--radius-md);
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
}
@media (min-width: 768px) {
.ev-quick-info {
grid-template-columns: repeat(4, 1fr);
}
}
.ev-quick-info__item {
display: flex;
flex-direction: column;
gap: 0.375rem;
}
.ev-quick-info__label {
font-size: var(--text-overline);
font-weight: 500;
color: var(--color-ink-caption);
text-transform: uppercase;
letter-spacing: 0.06em;
}
.ev-quick-info__value {
font-family: var(--font-display);
font-size: 1.125rem;
font-weight: 600;
color: var(--color-ink);
}8. 반응형 브레이크포인트 참조
K.Rideus 기존 브레이크포인트와 일치시킨다:
/* 모바일 퍼스트 */
/* base: ~767px */
@media (min-width: 768px) { /* 태블릿 */ }
@media (min-width: 1024px) { /* 데스크톱 */ }
@media (min-width: 1280px) { /* 와이드 */ }| 요소 | 모바일 | 태블릿 | 데스크톱 |
|---|---|---|---|
| 카드 그리드 | 1col | 2col | 3~4col |
| 섹션 패딩 y | 3rem | 4rem | 5rem~6rem |
| 컨테이너 패딩 x | 1.5rem | 2rem | 3rem |
| Display 폰트 | 2rem | 2.5rem | 3rem |
| Sticky CTA | 표시 | 표시 | 숨김 |
9. 체크리스트: 이벤트 페이지 디자인 리뷰
- ATF에 이벤트명, 날짜, 가격, CTA가 모두 보이는가?
- 정보 위계가 5~6레벨 이내인가?
- 섹션 톤이 최소 3종(Dark/Mid/Light)으로 교차하는가?
- 색상이 60-30-10 비율을 따르는가?
- Primary CTA가 페이지에 2개 이내인가?
- 모바일에 Sticky CTA가 있는가?
- 카드 내 정보가 5개 요소 이내인가?
- 호버가 단순 색변화가 아닌 가치를 더하는가?
- 타이포 스케일이 Major Third (1.25) 기준인가?
- 한글 본문 line-height가 1.6~1.8인가?
- 긴급성 표현이 사실 기반인가? (거짓 카운트다운 없음)
- 최소 터치 타겟이 48px인가?
- 보라색 계열을 사용하지 않았는가? (AETHER 규칙)
