IdleCard.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <script lang="ts" setup>
  2. </script>
  3. <template>
  4. <div class="idle-card">
  5. <div class="glow glow-1"/>
  6. <div class="glow glow-2"/>
  7. <div class="orb"/>
  8. </div>
  9. </template>
  10. <style scoped>
  11. .idle-card {
  12. position: relative;
  13. aspect-ratio: 3 / 1;
  14. background: #0f1d14;
  15. border-radius: 8px;
  16. overflow: hidden;
  17. border: 1px solid rgba(82, 196, 26, 0.2);
  18. box-shadow: 0 0 12px rgba(82, 196, 26, 0.08),
  19. inset 0 0 20px rgba(0, 0, 0, 0.3);
  20. display: flex;
  21. align-items: center;
  22. justify-content: center;
  23. }
  24. .glow {
  25. position: absolute;
  26. inset: -50%;
  27. filter: blur(40px);
  28. }
  29. .glow-1 {
  30. background: radial-gradient(ellipse at 40% 50%, #52c41a 0%, transparent 55%);
  31. opacity: 0.25;
  32. animation: drift-1 7s ease-in-out infinite alternate;
  33. }
  34. .glow-2 {
  35. background: radial-gradient(ellipse at 60% 50%, #95de64 0%, transparent 50%);
  36. opacity: 0.2;
  37. animation: drift-2 9s ease-in-out infinite alternate;
  38. }
  39. .orb {
  40. position: relative;
  41. z-index: 1;
  42. width: 72px;
  43. height: 72px;
  44. border-radius: 50%;
  45. background: radial-gradient(circle at 35% 35%, #95de64, #52c41a);
  46. animation: breathe 4s ease-in-out infinite;
  47. box-shadow: 0 0 24px rgba(82, 196, 26, 0.3),
  48. 0 0 8px rgba(82, 196, 26, 0.5);
  49. }
  50. @keyframes breathe {
  51. 0%, 100% {
  52. transform: scale(1);
  53. opacity: 0.8;
  54. }
  55. 50% {
  56. transform: scale(0.7);
  57. opacity: 0.4;
  58. }
  59. }
  60. @keyframes drift-1 {
  61. 0% {
  62. transform: translate(-15%, -10%) scale(0.9);
  63. }
  64. 100% {
  65. transform: translate(15%, 10%) scale(1.1);
  66. }
  67. }
  68. @keyframes drift-2 {
  69. 0% {
  70. transform: translate(10%, 10%) scale(1.1);
  71. }
  72. 100% {
  73. transform: translate(-10%, -10%) scale(0.9);
  74. }
  75. }
  76. </style>