Home.module.css 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. .main {
  2. display: flex;
  3. flex-direction: column;
  4. justify-content: space-between;
  5. align-items: center;
  6. padding: 6rem;
  7. min-height: 100vh;
  8. }
  9. .description {
  10. display: inherit;
  11. justify-content: inherit;
  12. align-items: inherit;
  13. font-size: 0.85rem;
  14. max-width: var(--max-width);
  15. width: 100%;
  16. z-index: 2;
  17. font-family: var(--font-mono);
  18. }
  19. .description a {
  20. display: flex;
  21. justify-content: center;
  22. align-items: center;
  23. gap: 0.5rem;
  24. }
  25. .description p {
  26. position: relative;
  27. margin: 0;
  28. padding: 1rem;
  29. background-color: rgba(var(--callout-rgb), 0.5);
  30. border: 1px solid rgba(var(--callout-border-rgb), 0.3);
  31. border-radius: var(--border-radius);
  32. }
  33. .code {
  34. font-weight: 700;
  35. font-family: var(--font-mono);
  36. }
  37. .grid {
  38. display: grid;
  39. grid-template-columns: repeat(4, minmax(25%, auto));
  40. width: var(--max-width);
  41. max-width: 100%;
  42. }
  43. .card {
  44. padding: 1rem 1.2rem;
  45. border-radius: var(--border-radius);
  46. background: rgba(var(--card-rgb), 0);
  47. border: 1px solid rgba(var(--card-border-rgb), 0);
  48. transition: background 200ms, border 200ms;
  49. }
  50. .card span {
  51. display: inline-block;
  52. transition: transform 200ms;
  53. }
  54. .card h2 {
  55. font-weight: 600;
  56. margin-bottom: 0.7rem;
  57. }
  58. .card p {
  59. margin: 0;
  60. opacity: 0.6;
  61. font-size: 0.9rem;
  62. line-height: 1.5;
  63. max-width: 30ch;
  64. }
  65. .center {
  66. display: flex;
  67. justify-content: center;
  68. align-items: center;
  69. position: relative;
  70. padding: 4rem 0;
  71. }
  72. .center::before {
  73. background: var(--secondary-glow);
  74. border-radius: 50%;
  75. width: 480px;
  76. height: 360px;
  77. margin-left: -400px;
  78. }
  79. .center::after {
  80. background: var(--primary-glow);
  81. width: 240px;
  82. height: 180px;
  83. z-index: -1;
  84. }
  85. .center::before,
  86. .center::after {
  87. content: '';
  88. left: 50%;
  89. position: absolute;
  90. filter: blur(45px);
  91. transform: translateZ(0);
  92. }
  93. .logo {
  94. position: relative;
  95. }
  96. /* Enable hover only on non-touch devices */
  97. @media (hover: hover) and (pointer: fine) {
  98. .card:hover {
  99. background: rgba(var(--card-rgb), 0.1);
  100. border: 1px solid rgba(var(--card-border-rgb), 0.15);
  101. }
  102. .card:hover span {
  103. transform: translateX(4px);
  104. }
  105. }
  106. @media (prefers-reduced-motion) {
  107. .card:hover span {
  108. transform: none;
  109. }
  110. }
  111. /* Mobile */
  112. @media (max-width: 700px) {
  113. .content {
  114. padding: 4rem;
  115. }
  116. .grid {
  117. grid-template-columns: 1fr;
  118. margin-bottom: 120px;
  119. max-width: 320px;
  120. text-align: center;
  121. }
  122. .card {
  123. padding: 1rem 2.5rem;
  124. }
  125. .card h2 {
  126. margin-bottom: 0.5rem;
  127. }
  128. .center {
  129. padding: 8rem 0 6rem;
  130. }
  131. .center::before {
  132. transform: none;
  133. height: 300px;
  134. }
  135. .description {
  136. font-size: 0.8rem;
  137. }
  138. .description a {
  139. padding: 1rem;
  140. }
  141. .description p,
  142. .description div {
  143. display: flex;
  144. justify-content: center;
  145. position: fixed;
  146. width: 100%;
  147. }
  148. .description p {
  149. align-items: center;
  150. inset: 0 0 auto;
  151. padding: 2rem 1rem 1.4rem;
  152. border-radius: 0;
  153. border: none;
  154. border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
  155. background: linear-gradient(
  156. to bottom,
  157. rgba(var(--background-start-rgb), 1),
  158. rgba(var(--callout-rgb), 0.5)
  159. );
  160. background-clip: padding-box;
  161. backdrop-filter: blur(24px);
  162. }
  163. .description div {
  164. align-items: flex-end;
  165. pointer-events: none;
  166. inset: auto 0 0;
  167. padding: 2rem;
  168. height: 200px;
  169. background: linear-gradient(
  170. to bottom,
  171. transparent 0%,
  172. rgb(var(--background-end-rgb)) 40%
  173. );
  174. z-index: 1;
  175. }
  176. }
  177. /* Tablet and Smaller Desktop */
  178. @media (min-width: 701px) and (max-width: 1120px) {
  179. .grid {
  180. grid-template-columns: repeat(2, 50%);
  181. }
  182. }
  183. @media (prefers-color-scheme: dark) {
  184. .vercelLogo {
  185. filter: invert(1);
  186. }
  187. .logo {
  188. filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
  189. }
  190. }
  191. @keyframes rotate {
  192. from {
  193. transform: rotate(360deg);
  194. }
  195. to {
  196. transform: rotate(0deg);
  197. }
  198. }