main.css 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. @import './base.css';
  2. #app {
  3. min-height: 100vh;
  4. }
  5. .reveal {
  6. opacity: 0;
  7. transform: translate3d(0, var(--reveal-y, 14px), 0);
  8. transition:
  9. opacity 520ms ease,
  10. transform 520ms ease;
  11. transition-delay: var(--reveal-delay, 0ms);
  12. will-change: transform, opacity;
  13. }
  14. .reveal.is-visible {
  15. opacity: 1;
  16. transform: translate3d(0, 0, 0);
  17. }
  18. .hover-lift {
  19. transition: transform 160ms ease, box-shadow 160ms ease;
  20. }
  21. .hover-lift:hover {
  22. transform: translateY(-2px);
  23. box-shadow: var(--shadow);
  24. }
  25. .float {
  26. animation: floatY 6s ease-in-out infinite;
  27. }
  28. @keyframes floatY {
  29. 0%,
  30. 100% {
  31. transform: translateY(0);
  32. }
  33. 50% {
  34. transform: translateY(-8px);
  35. }
  36. }
  37. .container {
  38. width: 100%;
  39. max-width: var(--container-max);
  40. margin: 0 auto;
  41. padding: 0 20px;
  42. }
  43. .app-shell {
  44. min-height: 100vh;
  45. display: flex;
  46. flex-direction: column;
  47. }
  48. .app-main {
  49. flex: 1;
  50. padding-top: var(--header-h);
  51. }
  52. .section {
  53. padding: var(--section-pad) 0;
  54. }
  55. .section--soft {
  56. background: var(--bg-soft);
  57. }
  58. .section-kicker {
  59. display: inline-flex;
  60. gap: 8px;
  61. align-items: center;
  62. padding: 6px 10px;
  63. border-radius: 999px;
  64. background: rgba(37, 99, 235, 0.08);
  65. color: var(--brand-700);
  66. font-weight: 600;
  67. font-size: 12px;
  68. }
  69. .h2 {
  70. font-size: 28px;
  71. line-height: 1.25;
  72. letter-spacing: -0.02em;
  73. }
  74. .muted {
  75. color: var(--text-muted);
  76. }
  77. .grid {
  78. display: grid;
  79. gap: 18px;
  80. }
  81. .grid-3 {
  82. grid-template-columns: repeat(3, minmax(0, 1fr));
  83. }
  84. .grid-4 {
  85. grid-template-columns: repeat(4, minmax(0, 1fr));
  86. }
  87. .card {
  88. background: #fff;
  89. border: 1px solid var(--border);
  90. /* border-radius: var(--radius-lg); */
  91. box-shadow: 0 1px 0 rgba(2, 6, 23, 0.02);
  92. }
  93. .card-pad {
  94. padding: 18px;
  95. }
  96. .btn {
  97. display: inline-flex;
  98. align-items: center;
  99. justify-content: center;
  100. gap: 8px;
  101. height: 36px;
  102. padding: 0 14px;
  103. border-radius: 5px;
  104. border: 1px solid transparent;
  105. cursor: pointer;
  106. user-select: none;
  107. transition: 160ms ease;
  108. }
  109. .btn-primary {
  110. background: var(--brand-600);
  111. color: #fff;
  112. }
  113. .btn-primary:hover {
  114. background: var(--brand-700);
  115. }
  116. .btn:active {
  117. transform: translateY(1px);
  118. }
  119. .btn:focus-visible {
  120. outline: none;
  121. box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.14);
  122. }
  123. .btn-ghost {
  124. background: rgba(15, 23, 42, 0.02);
  125. border-color: var(--border);
  126. color: var(--text);
  127. }
  128. .btn-ghost:hover {
  129. background: rgba(15, 23, 42, 0.04);
  130. }
  131. .btn-link {
  132. height: auto;
  133. padding: 0;
  134. border: 0;
  135. background: transparent;
  136. color: var(--brand-700);
  137. }
  138. .pill {
  139. display: inline-flex;
  140. align-items: center;
  141. gap: 6px;
  142. padding: 6px 10px;
  143. border-radius: 999px;
  144. border: 1px solid var(--border);
  145. background: #fff;
  146. color: var(--slate-700);
  147. font-size: 12px;
  148. font-weight: 600;
  149. }
  150. .divider {
  151. height: 1px;
  152. background: var(--border);
  153. }
  154. @media (max-width: 960px) {
  155. :root {
  156. --section-pad: 56px;
  157. --header-h: 64px;
  158. }
  159. .grid-4 {
  160. grid-template-columns: repeat(2, minmax(0, 1fr));
  161. }
  162. .grid-3 {
  163. grid-template-columns: repeat(1, minmax(0, 1fr));
  164. }
  165. }
  166. @media (max-width: 520px) {
  167. .grid-4 {
  168. grid-template-columns: repeat(1, minmax(0, 1fr));
  169. }
  170. }
  171. @media (prefers-reduced-motion: reduce) {
  172. .reveal {
  173. transition: none;
  174. opacity: 1;
  175. transform: none;
  176. }
  177. .float {
  178. animation: none;
  179. }
  180. .hover-lift,
  181. .hover-lift:hover {
  182. transition: none;
  183. transform: none;
  184. box-shadow: none;
  185. }
  186. }