| 1 | @import url("https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,700&family=Manrope:wght@400;500;600;700;800&display=swap"); |
| 2 | @import "tailwindcss"; |
| 3 | @plugin "@tailwindcss/typography"; |
| 4 | |
| 5 | @theme { |
| 6 | --font-sans: "Manrope", ui-sans-serif, system-ui, sans-serif; |
| 7 | } |
| 8 | |
| 9 | :root { |
| 10 | --sea-ink: #173a40; |
| 11 | --sea-ink-soft: #416166; |
| 12 | --lagoon: #4fb8b2; |
| 13 | --lagoon-deep: #328f97; |
| 14 | --palm: #2f6a4a; |
| 15 | --sand: #e7f0e8; |
| 16 | --foam: #f3faf5; |
| 17 | --surface: rgba(255, 255, 255, 0.74); |
| 18 | --surface-strong: rgba(255, 255, 255, 0.9); |
| 19 | --line: rgba(23, 58, 64, 0.14); |
| 20 | --inset-glint: rgba(255, 255, 255, 0.82); |
| 21 | --kicker: rgba(47, 106, 74, 0.9); |
| 22 | --bg-base: #e7f3ec; |
| 23 | --header-bg: rgba(251, 255, 248, 0.84); |
| 24 | --chip-bg: rgba(255, 255, 255, 0.8); |
| 25 | --chip-line: rgba(47, 106, 74, 0.18); |
| 26 | --link-bg-hover: rgba(255, 255, 255, 0.9); |
| 27 | --hero-a: rgba(79, 184, 178, 0.36); |
| 28 | --hero-b: rgba(47, 106, 74, 0.2); |
| 29 | } |
| 30 | |
| 31 | :root[data-theme="dark"] { |
| 32 | --sea-ink: #d7ece8; |
| 33 | --sea-ink-soft: #afcdc8; |
| 34 | --lagoon: #60d7cf; |
| 35 | --lagoon-deep: #8de5db; |
| 36 | --palm: #6ec89a; |
| 37 | --sand: #0f1a1e; |
| 38 | --foam: #101d22; |
| 39 | --surface: rgba(16, 30, 34, 0.8); |
| 40 | --surface-strong: rgba(15, 27, 31, 0.92); |
| 41 | --line: rgba(141, 229, 219, 0.18); |
| 42 | --inset-glint: rgba(194, 247, 238, 0.14); |
| 43 | --kicker: #b8efe5; |
| 44 | --bg-base: #0a1418; |
| 45 | --header-bg: rgba(10, 20, 24, 0.8); |
| 46 | --chip-bg: rgba(13, 28, 32, 0.9); |
| 47 | --chip-line: rgba(141, 229, 219, 0.24); |
| 48 | --link-bg-hover: rgba(24, 44, 49, 0.8); |
| 49 | --hero-a: rgba(96, 215, 207, 0.18); |
| 50 | --hero-b: rgba(110, 200, 154, 0.12); |
| 51 | } |
| 52 | |
| 53 | @media (prefers-color-scheme: dark) { |
| 54 | :root:not([data-theme="light"]) { |
| 55 | --sea-ink: #d7ece8; |
| 56 | --sea-ink-soft: #afcdc8; |
| 57 | --lagoon: #60d7cf; |
| 58 | --lagoon-deep: #8de5db; |
| 59 | --palm: #6ec89a; |
| 60 | --sand: #0f1a1e; |
| 61 | --foam: #101d22; |
| 62 | --surface: rgba(16, 30, 34, 0.8); |
| 63 | --surface-strong: rgba(15, 27, 31, 0.92); |
| 64 | --line: rgba(141, 229, 219, 0.18); |
| 65 | --inset-glint: rgba(194, 247, 238, 0.14); |
| 66 | --kicker: #b8efe5; |
| 67 | --bg-base: #0a1418; |
| 68 | --header-bg: rgba(10, 20, 24, 0.8); |
| 69 | --chip-bg: rgba(13, 28, 32, 0.9); |
| 70 | --chip-line: rgba(141, 229, 219, 0.24); |
| 71 | --link-bg-hover: rgba(24, 44, 49, 0.8); |
| 72 | --hero-a: rgba(96, 215, 207, 0.18); |
| 73 | --hero-b: rgba(110, 200, 154, 0.12); |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | * { |
| 78 | box-sizing: border-box; |
| 79 | } |
| 80 | |
| 81 | html, |
| 82 | body, |
| 83 | #app { |
| 84 | min-height: 100%; |
| 85 | } |
| 86 | |
| 87 | body { |
| 88 | margin: 0; |
| 89 | color: var(--sea-ink); |
| 90 | font-family: var(--font-sans); |
| 91 | background-color: var(--bg-base); |
| 92 | background: |
| 93 | radial-gradient(1100px 620px at -8% -10%, var(--hero-a), transparent 58%), |
| 94 | radial-gradient(1050px 620px at 112% -12%, var(--hero-b), transparent 62%), |
| 95 | radial-gradient( |
| 96 | 720px 380px at 50% 115%, |
| 97 | rgba(79, 184, 178, 0.1), |
| 98 | transparent 68% |
| 99 | ), |
| 100 | linear-gradient( |
| 101 | 180deg, |
| 102 | color-mix(in oklab, var(--sand) 68%, white) 0%, |
| 103 | var(--foam) 44%, |
| 104 | var(--bg-base) 100% |
| 105 | ); |
| 106 | overflow-x: hidden; |
| 107 | -webkit-font-smoothing: antialiased; |
| 108 | -moz-osx-font-smoothing: grayscale; |
| 109 | } |
| 110 | |
| 111 | body::before { |
| 112 | content: ""; |
| 113 | position: fixed; |
| 114 | inset: 0; |
| 115 | pointer-events: none; |
| 116 | z-index: -1; |
| 117 | opacity: 0.28; |
| 118 | background: |
| 119 | radial-gradient( |
| 120 | circle at 20% 15%, |
| 121 | rgba(255, 255, 255, 0.8), |
| 122 | transparent 34% |
| 123 | ), |
| 124 | radial-gradient( |
| 125 | circle at 78% 26%, |
| 126 | rgba(79, 184, 178, 0.2), |
| 127 | transparent 42% |
| 128 | ), |
| 129 | radial-gradient(circle at 42% 82%, rgba(47, 106, 74, 0.14), transparent 36%); |
| 130 | } |
| 131 | |
| 132 | body::after { |
| 133 | content: ""; |
| 134 | position: fixed; |
| 135 | inset: 0; |
| 136 | pointer-events: none; |
| 137 | z-index: -1; |
| 138 | opacity: 0.14; |
| 139 | background-image: |
| 140 | linear-gradient(rgba(255, 255, 255, 0.07) 1px, transparent 1px), |
| 141 | linear-gradient(90deg, rgba(255, 255, 255, 0.06) 1px, transparent 1px); |
| 142 | background-size: 28px 28px; |
| 143 | mask-image: radial-gradient(circle at 50% 30%, black, transparent 78%); |
| 144 | } |
| 145 | |
| 146 | a { |
| 147 | color: var(--lagoon-deep); |
| 148 | text-decoration-color: rgba(50, 143, 151, 0.4); |
| 149 | text-decoration-thickness: 1px; |
| 150 | text-underline-offset: 2px; |
| 151 | } |
| 152 | |
| 153 | a:hover { |
| 154 | color: #246f76; |
| 155 | } |
| 156 | |
| 157 | code { |
| 158 | font-size: 0.9em; |
| 159 | border: 1px solid var(--line); |
| 160 | background: color-mix(in oklab, var(--surface-strong) 82%, white 18%); |
| 161 | border-radius: 7px; |
| 162 | padding: 2px 7px; |
| 163 | } |
| 164 | |
| 165 | pre code { |
| 166 | border: 0; |
| 167 | background: transparent; |
| 168 | padding: 0; |
| 169 | border-radius: 0; |
| 170 | font-size: inherit; |
| 171 | color: inherit; |
| 172 | } |
| 173 | |
| 174 | .page-wrap { |
| 175 | width: min(1080px, calc(100% - 2rem)); |
| 176 | margin-inline: auto; |
| 177 | } |
| 178 | |
| 179 | .display-title { |
| 180 | font-family: "Fraunces", Georgia, serif; |
| 181 | } |
| 182 | |
| 183 | .island-shell { |
| 184 | border: 1px solid var(--line); |
| 185 | background: linear-gradient(165deg, var(--surface-strong), var(--surface)); |
| 186 | box-shadow: |
| 187 | 0 1px 0 var(--inset-glint) inset, |
| 188 | 0 22px 44px rgba(30, 90, 72, 0.1), |
| 189 | 0 6px 18px rgba(23, 58, 64, 0.08); |
| 190 | backdrop-filter: blur(4px); |
| 191 | } |
| 192 | |
| 193 | .feature-card { |
| 194 | background: linear-gradient( |
| 195 | 165deg, |
| 196 | color-mix(in oklab, var(--surface-strong) 93%, white 7%), |
| 197 | var(--surface) |
| 198 | ); |
| 199 | box-shadow: |
| 200 | 0 1px 0 var(--inset-glint) inset, |
| 201 | 0 18px 34px rgba(30, 90, 72, 0.1), |
| 202 | 0 4px 14px rgba(23, 58, 64, 0.06); |
| 203 | } |
| 204 | |
| 205 | .feature-card:hover { |
| 206 | transform: translateY(-2px); |
| 207 | border-color: color-mix(in oklab, var(--lagoon-deep) 35%, var(--line)); |
| 208 | } |
| 209 | |
| 210 | button, |
| 211 | .island-shell, |
| 212 | a { |
| 213 | transition: |
| 214 | background-color 180ms ease, |
| 215 | color 180ms ease, |
| 216 | border-color 180ms ease, |
| 217 | transform 180ms ease; |
| 218 | } |
| 219 | |
| 220 | .island-kicker { |
| 221 | letter-spacing: 0.16em; |
| 222 | text-transform: uppercase; |
| 223 | font-weight: 700; |
| 224 | font-size: 0.69rem; |
| 225 | color: var(--kicker); |
| 226 | } |
| 227 | |
| 228 | .nav-link { |
| 229 | position: relative; |
| 230 | display: inline-flex; |
| 231 | align-items: center; |
| 232 | text-decoration: none; |
| 233 | color: var(--sea-ink-soft); |
| 234 | } |
| 235 | |
| 236 | .nav-link::after { |
| 237 | content: ""; |
| 238 | position: absolute; |
| 239 | left: 0; |
| 240 | bottom: -6px; |
| 241 | width: 100%; |
| 242 | height: 2px; |
| 243 | transform: scaleX(0); |
| 244 | transform-origin: left; |
| 245 | background: linear-gradient(90deg, var(--lagoon), #7ed3bf); |
| 246 | transition: transform 170ms ease; |
| 247 | } |
| 248 | |
| 249 | .nav-link:hover, |
| 250 | .nav-link.is-active { |
| 251 | color: var(--sea-ink); |
| 252 | } |
| 253 | |
| 254 | .nav-link:hover::after, |
| 255 | .nav-link.is-active::after { |
| 256 | transform: scaleX(1); |
| 257 | } |
| 258 | |
| 259 | @media (max-width: 640px) { |
| 260 | .nav-link::after { |
| 261 | bottom: -4px; |
| 262 | } |
| 263 | } |
| 264 | |
| 265 | .site-footer { |
| 266 | border-top: 1px solid var(--line); |
| 267 | background: color-mix(in oklab, var(--header-bg) 84%, transparent 16%); |
| 268 | } |
| 269 | |
| 270 | .rise-in { |
| 271 | animation: rise-in 700ms cubic-bezier(0.16, 1, 0.3, 1) both; |
| 272 | } |
| 273 | |
| 274 | @keyframes rise-in { |
| 275 | from { |
| 276 | opacity: 0; |
| 277 | transform: translateY(12px); |
| 278 | } |
| 279 | to { |
| 280 | opacity: 1; |
| 281 | transform: translateY(0); |
| 282 | } |
| 283 | } |