loading.css 24 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178
  1. .dot-elastic {
  2. position: relative;
  3. width: 10px;
  4. height: 10px;
  5. border-radius: 5px;
  6. background-color: #9880ff;
  7. color: #9880ff;
  8. animation: dotElastic 1s infinite linear;
  9. }
  10. .dot-elastic::before, .dot-elastic::after {
  11. content: '';
  12. display: inline-block;
  13. position: absolute;
  14. top: 0;
  15. }
  16. .dot-elastic::before {
  17. left: -15px;
  18. width: 10px;
  19. height: 10px;
  20. border-radius: 5px;
  21. background-color: #9880ff;
  22. color: #9880ff;
  23. animation: dotElasticBefore 1s infinite linear;
  24. }
  25. .dot-elastic::after {
  26. left: 15px;
  27. width: 10px;
  28. height: 10px;
  29. border-radius: 5px;
  30. background-color: #9880ff;
  31. color: #9880ff;
  32. animation: dotElasticAfter 1s infinite linear;
  33. }
  34. @keyframes dotElasticBefore {
  35. 0% {
  36. transform: scale(1, 1);
  37. }
  38. 25% {
  39. transform: scale(1, 1.5);
  40. }
  41. 50% {
  42. transform: scale(1, 0.67);
  43. }
  44. 75% {
  45. transform: scale(1, 1);
  46. }
  47. 100% {
  48. transform: scale(1, 1);
  49. }
  50. }
  51. @keyframes dotElastic {
  52. 0% {
  53. transform: scale(1, 1);
  54. }
  55. 25% {
  56. transform: scale(1, 1);
  57. }
  58. 50% {
  59. transform: scale(1, 1.5);
  60. }
  61. 75% {
  62. transform: scale(1, 1);
  63. }
  64. 100% {
  65. transform: scale(1, 1);
  66. }
  67. }
  68. @keyframes dotElasticAfter {
  69. 0% {
  70. transform: scale(1, 1);
  71. }
  72. 25% {
  73. transform: scale(1, 1);
  74. }
  75. 50% {
  76. transform: scale(1, 0.67);
  77. }
  78. 75% {
  79. transform: scale(1, 1.5);
  80. }
  81. 100% {
  82. transform: scale(1, 1);
  83. }
  84. }
  85. /**
  86. * ==============================================
  87. * Dot Pulse
  88. * ==============================================
  89. */
  90. .dot-pulse {
  91. position: relative;
  92. left: -9999px;
  93. width: 10px;
  94. height: 10px;
  95. border-radius: 5px;
  96. background-color: var(--main);
  97. color: var(--main);
  98. box-shadow: 9999px 0 0 -5px var(--main);
  99. animation: dotPulse 1.5s infinite linear;
  100. animation-delay: .25s;
  101. }
  102. .dot-pulse::before, .dot-pulse::after {
  103. content: '';
  104. display: inline-block;
  105. position: absolute;
  106. top: 0;
  107. width: 10px;
  108. height: 10px;
  109. border-radius: 5px;
  110. background-color: var(--main);
  111. color: var(--main);
  112. }
  113. .dot-pulse::before {
  114. box-shadow: 9984px 0 0 -5px var(--main);
  115. animation: dotPulseBefore 1.5s infinite linear;
  116. animation-delay: 0s;
  117. }
  118. .dot-pulse::after {
  119. box-shadow: 10014px 0 0 -5px var(--main);
  120. animation: dotPulseAfter 1.5s infinite linear;
  121. animation-delay: .5s;
  122. }
  123. @keyframes dotPulseBefore {
  124. 0% {
  125. box-shadow: 9984px 0 0 -5px var(--main);
  126. }
  127. 30% {
  128. box-shadow: 9984px 0 0 2px var(--main);
  129. }
  130. 60%,
  131. 100% {
  132. box-shadow: 9984px 0 0 -5px var(--main);
  133. }
  134. }
  135. @keyframes dotPulse {
  136. 0% {
  137. box-shadow: 9999px 0 0 -5px var(--main);
  138. }
  139. 30% {
  140. box-shadow: 9999px 0 0 2px var(--main);
  141. }
  142. 60%,
  143. 100% {
  144. box-shadow: 9999px 0 0 -5px var(--main);
  145. }
  146. }
  147. @keyframes dotPulseAfter {
  148. 0% {
  149. box-shadow: 10014px 0 0 -5px var(--main);
  150. }
  151. 30% {
  152. box-shadow: 10014px 0 0 2px var(--main);
  153. }
  154. 60%,
  155. 100% {
  156. box-shadow: 10014px 0 0 -5px var(--main);
  157. }
  158. }
  159. /**
  160. * ==============================================
  161. * Dot Flashing
  162. * ==============================================
  163. */
  164. .dot-flashing {
  165. position: relative;
  166. width: 10px;
  167. height: 10px;
  168. border-radius: 5px;
  169. background-color: #9880ff;
  170. color: #9880ff;
  171. animation: dotFlashing 1s infinite linear alternate;
  172. animation-delay: .5s;
  173. }
  174. .dot-flashing::before, .dot-flashing::after {
  175. content: '';
  176. display: inline-block;
  177. position: absolute;
  178. top: 0;
  179. }
  180. .dot-flashing::before {
  181. left: -15px;
  182. width: 10px;
  183. height: 10px;
  184. border-radius: 5px;
  185. background-color: #9880ff;
  186. color: #9880ff;
  187. animation: dotFlashing 1s infinite alternate;
  188. animation-delay: 0s;
  189. }
  190. .dot-flashing::after {
  191. left: 15px;
  192. width: 10px;
  193. height: 10px;
  194. border-radius: 5px;
  195. background-color: #9880ff;
  196. color: #9880ff;
  197. animation: dotFlashing 1s infinite alternate;
  198. animation-delay: 1s;
  199. }
  200. @keyframes dotFlashing {
  201. 0% {
  202. background-color: #9880ff;
  203. }
  204. 50%,
  205. 100% {
  206. background-color: #ebe6ff;
  207. }
  208. }
  209. /**
  210. * ==============================================
  211. * Dot Collision
  212. * ==============================================
  213. */
  214. .dot-collision {
  215. position: relative;
  216. width: 10px;
  217. height: 10px;
  218. border-radius: 5px;
  219. background-color: #9880ff;
  220. color: #9880ff;
  221. }
  222. .dot-collision::before, .dot-collision::after {
  223. content: '';
  224. display: inline-block;
  225. position: absolute;
  226. top: 0;
  227. }
  228. .dot-collision::before {
  229. left: -10px;
  230. width: 10px;
  231. height: 10px;
  232. border-radius: 5px;
  233. background-color: #9880ff;
  234. color: #9880ff;
  235. animation: dotCollisionBefore 2s infinite ease-in;
  236. }
  237. .dot-collision::after {
  238. left: 10px;
  239. width: 10px;
  240. height: 10px;
  241. border-radius: 5px;
  242. background-color: #9880ff;
  243. color: #9880ff;
  244. animation: dotCollisionAfter 2s infinite ease-in;
  245. animation-delay: 1s;
  246. }
  247. @keyframes dotCollisionBefore {
  248. 0%,
  249. 50%,
  250. 75%,
  251. 100% {
  252. transform: translateX(0);
  253. }
  254. 25% {
  255. transform: translateX(-15px);
  256. }
  257. }
  258. @keyframes dotCollisionAfter {
  259. 0%,
  260. 50%,
  261. 75%,
  262. 100% {
  263. transform: translateX(0);
  264. }
  265. 25% {
  266. transform: translateX(15px);
  267. }
  268. }
  269. /**
  270. * ==============================================
  271. * Dot Revolution
  272. * ==============================================
  273. */
  274. .dot-revolution {
  275. position: relative;
  276. width: 10px;
  277. height: 10px;
  278. border-radius: 5px;
  279. background-color: #9880ff;
  280. color: #9880ff;
  281. }
  282. .dot-revolution::before, .dot-revolution::after {
  283. content: '';
  284. display: inline-block;
  285. position: absolute;
  286. }
  287. .dot-revolution::before {
  288. left: 0;
  289. top: -15px;
  290. width: 10px;
  291. height: 10px;
  292. border-radius: 5px;
  293. background-color: #9880ff;
  294. color: #9880ff;
  295. transform-origin: 5px 20px;
  296. animation: dotRevolution 1.4s linear infinite;
  297. }
  298. .dot-revolution::after {
  299. left: 0;
  300. top: -30px;
  301. width: 10px;
  302. height: 10px;
  303. border-radius: 5px;
  304. background-color: #9880ff;
  305. color: #9880ff;
  306. transform-origin: 5px 35px;
  307. animation: dotRevolution 1s linear infinite;
  308. }
  309. @keyframes dotRevolution {
  310. 0% {
  311. transform: rotateZ(0deg) translate3d(0, 0, 0);
  312. }
  313. 100% {
  314. transform: rotateZ(360deg) translate3d(0, 0, 0);
  315. }
  316. }
  317. /**
  318. * ==============================================
  319. * Dot Carousel
  320. * ==============================================
  321. */
  322. .dot-carousel {
  323. position: relative;
  324. left: -9999px;
  325. width: 10px;
  326. height: 10px;
  327. border-radius: 5px;
  328. background-color: #9880ff;
  329. color: #9880ff;
  330. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  331. animation: dotCarousel 1.5s infinite linear;
  332. }
  333. @keyframes dotCarousel {
  334. 0% {
  335. box-shadow: 9984px 0 0 -1px #9880ff, 9999px 0 0 1px #9880ff, 10014px 0 0 -1px #9880ff;
  336. }
  337. 50% {
  338. box-shadow: 10014px 0 0 -1px #9880ff, 9984px 0 0 -1px #9880ff, 9999px 0 0 1px #9880ff;
  339. }
  340. 100% {
  341. box-shadow: 9999px 0 0 1px #9880ff, 10014px 0 0 -1px #9880ff, 9984px 0 0 -1px #9880ff;
  342. }
  343. }
  344. /**
  345. * ==============================================
  346. * Dot Typing
  347. * ==============================================
  348. */
  349. .dot-typing {
  350. position: relative;
  351. left: -9999px;
  352. width: 10px;
  353. height: 10px;
  354. border-radius: 5px;
  355. background-color: #9880ff;
  356. color: #9880ff;
  357. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  358. animation: dotTyping 1.5s infinite linear;
  359. }
  360. @keyframes dotTyping {
  361. 0% {
  362. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  363. }
  364. 16.667% {
  365. box-shadow: 9984px -10px 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  366. }
  367. 33.333% {
  368. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  369. }
  370. 50% {
  371. box-shadow: 9984px 0 0 0 #9880ff, 9999px -10px 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  372. }
  373. 66.667% {
  374. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  375. }
  376. 83.333% {
  377. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px -10px 0 0 #9880ff;
  378. }
  379. 100% {
  380. box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff;
  381. }
  382. }
  383. /**
  384. * ==============================================
  385. * Dot Windmill
  386. * ==============================================
  387. */
  388. .dot-windmill {
  389. position: relative;
  390. top: -10px;
  391. width: 10px;
  392. height: 10px;
  393. border-radius: 5px;
  394. background-color: #9880ff;
  395. color: #9880ff;
  396. transform-origin: 5px 15px;
  397. animation: dotWindmill 2s infinite linear;
  398. }
  399. .dot-windmill::before, .dot-windmill::after {
  400. content: '';
  401. display: inline-block;
  402. position: absolute;
  403. }
  404. .dot-windmill::before {
  405. left: -8.66px;
  406. top: 15px;
  407. width: 10px;
  408. height: 10px;
  409. border-radius: 5px;
  410. background-color: #9880ff;
  411. color: #9880ff;
  412. }
  413. .dot-windmill::after {
  414. left: 8.66px;
  415. top: 15px;
  416. width: 10px;
  417. height: 10px;
  418. border-radius: 5px;
  419. background-color: #9880ff;
  420. color: #9880ff;
  421. }
  422. @keyframes dotWindmill {
  423. 0% {
  424. transform: rotateZ(0deg) translate3d(0, 0, 0);
  425. }
  426. 100% {
  427. transform: rotateZ(720deg) translate3d(0, 0, 0);
  428. }
  429. }
  430. /**
  431. * ==============================================
  432. * Dot Bricks
  433. * ==============================================
  434. */
  435. .dot-bricks {
  436. position: relative;
  437. top: 8px;
  438. left: -9999px;
  439. width: 10px;
  440. height: 10px;
  441. border-radius: 5px;
  442. background-color: #9880ff;
  443. color: #9880ff;
  444. box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff;
  445. animation: dotBricks 2s infinite ease;
  446. }
  447. @keyframes dotBricks {
  448. 0% {
  449. box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff;
  450. }
  451. 8.333% {
  452. box-shadow: 10007px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff;
  453. }
  454. 16.667% {
  455. box-shadow: 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 10007px 0 0 0 #9880ff;
  456. }
  457. 25% {
  458. box-shadow: 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff;
  459. }
  460. 33.333% {
  461. box-shadow: 10007px 0 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff;
  462. }
  463. 41.667% {
  464. box-shadow: 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff;
  465. }
  466. 50% {
  467. box-shadow: 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff;
  468. }
  469. 58.333% {
  470. box-shadow: 9991px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff;
  471. }
  472. 66.666% {
  473. box-shadow: 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff, 9991px -16px 0 0 #9880ff;
  474. }
  475. 75% {
  476. box-shadow: 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff;
  477. }
  478. 83.333% {
  479. box-shadow: 9991px -16px 0 0 #9880ff, 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff;
  480. }
  481. 91.667% {
  482. box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff;
  483. }
  484. 100% {
  485. box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff;
  486. }
  487. }
  488. /**
  489. * ==============================================
  490. * Dot Floating
  491. * ==============================================
  492. */
  493. .dot-floating {
  494. position: relative;
  495. width: 10px;
  496. height: 10px;
  497. border-radius: 5px;
  498. background-color: #9880ff;
  499. color: #9880ff;
  500. animation: dotFloating 3s infinite cubic-bezier(0.15, 0.6, 0.9, 0.1);
  501. }
  502. .dot-floating::before, .dot-floating::after {
  503. content: '';
  504. display: inline-block;
  505. position: absolute;
  506. top: 0;
  507. }
  508. .dot-floating::before {
  509. left: -12px;
  510. width: 10px;
  511. height: 10px;
  512. border-radius: 5px;
  513. background-color: #9880ff;
  514. color: #9880ff;
  515. animation: dotFloatingBefore 3s infinite ease-in-out;
  516. }
  517. .dot-floating::after {
  518. left: -24px;
  519. width: 10px;
  520. height: 10px;
  521. border-radius: 5px;
  522. background-color: #9880ff;
  523. color: #9880ff;
  524. animation: dotFloatingAfter 3s infinite cubic-bezier(0.4, 0, 1, 1);
  525. }
  526. @keyframes dotFloating {
  527. 0% {
  528. left: calc(-50% - 5px);
  529. }
  530. 75% {
  531. left: calc(50% + 105px);
  532. }
  533. 100% {
  534. left: calc(50% + 105px);
  535. }
  536. }
  537. @keyframes dotFloatingBefore {
  538. 0% {
  539. left: -50px;
  540. }
  541. 50% {
  542. left: -12px;
  543. }
  544. 75% {
  545. left: -50px;
  546. }
  547. 100% {
  548. left: -50px;
  549. }
  550. }
  551. @keyframes dotFloatingAfter {
  552. 0% {
  553. left: -100px;
  554. }
  555. 50% {
  556. left: -24px;
  557. }
  558. 75% {
  559. left: -100px;
  560. }
  561. 100% {
  562. left: -100px;
  563. }
  564. }
  565. /**
  566. * ==============================================
  567. * Dot Fire
  568. * ==============================================
  569. */
  570. .dot-fire {
  571. position: relative;
  572. left: -9999px;
  573. width: 10px;
  574. height: 10px;
  575. border-radius: 5px;
  576. background-color: #9880ff;
  577. color: #9880ff;
  578. box-shadow: 9999px 22.5px 0 -5px #9880ff;
  579. animation: dotFire 1.5s infinite linear;
  580. animation-delay: -.85s;
  581. }
  582. .dot-fire::before, .dot-fire::after {
  583. content: '';
  584. display: inline-block;
  585. position: absolute;
  586. top: 0;
  587. width: 10px;
  588. height: 10px;
  589. border-radius: 5px;
  590. background-color: #9880ff;
  591. color: #9880ff;
  592. }
  593. .dot-fire::before {
  594. box-shadow: 9999px 22.5px 0 -5px #9880ff;
  595. animation: dotFire 1.5s infinite linear;
  596. animation-delay: -1.85s;
  597. }
  598. .dot-fire::after {
  599. box-shadow: 9999px 22.5px 0 -5px #9880ff;
  600. animation: dotFire 1.5s infinite linear;
  601. animation-delay: -2.85s;
  602. }
  603. @keyframes dotFire {
  604. 1% {
  605. box-shadow: 9999px 22.5px 0 -5px #9880ff;
  606. }
  607. 50% {
  608. box-shadow: 9999px -5.625px 0 2px #9880ff;
  609. }
  610. 100% {
  611. box-shadow: 9999px -22.5px 0 -5px #9880ff;
  612. }
  613. }
  614. /**
  615. * ==============================================
  616. * Dot Spin
  617. * ==============================================
  618. */
  619. .dot-spin {
  620. position: relative;
  621. width: 10px;
  622. height: 10px;
  623. border-radius: 5px;
  624. background-color: transparent;
  625. color: transparent;
  626. box-shadow: 0 -18px 0 0 #9880ff, 12.72984px -12.72984px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.72984px 12.72984px 0 0 rgba(152, 128, 255, 0), 0 18px 0 0 rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 0 rgba(152, 128, 255, 0), -18px 0 0 0 rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 0 rgba(152, 128, 255, 0);
  627. animation: dotSpin 1.5s infinite linear;
  628. }
  629. @keyframes dotSpin {
  630. 0%,
  631. 100% {
  632. box-shadow: 0 -18px 0 0 #9880ff, 12.72984px -12.72984px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0);
  633. }
  634. 12.5% {
  635. box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.72984px -12.72984px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.72984px 12.72984px 0 0 #9880ff, 0 18px 0 -5px rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0);
  636. }
  637. 25% {
  638. box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 0 #9880ff, 12.72984px 12.72984px 0 0 #9880ff, 0 18px 0 0 #9880ff, -12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0);
  639. }
  640. 37.5% {
  641. box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.72984px 12.72984px 0 0 #9880ff, 0 18px 0 0 #9880ff, -12.72984px 12.72984px 0 0 #9880ff, -18px 0 0 -5px rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0);
  642. }
  643. 50% {
  644. box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 0 #9880ff, -12.72984px 12.72984px 0 0 #9880ff, -18px 0 0 0 #9880ff, -12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0);
  645. }
  646. 62.5% {
  647. box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 0 #9880ff, -18px 0 0 0 #9880ff, -12.72984px -12.72984px 0 0 #9880ff;
  648. }
  649. 75% {
  650. box-shadow: 0 -18px 0 0 #9880ff, 12.72984px -12.72984px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 0 #9880ff, -12.72984px -12.72984px 0 0 #9880ff;
  651. }
  652. 87.5% {
  653. box-shadow: 0 -18px 0 0 #9880ff, 12.72984px -12.72984px 0 0 #9880ff, 18px 0 0 -5px rgba(152, 128, 255, 0), 12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.72984px 12.72984px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.72984px -12.72984px 0 0 #9880ff;
  654. }
  655. }
  656. /**
  657. * ==============================================
  658. * Dot Falling
  659. * ==============================================
  660. */
  661. .dot-falling {
  662. position: relative;
  663. left: -9999px;
  664. width: 10px;
  665. height: 10px;
  666. border-radius: 5px;
  667. background-color: #9880ff;
  668. color: #9880ff;
  669. box-shadow: 9999px 0 0 0 #9880ff;
  670. animation: dotFalling 1s infinite linear;
  671. animation-delay: .1s;
  672. }
  673. .dot-falling::before, .dot-falling::after {
  674. content: '';
  675. display: inline-block;
  676. position: absolute;
  677. top: 0;
  678. }
  679. .dot-falling::before {
  680. width: 10px;
  681. height: 10px;
  682. border-radius: 5px;
  683. background-color: #9880ff;
  684. color: #9880ff;
  685. animation: dotFallingBefore 1s infinite linear;
  686. animation-delay: 0s;
  687. }
  688. .dot-falling::after {
  689. width: 10px;
  690. height: 10px;
  691. border-radius: 5px;
  692. background-color: #9880ff;
  693. color: #9880ff;
  694. animation: dotFallingAfter 1s infinite linear;
  695. animation-delay: .2s;
  696. }
  697. @keyframes dotFalling {
  698. 0% {
  699. box-shadow: 9999px -15px 0 0 rgba(152, 128, 255, 0);
  700. }
  701. 25%,
  702. 50%,
  703. 75% {
  704. box-shadow: 9999px 0 0 0 #9880ff;
  705. }
  706. 100% {
  707. box-shadow: 9999px 15px 0 0 rgba(152, 128, 255, 0);
  708. }
  709. }
  710. @keyframes dotFallingBefore {
  711. 0% {
  712. box-shadow: 9984px -15px 0 0 rgba(152, 128, 255, 0);
  713. }
  714. 25%,
  715. 50%,
  716. 75% {
  717. box-shadow: 9984px 0 0 0 #9880ff;
  718. }
  719. 100% {
  720. box-shadow: 9984px 15px 0 0 rgba(152, 128, 255, 0);
  721. }
  722. }
  723. @keyframes dotFallingAfter {
  724. 0% {
  725. box-shadow: 10014px -15px 0 0 rgba(152, 128, 255, 0);
  726. }
  727. 25%,
  728. 50%,
  729. 75% {
  730. box-shadow: 10014px 0 0 0 #9880ff;
  731. }
  732. 100% {
  733. box-shadow: 10014px 15px 0 0 rgba(152, 128, 255, 0);
  734. }
  735. }
  736. /**
  737. * ==============================================
  738. * Dot Stretching
  739. * ==============================================
  740. */
  741. .dot-stretching {
  742. position: relative;
  743. width: 10px;
  744. height: 10px;
  745. border-radius: 5px;
  746. background-color: #9880ff;
  747. color: #9880ff;
  748. transform: scale(1.25, 1.25);
  749. animation: dotStretching 2s infinite ease-in;
  750. }
  751. .dot-stretching::before, .dot-stretching::after {
  752. content: '';
  753. display: inline-block;
  754. position: absolute;
  755. top: 0;
  756. }
  757. .dot-stretching::before {
  758. width: 10px;
  759. height: 10px;
  760. border-radius: 5px;
  761. background-color: #9880ff;
  762. color: #9880ff;
  763. animation: dotStretchingBefore 2s infinite ease-in;
  764. }
  765. .dot-stretching::after {
  766. width: 10px;
  767. height: 10px;
  768. border-radius: 5px;
  769. background-color: #9880ff;
  770. color: #9880ff;
  771. animation: dotStretchingAfter 2s infinite ease-in;
  772. }
  773. @keyframes dotStretching {
  774. 0% {
  775. transform: scale(1.25, 1.25);
  776. }
  777. 50%,
  778. 60% {
  779. transform: scale(0.8, 0.8);
  780. }
  781. 100% {
  782. transform: scale(1.25, 1.25);
  783. }
  784. }
  785. @keyframes dotStretchingBefore {
  786. 0% {
  787. transform: translate(0) scale(0.7, 0.7);
  788. }
  789. 50%,
  790. 60% {
  791. transform: translate(-20px) scale(1, 1);
  792. }
  793. 100% {
  794. transform: translate(0) scale(0.7, 0.7);
  795. }
  796. }
  797. @keyframes dotStretchingAfter {
  798. 0% {
  799. transform: translate(0) scale(0.7, 0.7);
  800. }
  801. 50%,
  802. 60% {
  803. transform: translate(20px) scale(1, 1);
  804. }
  805. 100% {
  806. transform: translate(0) scale(0.7, 0.7);
  807. }
  808. }
  809. /**
  810. * ==============================================
  811. * Experiment-Gooey Effect
  812. * Dot Gathering
  813. * ==============================================
  814. */
  815. .dot-gathering {
  816. position: relative;
  817. width: 12px;
  818. height: 12px;
  819. border-radius: 6px;
  820. background-color: black;
  821. color: transparent;
  822. margin: -1px 0;
  823. filter: blur(2px);
  824. }
  825. .dot-gathering::before, .dot-gathering::after {
  826. content: '';
  827. display: inline-block;
  828. position: absolute;
  829. top: 0;
  830. left: -50px;
  831. width: 12px;
  832. height: 12px;
  833. border-radius: 6px;
  834. background-color: black;
  835. color: transparent;
  836. opacity: 0;
  837. filter: blur(2px);
  838. animation: dotGathering 2s infinite ease-in;
  839. }
  840. .dot-gathering::after {
  841. animation-delay: .5s;
  842. }
  843. @keyframes dotGathering {
  844. 0% {
  845. opacity: 0;
  846. transform: translateX(0);
  847. }
  848. 35%,
  849. 60% {
  850. opacity: 1;
  851. transform: translateX(50px);
  852. }
  853. 100% {
  854. opacity: 0;
  855. transform: translateX(100px);
  856. }
  857. }
  858. /**
  859. * ==============================================
  860. * Experiment-Gooey Effect
  861. * Dot Hourglass
  862. * ==============================================
  863. */
  864. .dot-hourglass {
  865. position: relative;
  866. top: -15px;
  867. width: 12px;
  868. height: 12px;
  869. border-radius: 6px;
  870. background-color: black;
  871. color: transparent;
  872. margin: -1px 0;
  873. filter: blur(2px);
  874. transform-origin: 5px 20px;
  875. animation: dotHourglass 2.4s infinite ease-in-out;
  876. animation-delay: .6s;
  877. }
  878. .dot-hourglass::before, .dot-hourglass::after {
  879. content: '';
  880. display: inline-block;
  881. position: absolute;
  882. top: 0;
  883. left: 0;
  884. width: 12px;
  885. height: 12px;
  886. border-radius: 6px;
  887. background-color: black;
  888. color: transparent;
  889. filter: blur(2px);
  890. }
  891. .dot-hourglass::before {
  892. top: 30px;
  893. }
  894. .dot-hourglass::after {
  895. animation: dotHourglassAfter 2.4s infinite cubic-bezier(0.65, 0.05, 0.36, 1);
  896. }
  897. @keyframes dotHourglass {
  898. 0% {
  899. transform: rotateZ(0deg);
  900. }
  901. 25% {
  902. transform: rotateZ(180deg);
  903. }
  904. 50% {
  905. transform: rotateZ(180deg);
  906. }
  907. 75% {
  908. transform: rotateZ(360deg);
  909. }
  910. 100% {
  911. transform: rotateZ(360deg);
  912. }
  913. }
  914. @keyframes dotHourglassAfter {
  915. 0% {
  916. transform: translateY(0);
  917. }
  918. 25% {
  919. transform: translateY(30px);
  920. }
  921. 50% {
  922. transform: translateY(30px);
  923. }
  924. 75% {
  925. transform: translateY(0);
  926. }
  927. 100% {
  928. transform: translateY(0);
  929. }
  930. }
  931. /**
  932. * ==============================================
  933. * Experiment-Gooey Effect
  934. * Dot Overtaking
  935. * ==============================================
  936. */
  937. .dot-overtaking {
  938. position: relative;
  939. width: 12px;
  940. height: 12px;
  941. border-radius: 6px;
  942. background-color: transparent;
  943. color: black;
  944. margin: -1px 0;
  945. box-shadow: 0 -20px 0 0;
  946. filter: blur(2px);
  947. animation: dotOvertaking 2s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2);
  948. }
  949. .dot-overtaking::before, .dot-overtaking::after {
  950. content: '';
  951. display: inline-block;
  952. position: absolute;
  953. top: 0;
  954. left: 0;
  955. width: 12px;
  956. height: 12px;
  957. border-radius: 6px;
  958. background-color: transparent;
  959. color: black;
  960. box-shadow: 0 -20px 0 0;
  961. filter: blur(2px);
  962. }
  963. .dot-overtaking::before {
  964. animation: dotOvertaking 2s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2);
  965. animation-delay: .3s;
  966. }
  967. .dot-overtaking::after {
  968. animation: dotOvertaking 1.5s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2);
  969. animation-delay: .6s;
  970. }
  971. @keyframes dotOvertaking {
  972. 0% {
  973. transform: rotateZ(0deg);
  974. }
  975. 100% {
  976. transform: rotateZ(360deg);
  977. }
  978. }
  979. /**
  980. * ==============================================
  981. * Experiment-Gooey Effect
  982. * Dot Shuttle
  983. * ==============================================
  984. */
  985. .dot-shuttle {
  986. position: relative;
  987. left: -15px;
  988. width: 12px;
  989. height: 12px;
  990. border-radius: 6px;
  991. background-color: black;
  992. color: transparent;
  993. margin: -1px 0;
  994. filter: blur(2px);
  995. }
  996. .dot-shuttle::before, .dot-shuttle::after {
  997. content: '';
  998. display: inline-block;
  999. position: absolute;
  1000. top: 0;
  1001. width: 12px;
  1002. height: 12px;
  1003. border-radius: 6px;
  1004. background-color: black;
  1005. color: transparent;
  1006. filter: blur(2px);
  1007. }
  1008. .dot-shuttle::before {
  1009. left: 15px;
  1010. animation: dotShuttle 2s infinite ease-out;
  1011. }
  1012. .dot-shuttle::after {
  1013. left: 30px;
  1014. }
  1015. @keyframes dotShuttle {
  1016. 0%,
  1017. 50%,
  1018. 100% {
  1019. transform: translateX(0);
  1020. }
  1021. 25% {
  1022. transform: translateX(-45px);
  1023. }
  1024. 75% {
  1025. transform: translateX(45px);
  1026. }
  1027. }
  1028. /**
  1029. * ==============================================
  1030. * Experiment-Emoji
  1031. * Dot Bouncing
  1032. * ==============================================
  1033. */
  1034. .dot-bouncing {
  1035. position: relative;
  1036. height: 10px;
  1037. font-size: 10px;
  1038. }
  1039. .dot-bouncing::before {
  1040. content: '⚽🏀🏐';
  1041. display: inline-block;
  1042. position: relative;
  1043. animation: dotBouncing 1s infinite;
  1044. }
  1045. @keyframes dotBouncing {
  1046. 0% {
  1047. top: -20px;
  1048. animation-timing-function: ease-in;
  1049. }
  1050. 34% {
  1051. transform: scale(1, 1);
  1052. }
  1053. 35% {
  1054. top: 20px;
  1055. animation-timing-function: ease-out;
  1056. transform: scale(1.5, 0.5);
  1057. }
  1058. 45% {
  1059. transform: scale(1, 1);
  1060. }
  1061. 90% {
  1062. top: -20px;
  1063. }
  1064. 100% {
  1065. top: -20px;
  1066. }
  1067. }
  1068. /**
  1069. * ==============================================
  1070. * Experiment-Emoji
  1071. * Dot Rolling
  1072. * ==============================================
  1073. */
  1074. .dot-rolling {
  1075. position: relative;
  1076. height: 10px;
  1077. font-size: 10px;
  1078. }
  1079. .dot-rolling::before {
  1080. content: '⚽';
  1081. display: inline-block;
  1082. position: relative;
  1083. transform: translateX(-25px);
  1084. animation: dotRolling 3s infinite;
  1085. }