style(profile): 멤버십 등급 칩을 저자극 프리미엄 톤으로 개선

맥락:
- 프로필 왼쪽 등급 칩의 글자가 작아 위계가 약했고, 유료 멤버 대우가 직관적으로 전달되지 않았다.

변경사항:
- MembershipTierBadge의 타이포를 text-xs 이상으로 상향하고 칩 높이/패딩을 키워 가독성을 개선했다.
- PRO는 PRO MEMBER 라벨과 조용한 그라데이션/내부 하이라이트/부드러운 그림자를 적용해 프리미엄 톤을 강화했다.
- NORMAL/TEAM도 등급별 표면 톤과 점 마커를 분리해 차분한 위계를 유지했다.
- docs/session_brief.md, docs/90_current_state.md에 이번 변경 내역과 리스크를 반영했다.

검증:
- npx tsc --noEmit

세션-상태: 멤버십 배지의 크기와 재질감을 상향해 대우받는 인상을 강화했다.
세션-다음: RoomSheet 인원수 기반 UI의 큐레이션형 치환 범위를 확정해야 한다.
세션-리스크: PRO MEMBER 라벨이 작은 폭에서 프로필과 밀집해 보일 수 있어 실제 기기 간격 점검이 필요하다.
This commit is contained in:
2026-03-01 11:32:03 +09:00
parent a3ecb7b6c2
commit 6069457b4e
3 changed files with 37 additions and 6 deletions

View File

@@ -4,18 +4,39 @@ interface MembershipTierBadgeProps {
tier: MembershipTier;
}
const TIER_STYLES: Record<MembershipTier, string> = {
pro: 'border-brand-primary/28 bg-brand-primary/12 text-brand-primary/82',
normal: 'border-brand-dark/18 bg-white/68 text-brand-dark/66',
team: 'border-emerald-600/28 bg-emerald-500/10 text-emerald-700',
const TIER_META: Record<
MembershipTier,
{ label: string; surfaceClass: string; dotClass: string }
> = {
pro: {
label: 'PRO MEMBER',
surfaceClass:
'border-amber-700/34 bg-[linear-gradient(120deg,rgba(254,243,199,0.88)_0%,rgba(250,230,170,0.7)_55%,rgba(244,216,125,0.6)_100%)] text-amber-900 shadow-[inset_0_1px_0_rgba(255,255,255,0.62),0_8px_20px_rgba(120,82,20,0.14)]',
dotClass: 'bg-amber-700/72',
},
normal: {
label: 'NORMAL',
surfaceClass:
'border-brand-dark/16 bg-white/76 text-brand-dark/68 shadow-[inset_0_1px_0_rgba(255,255,255,0.55),0_6px_16px_rgba(15,23,42,0.08)]',
dotClass: 'bg-brand-dark/34',
},
team: {
label: 'TEAM',
surfaceClass:
'border-cyan-900/24 bg-[linear-gradient(120deg,rgba(224,242,254,0.86)_0%,rgba(209,250,229,0.68)_56%,rgba(186,230,253,0.64)_100%)] text-cyan-900 shadow-[inset_0_1px_0_rgba(255,255,255,0.58),0_8px_18px_rgba(8,78,99,0.12)]',
dotClass: 'bg-cyan-900/52',
},
};
export const MembershipTierBadge = ({ tier }: MembershipTierBadgeProps) => {
const tierMeta = TIER_META[tier];
return (
<span
className={`inline-flex items-center rounded-full border px-2.5 py-1 text-[10px] font-semibold tracking-[0.1em] ${TIER_STYLES[tier]}`}
className={`inline-flex h-8 items-center gap-1.5 rounded-full border px-3 text-xs font-semibold tracking-[0.08em] backdrop-blur-sm ${tierMeta.surfaceClass}`}
>
{tier.toUpperCase()}
<span aria-hidden className={`h-1.5 w-1.5 rounded-full ${tierMeta.dotClass}`} />
{tierMeta.label}
</span>
);
};