index.css 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. @import "tailwindcss";
  2. /* Import fonts */
  3. @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Noto+Sans:wght@400;500;600;700&display=swap');
  4. /* Material Icons */
  5. @import url('https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined');
  6. /* Theme configuration using CSS variables */
  7. @theme {
  8. --color-border: hsl(214.3 31.8% 91.4%);
  9. --color-input: hsl(214.3 31.8% 91.4%);
  10. --color-ring: hsl(207 90% 50%);
  11. --color-background: hsl(0 0% 100%);
  12. --color-foreground: hsl(222.2 84% 4.9%);
  13. --color-primary: hsl(207 90% 50%);
  14. --color-primary-foreground: hsl(210 40% 98%);
  15. --color-secondary: hsl(210 40% 96.1%);
  16. --color-secondary-foreground: hsl(222.2 47.4% 11.2%);
  17. --color-muted: hsl(210 40% 96.1%);
  18. --color-muted-foreground: hsl(215.4 16.3% 46.9%);
  19. --color-accent: hsl(210 40% 96.1%);
  20. --color-accent-foreground: hsl(222.2 47.4% 11.2%);
  21. --color-destructive: hsl(0 84.2% 60.2%);
  22. --color-destructive-foreground: hsl(210 40% 98%);
  23. --color-card: hsl(0 0% 100%);
  24. --color-card-foreground: hsl(222.2 84% 4.9%);
  25. --color-popover: hsl(0 0% 100%);
  26. --color-popover-foreground: hsl(222.2 84% 4.9%);
  27. --radius: 0.5rem;
  28. --radius-lg: 0.75rem;
  29. --radius-md: calc(var(--radius) - 2px);
  30. --radius-sm: calc(var(--radius) - 4px);
  31. --font-family-sans: 'Plus Jakarta Sans', 'Noto Sans', sans-serif;
  32. }
  33. /* Dark mode */
  34. .dark {
  35. --color-border: hsl(0 0% 25%);
  36. --color-input: hsl(0 0% 25%);
  37. --color-ring: hsl(207 90% 50%);
  38. --color-background: hsl(0 0% 10%);
  39. --color-foreground: hsl(210 40% 98%);
  40. --color-primary: hsl(207 90% 50%);
  41. --color-primary-foreground: hsl(210 40% 98%);
  42. --color-secondary: hsl(0 0% 20%);
  43. --color-secondary-foreground: hsl(210 40% 98%);
  44. --color-muted: hsl(0 0% 20%);
  45. --color-muted-foreground: hsl(215 20.2% 65.1%);
  46. --color-accent: hsl(0 0% 20%);
  47. --color-accent-foreground: hsl(210 40% 98%);
  48. --color-destructive: hsl(0 62.8% 50.6%);
  49. --color-destructive-foreground: hsl(210 40% 98%);
  50. --color-card: hsl(0 0% 15%);
  51. --color-card-foreground: hsl(210 40% 98%);
  52. --color-popover: hsl(0 0% 15%);
  53. --color-popover-foreground: hsl(210 40% 98%);
  54. }
  55. /* Base styles */
  56. * {
  57. border-color: var(--color-border);
  58. }
  59. body {
  60. background-color: var(--color-background);
  61. color: var(--color-foreground);
  62. font-family: var(--font-family-sans);
  63. margin: 0;
  64. min-height: 100vh;
  65. }
  66. /* Material Icons */
  67. .material-icons,
  68. .material-icons-outlined {
  69. font-family: 'Material Icons';
  70. font-weight: normal;
  71. font-style: normal;
  72. font-size: 24px;
  73. line-height: 1;
  74. letter-spacing: normal;
  75. text-transform: none;
  76. display: inline-block;
  77. white-space: nowrap;
  78. word-wrap: normal;
  79. direction: ltr;
  80. -webkit-font-feature-settings: 'liga';
  81. -webkit-font-smoothing: antialiased;
  82. }
  83. .material-icons-outlined {
  84. font-family: 'Material Icons Outlined';
  85. }
  86. /* Invert pattern previews in dark mode */
  87. .dark .pattern-preview {
  88. filter: invert(1);
  89. }
  90. /* Marquee animation for scrolling text */
  91. @keyframes marquee {
  92. 0%, 10% {
  93. transform: translateX(calc(-100% + 100cqw));
  94. }
  95. 45%, 55% {
  96. transform: translateX(0);
  97. }
  98. 90%, 100% {
  99. transform: translateX(calc(-100% + 100cqw));
  100. }
  101. }
  102. .marquee-container {
  103. container-type: inline-size;
  104. overflow: hidden;
  105. }
  106. .animate-marquee {
  107. display: inline-block;
  108. animation: marquee 8s ease-in-out infinite;
  109. animation-play-state: running;
  110. }
  111. .animate-marquee:hover {
  112. animation-play-state: paused;
  113. }
  114. /* Smooth fade in for lazy-loaded content */
  115. @keyframes fadeIn {
  116. from {
  117. opacity: 0;
  118. transform: scale(0.98);
  119. }
  120. to {
  121. opacity: 1;
  122. transform: scale(1);
  123. }
  124. }
  125. .animate-fade-in {
  126. animation: fadeIn 0.2s ease-out forwards;
  127. }
  128. /* Subtle pulse for connection status */
  129. @keyframes subtle-pulse {
  130. 0%, 100% {
  131. opacity: 1;
  132. }
  133. 50% {
  134. opacity: 0.6;
  135. }
  136. }
  137. .animate-subtle-pulse {
  138. animation: subtle-pulse 2s ease-in-out infinite;
  139. }
  140. /* Slide in from right for panels */
  141. @keyframes slideInRight {
  142. from {
  143. transform: translateX(100%);
  144. opacity: 0;
  145. }
  146. to {
  147. transform: translateX(0);
  148. opacity: 1;
  149. }
  150. }
  151. .animate-slide-in-right {
  152. animation: slideInRight 0.3s ease-out forwards;
  153. }