reward.scss 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. // ─────────────────────────────────────────────────────────────
  2. // D3 보상/응원/지위아이템 — 장착 배지 · 닉네임 이펙트 · 레벨 진행바 · 상점 미리보기
  3. // D6 토큰 변수만 사용. 등락엔 --az-accent 미사용(D6 원칙).
  4. // ─────────────────────────────────────────────────────────────
  5. // ── 장착 배지 (닉네임 옆) ──
  6. .equipped-badge {
  7. display: inline-flex;
  8. align-items: center;
  9. gap: 3px;
  10. margin-left: var(--sp-2);
  11. padding: 1px 7px;
  12. border-radius: 999px;
  13. background: var(--bg-subtle);
  14. border: 1px solid var(--border-default);
  15. font-size: var(--fs-2xs);
  16. font-weight: 600;
  17. line-height: 1.5;
  18. white-space: nowrap;
  19. vertical-align: middle;
  20. &__icon {
  21. width: 12px;
  22. height: 12px;
  23. object-fit: contain;
  24. }
  25. &__emoji {
  26. font-size: var(--fs-xs);
  27. line-height: 1;
  28. }
  29. &__label {
  30. max-width: 8em;
  31. overflow: hidden;
  32. text-overflow: ellipsis;
  33. }
  34. }
  35. // ── 닉네임 이펙트 ──
  36. .nickname-effect {
  37. font-weight: 700;
  38. // EffectPayload.animation 키에 대응하는 프리셋 (없으면 색상만)
  39. &--glow {
  40. text-shadow: 0 0 6px currentColor;
  41. }
  42. &--pulse {
  43. animation: nickname-pulse 1.6s ease-in-out infinite;
  44. }
  45. &--gradient {
  46. background: linear-gradient(90deg, var(--az-accent), var(--price-up));
  47. -webkit-background-clip: text;
  48. background-clip: text;
  49. color: transparent;
  50. }
  51. }
  52. @keyframes nickname-pulse {
  53. 0%, 100% { opacity: 1; }
  54. 50% { opacity: 0.55; }
  55. }
  56. // 접근성 — 모션 최소화 선호 시 애니메이션 정지
  57. @media (prefers-reduced-motion: reduce) {
  58. .nickname-effect--pulse {
  59. animation: none;
  60. }
  61. }
  62. // ── 레벨/보상 위젯 ──
  63. .level-card {
  64. display: flex;
  65. flex-direction: column;
  66. gap: var(--sp-5);
  67. padding: var(--sp-6);
  68. border: 1px solid var(--border-default);
  69. border-radius: var(--radius);
  70. background: var(--bg-elevated);
  71. &__grade {
  72. display: flex;
  73. align-items: center;
  74. gap: var(--sp-4);
  75. }
  76. &__grade-img {
  77. width: 40px;
  78. height: 40px;
  79. object-fit: contain;
  80. }
  81. &__grade-name {
  82. font-size: var(--fs-xl);
  83. font-weight: 800;
  84. }
  85. &__exp {
  86. font-size: var(--fs-sm);
  87. color: var(--text-muted);
  88. font-variant-numeric: tabular-nums;
  89. }
  90. &__bar {
  91. position: relative;
  92. height: 12px;
  93. border-radius: 999px;
  94. background: var(--bg-subtle);
  95. overflow: hidden;
  96. }
  97. &__bar-fill {
  98. position: absolute;
  99. inset: 0 auto 0 0;
  100. background: var(--az-accent);
  101. border-radius: 999px;
  102. transition: width .3s ease;
  103. }
  104. &__next {
  105. font-size: var(--fs-sm);
  106. color: var(--text-secondary);
  107. font-variant-numeric: tabular-nums;
  108. }
  109. }
  110. // ── 오늘 보상 캡 표 ──
  111. .reward-today {
  112. border: 1px solid var(--border-default);
  113. border-radius: var(--radius);
  114. overflow: hidden;
  115. &__header {
  116. display: flex;
  117. justify-content: space-between;
  118. gap: var(--sp-4);
  119. padding: var(--sp-5) var(--sp-6);
  120. background: var(--bg-elevated);
  121. border-bottom: 1px solid var(--border-default);
  122. font-weight: 700;
  123. }
  124. &__total {
  125. font-variant-numeric: tabular-nums;
  126. color: var(--az-accent);
  127. }
  128. &__row {
  129. display: grid;
  130. grid-template-columns: 1fr auto auto;
  131. gap: var(--sp-4);
  132. align-items: center;
  133. padding: var(--sp-4) var(--sp-6);
  134. border-bottom: 1px solid var(--border-light);
  135. font-size: var(--fs-sm);
  136. &:last-child {
  137. border-bottom: 0;
  138. }
  139. }
  140. &__name {
  141. font-weight: 600;
  142. }
  143. &__earned {
  144. font-variant-numeric: tabular-nums;
  145. color: var(--text-secondary);
  146. }
  147. &__cap {
  148. font-variant-numeric: tabular-nums;
  149. font-size: var(--fs-xs);
  150. color: var(--text-muted);
  151. }
  152. &__cap--full {
  153. color: var(--price-down);
  154. }
  155. }