style.scss 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880
  1. $bp-mobile-max: 767px;
  2. $bp-tablet-min: 768px;
  3. $bp-tablet-max: 1023px;
  4. $bp-pc: 1024px;
  5. #rankingPage {
  6. max-width: 1200px;
  7. margin: 0 auto;
  8. padding: 1.5rem 1rem 4rem;
  9. @media (max-width: $bp-mobile-max) {
  10. padding: 1rem 0.75rem 6rem;
  11. }
  12. }
  13. .ranking {
  14. &__header {
  15. display: flex;
  16. align-items: baseline;
  17. justify-content: space-between;
  18. gap: 0.75rem;
  19. flex-wrap: wrap;
  20. padding: 0.25rem 0 1rem;
  21. h1 {
  22. font-size: 1.75rem;
  23. font-weight: 700;
  24. margin: 0;
  25. @media (max-width: $bp-mobile-max) {
  26. font-size: 1.4rem;
  27. }
  28. }
  29. }
  30. &__tabs-wrap {
  31. display: flex;
  32. align-items: stretch;
  33. gap: 0.25rem;
  34. margin-bottom: 1rem;
  35. border-bottom: 1px solid hsl(var(--border));
  36. }
  37. &__tabs-arrow {
  38. // 기본 숨김 (데스크톱: 탭 5개가 모두 보여 불필요)
  39. display: none;
  40. align-items: center;
  41. justify-content: center;
  42. width: 32px;
  43. flex-shrink: 0;
  44. background: transparent;
  45. border: none;
  46. color: hsl(var(--muted-foreground));
  47. cursor: pointer;
  48. transition: color 0.15s ease;
  49. &:hover {
  50. color: hsl(var(--foreground));
  51. }
  52. &:focus-visible {
  53. outline: 2px solid hsl(var(--primary));
  54. outline-offset: -2px;
  55. border-radius: 4px;
  56. }
  57. @media (max-width: $bp-mobile-max) {
  58. // 모바일: overflow 스크롤 유도용 화살표 표시
  59. display: inline-flex;
  60. }
  61. }
  62. &__tabs {
  63. display: flex;
  64. gap: 0.5rem;
  65. overflow-x: auto;
  66. overflow-y: hidden;
  67. padding: 0.25rem 0.25rem 0;
  68. flex: 1 1 auto;
  69. min-width: 0;
  70. cursor: grab;
  71. user-select: none;
  72. -webkit-user-select: none;
  73. touch-action: pan-y;
  74. &:active {
  75. cursor: grabbing;
  76. }
  77. &::-webkit-scrollbar {
  78. height: 4px;
  79. }
  80. @media (max-width: $bp-mobile-max) {
  81. // 모바일: 스크롤바 숨김 + 좌우 fade mask (더 있다는 시각 힌트)
  82. scrollbar-width: none;
  83. -ms-overflow-style: none;
  84. mask-image: linear-gradient(
  85. to right,
  86. transparent 0,
  87. #000 16px,
  88. #000 calc(100% - 16px),
  89. transparent 100%
  90. );
  91. -webkit-mask-image: linear-gradient(
  92. to right,
  93. transparent 0,
  94. #000 16px,
  95. #000 calc(100% - 16px),
  96. transparent 100%
  97. );
  98. &::-webkit-scrollbar {
  99. display: none;
  100. }
  101. }
  102. }
  103. &__tabs-item {
  104. display: inline-flex;
  105. align-items: center;
  106. gap: 0.4rem;
  107. padding: 0.5rem 1rem;
  108. margin-bottom: -1px;
  109. font-size: 0.95rem;
  110. font-weight: 600;
  111. color: hsl(var(--muted-foreground));
  112. border-bottom: 2px solid transparent;
  113. white-space: nowrap;
  114. flex-shrink: 0;
  115. -webkit-user-drag: none;
  116. -webkit-tap-highlight-color: transparent;
  117. transition: color 0.15s ease, border-color 0.15s ease;
  118. &:hover {
  119. color: hsl(var(--foreground));
  120. }
  121. &:focus-visible {
  122. outline: 2px solid hsl(var(--primary));
  123. outline-offset: 2px;
  124. border-radius: 4px;
  125. }
  126. &--active {
  127. color: hsl(var(--primary));
  128. border-bottom-color: hsl(var(--primary));
  129. }
  130. }
  131. &__filters {
  132. display: flex;
  133. flex-direction: row;
  134. flex-wrap: wrap;
  135. gap: 0.5rem;
  136. margin-bottom: 1.5rem;
  137. @media (max-width: $bp-mobile-max) {
  138. gap: 0.4rem;
  139. }
  140. }
  141. &__filter-select {
  142. padding: 0.4rem 0.7rem;
  143. font-size: 0.88rem;
  144. color: hsl(var(--foreground));
  145. background: hsl(var(--background));
  146. border: 1px solid hsl(var(--border));
  147. border-radius: 6px;
  148. cursor: pointer;
  149. &:focus {
  150. outline: none;
  151. border-color: hsl(var(--primary));
  152. }
  153. }
  154. &__list-note {
  155. margin: 1rem 0 0.5rem;
  156. font-size: 0.8rem;
  157. color: hsl(var(--muted-foreground));
  158. }
  159. &__list {
  160. display: flex;
  161. flex-direction: column;
  162. gap: 0.25rem;
  163. margin-top: 1.5rem;
  164. border-top: 1px solid hsl(var(--border));
  165. &-header {
  166. display: grid;
  167. grid-template-columns: 60px 60px 1fr 180px 120px 120px;
  168. gap: 0.75rem;
  169. padding: 0.75rem 1rem;
  170. font-size: 0.8rem;
  171. font-weight: 600;
  172. color: hsl(var(--muted-foreground));
  173. background: hsl(var(--muted) / 0.3);
  174. @media (max-width: $bp-tablet-max) {
  175. grid-template-columns: 48px 48px 1fr 100px;
  176. }
  177. @media (max-width: $bp-mobile-max) {
  178. display: none;
  179. }
  180. // 행 콘텐츠 정렬에 맞춰 헤더 텍스트 정렬 (rank/change=center, amount/broadcast=right)
  181. &--aligned {
  182. span:nth-child(1),
  183. span:nth-child(2) {
  184. text-align: center;
  185. }
  186. span:nth-child(5),
  187. span:nth-child(6) {
  188. text-align: right;
  189. }
  190. }
  191. }
  192. }
  193. &__row {
  194. display: grid;
  195. grid-template-columns: 60px 60px 1fr 180px 120px 120px;
  196. gap: 0.75rem;
  197. align-items: center;
  198. padding: 0.9rem 1rem;
  199. border-bottom: 1px solid hsl(var(--border));
  200. transition: background 0.15s ease;
  201. &:hover {
  202. background: hsl(var(--muted) / 0.25);
  203. }
  204. @media (max-width: $bp-tablet-max) {
  205. grid-template-columns: 48px 48px 1fr 100px;
  206. .ranking__row-progress,
  207. .ranking__row-broadcast {
  208. display: none;
  209. }
  210. }
  211. @media (max-width: $bp-mobile-max) {
  212. grid-template-columns: 40px 1fr auto;
  213. gap: 0.5rem;
  214. padding: 0.75rem 0.5rem;
  215. .ranking__row-change {
  216. display: none;
  217. }
  218. }
  219. &--mine {
  220. background: hsl(var(--primary) / 0.08);
  221. border-left: 3px solid hsl(var(--primary));
  222. }
  223. &--rank-1 {
  224. background: linear-gradient(90deg, rgba(255, 215, 0, 0.18), rgba(255, 215, 0, 0.04) 60%, transparent);
  225. border-bottom-color: rgba(255, 215, 0, 0.4);
  226. }
  227. &--rank-2 {
  228. background: linear-gradient(90deg, rgba(192, 192, 192, 0.18), rgba(192, 192, 192, 0.04) 60%, transparent);
  229. border-bottom-color: rgba(192, 192, 192, 0.4);
  230. }
  231. &--rank-3 {
  232. background: linear-gradient(90deg, rgba(205, 127, 50, 0.2), rgba(205, 127, 50, 0.05) 60%, transparent);
  233. border-bottom-color: rgba(205, 127, 50, 0.4);
  234. }
  235. &-rank {
  236. font-weight: 700;
  237. font-size: 1rem;
  238. text-align: center;
  239. }
  240. &-change {
  241. display: flex;
  242. justify-content: center;
  243. }
  244. &-member {
  245. min-width: 0;
  246. }
  247. &-member-link {
  248. display: inline-flex;
  249. align-items: center;
  250. gap: 0.6rem;
  251. min-width: 0;
  252. color: inherit;
  253. &:hover .ranking__row-name {
  254. color: hsl(var(--primary));
  255. }
  256. }
  257. &-name {
  258. display: flex;
  259. flex-direction: column;
  260. font-weight: 600;
  261. font-size: 0.95rem;
  262. min-width: 0;
  263. overflow: hidden;
  264. text-overflow: ellipsis;
  265. }
  266. &-channel {
  267. font-size: 0.75rem;
  268. font-weight: 400;
  269. color: hsl(var(--muted-foreground));
  270. }
  271. &-name-main {
  272. display: inline-flex;
  273. align-items: center;
  274. gap: 0.4rem;
  275. }
  276. &-progress {
  277. width: 100%;
  278. }
  279. &-progress-bar {
  280. position: relative;
  281. height: 6px;
  282. background: hsl(var(--muted));
  283. border-radius: 9999px;
  284. overflow: hidden;
  285. span {
  286. display: block;
  287. height: 100%;
  288. width: var(--progress, 0%);
  289. background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--primary) / 0.6));
  290. transition: width 0.3s ease;
  291. }
  292. &--tier-1 span {
  293. background: linear-gradient(90deg, #FFD700 0%, #FFA500 100%);
  294. }
  295. &--tier-2 span {
  296. background: linear-gradient(90deg, hsl(var(--primary)), hsl(var(--primary) / 0.55));
  297. }
  298. &--tier-3 span {
  299. background: linear-gradient(90deg, hsl(var(--muted-foreground) / 0.85), hsl(var(--muted-foreground) / 0.4));
  300. }
  301. }
  302. &-amount {
  303. font-weight: 700;
  304. font-size: 0.95rem;
  305. text-align: right;
  306. &--accent {
  307. color: #e11d48;
  308. font-weight: 800;
  309. }
  310. }
  311. &-broadcast {
  312. display: flex;
  313. flex-direction: column;
  314. align-items: flex-end;
  315. font-size: 0.88rem;
  316. small {
  317. font-size: 0.72rem;
  318. color: hsl(var(--muted-foreground));
  319. }
  320. &--accent {
  321. color: #7c3aed;
  322. font-weight: 700;
  323. }
  324. }
  325. }
  326. &__change {
  327. display: inline-flex;
  328. align-items: center;
  329. gap: 0.15rem;
  330. padding: 0.1rem 0.4rem;
  331. font-size: 0.72rem;
  332. font-weight: 600;
  333. border-radius: 9999px;
  334. &--up {
  335. color: #16a34a;
  336. background: rgba(22, 163, 74, 0.1);
  337. }
  338. &--down {
  339. color: #dc2626;
  340. background: rgba(220, 38, 38, 0.1);
  341. }
  342. &--same {
  343. color: hsl(var(--muted-foreground));
  344. background: hsl(var(--muted));
  345. }
  346. &--new {
  347. color: #7c3aed;
  348. background: rgba(124, 58, 237, 0.12);
  349. }
  350. }
  351. &__grade-badge {
  352. display: inline-flex;
  353. align-items: center;
  354. gap: 0.2rem;
  355. padding: 0.1rem 0.45rem;
  356. font-size: 0.72rem;
  357. font-weight: 600;
  358. border-radius: 9999px;
  359. background: hsl(var(--muted) / 0.7);
  360. color: var(--grade-color, inherit);
  361. }
  362. &__grade-icon {
  363. width: 14px;
  364. height: 14px;
  365. object-fit: contain;
  366. }
  367. &__grade-name {
  368. font-weight: 600;
  369. }
  370. &__empty {
  371. padding: 3rem 1rem;
  372. text-align: center;
  373. color: hsl(var(--muted-foreground));
  374. }
  375. &__hall-controls {
  376. display: flex;
  377. flex-wrap: wrap;
  378. align-items: center;
  379. gap: 1rem;
  380. margin-bottom: 1.5rem;
  381. @media (max-width: $bp-mobile-max) {
  382. gap: 0.75rem;
  383. }
  384. }
  385. &__header-sub {
  386. margin-top: 0.4rem;
  387. font-size: 0.88rem;
  388. color: hsl(var(--muted-foreground));
  389. }
  390. &__hall-period {
  391. display: inline-flex;
  392. flex-wrap: wrap;
  393. gap: 0.3rem;
  394. margin-left: auto; // flex 부모 안에서 우측으로 밀어냄 (탭은 좌측, 기간은 우측)
  395. @media (max-width: $bp-mobile-max) {
  396. margin-left: 0; // 모바일: wrap 된 상태에서 좌측 정렬
  397. }
  398. }
  399. &__hall-period-btn {
  400. padding: 0.4rem 0.85rem;
  401. font-size: 0.85rem;
  402. font-weight: 500;
  403. color: hsl(var(--muted-foreground));
  404. background: hsl(var(--background));
  405. border: 1px solid hsl(var(--border));
  406. border-radius: 6px;
  407. cursor: pointer;
  408. transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease;
  409. &:hover {
  410. color: hsl(var(--foreground));
  411. border-color: hsl(var(--foreground) / 0.3);
  412. }
  413. &:focus-visible {
  414. outline: 2px solid hsl(var(--primary));
  415. outline-offset: 2px;
  416. }
  417. &--active {
  418. color: hsl(var(--primary-foreground));
  419. background: hsl(var(--primary));
  420. border-color: hsl(var(--primary));
  421. }
  422. }
  423. &__hall-top100 {
  424. margin-top: 2rem;
  425. h2 {
  426. display: inline-flex;
  427. align-items: center;
  428. gap: 0.4rem;
  429. font-size: 1.15rem;
  430. font-weight: 700;
  431. margin-bottom: 0.75rem;
  432. svg {
  433. color: hsl(var(--primary));
  434. }
  435. }
  436. }
  437. &__medal-badge {
  438. display: inline-flex;
  439. flex-direction: column;
  440. align-items: center;
  441. gap: 0.1rem;
  442. line-height: 1;
  443. strong {
  444. font-size: 0.82rem;
  445. font-weight: 800;
  446. }
  447. &--1 {
  448. color: #b8860b;
  449. svg {
  450. color: #FFD700;
  451. filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.18));
  452. }
  453. }
  454. &--2 {
  455. color: #4b5563;
  456. svg {
  457. color: #C0C0C0;
  458. }
  459. }
  460. &--3 {
  461. color: #92400e;
  462. svg {
  463. color: #CD7F32;
  464. }
  465. }
  466. }
  467. &__my-bar {
  468. position: fixed;
  469. bottom: 16px;
  470. left: 50%;
  471. transform: translateX(-50%);
  472. display: flex;
  473. align-items: center;
  474. gap: 0.75rem;
  475. padding: 0.75rem 1.25rem;
  476. background: hsl(var(--background));
  477. border: 1px solid hsl(var(--primary));
  478. border-radius: 9999px;
  479. box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
  480. z-index: 40;
  481. @media (max-width: $bp-mobile-max) {
  482. left: 0;
  483. right: 0;
  484. bottom: 0;
  485. transform: none;
  486. border-radius: 0;
  487. border-left: 0;
  488. border-right: 0;
  489. border-bottom: 0;
  490. justify-content: space-between;
  491. width: 100%;
  492. }
  493. &-icon {
  494. display: inline-flex;
  495. align-items: center;
  496. justify-content: center;
  497. width: 32px;
  498. height: 32px;
  499. background: hsl(var(--primary));
  500. color: hsl(var(--primary-foreground));
  501. border-radius: 9999px;
  502. }
  503. &-text {
  504. display: flex;
  505. align-items: center;
  506. gap: 0.4rem;
  507. font-size: 0.95rem;
  508. font-weight: 600;
  509. strong {
  510. font-size: 0.85rem;
  511. color: hsl(var(--muted-foreground));
  512. }
  513. }
  514. &-up {
  515. color: #16a34a;
  516. font-style: normal;
  517. }
  518. &-down {
  519. color: #dc2626;
  520. font-style: normal;
  521. }
  522. &-amount {
  523. font-weight: 700;
  524. color: hsl(var(--primary));
  525. }
  526. }
  527. }
  528. /* ─────────────── 시상대 (Podium) ─────────────── */
  529. .ranking-podium {
  530. position: relative;
  531. margin: 1.5rem 0 2rem;
  532. padding: 1.5rem 1rem;
  533. border-radius: 16px;
  534. background: radial-gradient(ellipse at center, hsl(var(--muted) / 0.4), transparent 70%);
  535. overflow: hidden;
  536. &__stage {
  537. display: grid;
  538. grid-template-columns: 1fr 1.3fr 1fr;
  539. align-items: end;
  540. gap: 1.5rem;
  541. max-width: 820px;
  542. margin: 0 auto;
  543. @media (max-width: $bp-tablet-max) {
  544. gap: 1rem;
  545. max-width: 620px;
  546. }
  547. @media (max-width: $bp-mobile-max) {
  548. grid-template-columns: 1fr;
  549. gap: 0.75rem;
  550. }
  551. }
  552. &__winner {
  553. position: relative;
  554. display: flex;
  555. flex-direction: column;
  556. align-items: center;
  557. gap: 0.5rem;
  558. padding: 2.5rem 1rem 1.25rem;
  559. border-radius: 16px;
  560. text-align: center;
  561. box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
  562. transition: transform 0.25s ease;
  563. &:hover {
  564. transform: translateY(-4px);
  565. }
  566. &--first {
  567. order: 2;
  568. min-height: 280px;
  569. background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
  570. color: #3a2600;
  571. .ranking-podium__avatar {
  572. width: 120px;
  573. height: 120px;
  574. border: 4px solid rgba(255, 255, 255, 0.8);
  575. box-shadow: 0 0 24px rgba(255, 215, 0, 0.6);
  576. }
  577. @media (max-width: $bp-tablet-max) {
  578. min-height: 240px;
  579. .ranking-podium__avatar {
  580. width: 96px;
  581. height: 96px;
  582. }
  583. }
  584. @media (max-width: $bp-mobile-max) {
  585. order: 1;
  586. flex-direction: row;
  587. align-items: center;
  588. min-height: 140px;
  589. padding: 1rem 1.25rem;
  590. text-align: left;
  591. .ranking-podium__avatar {
  592. width: 80px;
  593. height: 80px;
  594. }
  595. }
  596. }
  597. &--second {
  598. order: 1;
  599. min-height: 230px;
  600. background: linear-gradient(135deg, #C0C0C0 0%, #A8A8A8 100%);
  601. color: #1f2937;
  602. .ranking-podium__avatar {
  603. width: 96px;
  604. height: 96px;
  605. border: 3px solid rgba(255, 255, 255, 0.8);
  606. }
  607. @media (max-width: $bp-tablet-max) {
  608. min-height: 200px;
  609. .ranking-podium__avatar {
  610. width: 80px;
  611. height: 80px;
  612. }
  613. }
  614. @media (max-width: $bp-mobile-max) {
  615. order: 2;
  616. }
  617. }
  618. &--third {
  619. order: 3;
  620. min-height: 210px;
  621. background: linear-gradient(135deg, #CD7F32 0%, #A0522D 100%);
  622. color: #fff8f0;
  623. .ranking-podium__avatar {
  624. width: 96px;
  625. height: 96px;
  626. border: 3px solid rgba(255, 255, 255, 0.7);
  627. }
  628. @media (max-width: $bp-tablet-max) {
  629. min-height: 190px;
  630. .ranking-podium__avatar {
  631. width: 80px;
  632. height: 80px;
  633. }
  634. }
  635. }
  636. &--empty {
  637. opacity: 0.5;
  638. box-shadow: none;
  639. }
  640. @media (max-width: $bp-mobile-max) {
  641. min-height: unset !important;
  642. padding: 1rem;
  643. }
  644. }
  645. &__link {
  646. display: inline-flex;
  647. flex-direction: column;
  648. align-items: center;
  649. gap: 0.4rem;
  650. color: inherit;
  651. @media (max-width: $bp-mobile-max) {
  652. flex-direction: row;
  653. gap: 1rem;
  654. align-items: center;
  655. }
  656. }
  657. &__crown {
  658. position: absolute;
  659. top: 0.25rem;
  660. left: 50%;
  661. transform: translate(-50%, -60%);
  662. color: #FFF59D;
  663. filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.3));
  664. }
  665. &__medal {
  666. position: absolute;
  667. top: 0.5rem;
  668. right: 0.75rem;
  669. color: rgba(255, 255, 255, 0.9);
  670. }
  671. &__rank-number {
  672. position: absolute;
  673. bottom: -0.5rem;
  674. left: 0.75rem;
  675. font-size: 5rem;
  676. font-weight: 900;
  677. line-height: 0.8;
  678. color: rgba(255, 255, 255, 0.25);
  679. -webkit-user-select: none;
  680. -moz-user-select: none;
  681. -ms-user-select: none;
  682. user-select: none;
  683. pointer-events: none;
  684. @media (max-width: $bp-mobile-max) {
  685. font-size: 3.5rem;
  686. bottom: 0;
  687. }
  688. }
  689. &__avatar {
  690. border-radius: 9999px;
  691. background: #fff;
  692. }
  693. &__name {
  694. font-size: 1.1rem;
  695. font-weight: 700;
  696. line-height: 1.2;
  697. }
  698. &__channel {
  699. font-size: 0.82rem;
  700. opacity: 0.85;
  701. }
  702. &__amount {
  703. margin-top: 0.25rem;
  704. font-size: 1rem;
  705. font-weight: 700;
  706. }
  707. &__meta {
  708. font-size: 0.78rem;
  709. opacity: 0.85;
  710. }
  711. &__shimmer {
  712. position: absolute;
  713. top: 0;
  714. left: 0;
  715. right: 0;
  716. bottom: 0;
  717. pointer-events: none;
  718. background: linear-gradient(120deg, transparent 0%, rgba(255, 255, 255, 0.4) 50%, transparent 100%);
  719. background-size: 200% 100%;
  720. animation: ranking-podium-shimmer 3s ease-in-out infinite;
  721. border-radius: inherit;
  722. }
  723. }
  724. @keyframes ranking-podium-shimmer {
  725. 0% {
  726. background-position: 200% 0;
  727. }
  728. 100% {
  729. background-position: -200% 0;
  730. }
  731. }
  732. @media (prefers-reduced-motion: reduce) {
  733. .ranking-podium__shimmer {
  734. animation: none;
  735. opacity: 0.2;
  736. }
  737. .ranking-podium__winner {
  738. transition: none;
  739. &:hover {
  740. transform: none;
  741. }
  742. }
  743. }