├── .codesandbox └── tasks.json ├── .gitignore ├── LICENSE.md ├── README.md ├── package-lock.json ├── package.json └── src └── app ├── layout.js ├── page.js └── styles.css /.codesandbox/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // These tasks will run in order when initializing your CodeSandbox project. 3 | "setupTasks": [ 4 | { 5 | "name": "Install Dependencies", 6 | "command": "npm install" 7 | } 8 | ], 9 | 10 | // These tasks can be run from CodeSandbox. Running one will open a log in the app. 11 | "tasks": { 12 | "dev": { 13 | "name": "dev", 14 | "command": "npm run dev", 15 | "runAtStart": true, 16 | "preview": { 17 | "port": 3000 18 | } 19 | }, 20 | "build": { 21 | "name": "build", 22 | "command": "npm run build", 23 | "runAtStart": false 24 | }, 25 | "start": { 26 | "name": "start", 27 | "command": "npm run start", 28 | "runAtStart": false 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | .vscode 36 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Josh's Course Materials License 2 | 3 | Version 1, November 2020 4 | Copyright (c) Josh Comeau, 2020-present 5 | 6 | The files in this repository are meant to be used as part of a paid course, and are not intended for public distribution. They're open-source because it's the simplest form of distribution, and provides the best experience for students enrolled in the course. 7 | 8 | All are welcome to create personal copies of this repository, and modify its contents for educational use. Please experiment with the code, and see what you can build! 9 | 10 | It is forbidden to use these contents in any sort of commercial endeavour, including but not limited to: 11 | 12 | • Reselling its contents as part of a different course 13 | • Incorporating the code into a pre-existing business or project 14 | • Selling your solution to students enrolled in the course 15 | 16 | Exemptions can be made, on a case-by-case basis. Contact Josh Comeau (support@joshwcomeau.com) for more information. 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Next.js template 2 | 3 | This is a _super minimal_ starter for using Next.js with the modern App Router. 4 | 5 | Not intended for use in production. Purely used for educational reasons. 6 | 7 | ## Running a development server 8 | 9 | First, install the dependencies: 10 | 11 | ```bash 12 | $ npm install 13 | ``` 14 | 15 | Then, start a local development server: 16 | 17 | ```bash 18 | $ npm run dev 19 | ``` 20 | 21 | ## Troubleshooting 22 | 23 | - Please make sure you're using Node.js version 18.17 or higher. This is the minimum Node version required by Next.js. 24 | - You can find your current Node version by running `node -v` in a terminal. If the value is less than 18.17, you'll want to upgrade Node to the [current LTS (Long Term Support) version](https://nodejs.org/en). 25 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-next", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "hello-next", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "next": "^15.0.4", 12 | "react": "^19.0.0", 13 | "react-dom": "^19.0.0" 14 | } 15 | }, 16 | "node_modules/@emnapi/runtime": { 17 | "version": "1.3.1", 18 | "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", 19 | "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", 20 | "license": "MIT", 21 | "optional": true, 22 | "dependencies": { 23 | "tslib": "^2.4.0" 24 | } 25 | }, 26 | "node_modules/@img/sharp-darwin-arm64": { 27 | "version": "0.33.5", 28 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", 29 | "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", 30 | "cpu": [ 31 | "arm64" 32 | ], 33 | "license": "Apache-2.0", 34 | "optional": true, 35 | "os": [ 36 | "darwin" 37 | ], 38 | "engines": { 39 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 40 | }, 41 | "funding": { 42 | "url": "https://opencollective.com/libvips" 43 | }, 44 | "optionalDependencies": { 45 | "@img/sharp-libvips-darwin-arm64": "1.0.4" 46 | } 47 | }, 48 | "node_modules/@img/sharp-darwin-x64": { 49 | "version": "0.33.5", 50 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", 51 | "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", 52 | "cpu": [ 53 | "x64" 54 | ], 55 | "license": "Apache-2.0", 56 | "optional": true, 57 | "os": [ 58 | "darwin" 59 | ], 60 | "engines": { 61 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 62 | }, 63 | "funding": { 64 | "url": "https://opencollective.com/libvips" 65 | }, 66 | "optionalDependencies": { 67 | "@img/sharp-libvips-darwin-x64": "1.0.4" 68 | } 69 | }, 70 | "node_modules/@img/sharp-libvips-darwin-arm64": { 71 | "version": "1.0.4", 72 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", 73 | "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", 74 | "cpu": [ 75 | "arm64" 76 | ], 77 | "license": "LGPL-3.0-or-later", 78 | "optional": true, 79 | "os": [ 80 | "darwin" 81 | ], 82 | "funding": { 83 | "url": "https://opencollective.com/libvips" 84 | } 85 | }, 86 | "node_modules/@img/sharp-libvips-darwin-x64": { 87 | "version": "1.0.4", 88 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", 89 | "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", 90 | "cpu": [ 91 | "x64" 92 | ], 93 | "license": "LGPL-3.0-or-later", 94 | "optional": true, 95 | "os": [ 96 | "darwin" 97 | ], 98 | "funding": { 99 | "url": "https://opencollective.com/libvips" 100 | } 101 | }, 102 | "node_modules/@img/sharp-libvips-linux-arm": { 103 | "version": "1.0.5", 104 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", 105 | "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", 106 | "cpu": [ 107 | "arm" 108 | ], 109 | "license": "LGPL-3.0-or-later", 110 | "optional": true, 111 | "os": [ 112 | "linux" 113 | ], 114 | "funding": { 115 | "url": "https://opencollective.com/libvips" 116 | } 117 | }, 118 | "node_modules/@img/sharp-libvips-linux-arm64": { 119 | "version": "1.0.4", 120 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", 121 | "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", 122 | "cpu": [ 123 | "arm64" 124 | ], 125 | "license": "LGPL-3.0-or-later", 126 | "optional": true, 127 | "os": [ 128 | "linux" 129 | ], 130 | "funding": { 131 | "url": "https://opencollective.com/libvips" 132 | } 133 | }, 134 | "node_modules/@img/sharp-libvips-linux-s390x": { 135 | "version": "1.0.4", 136 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", 137 | "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", 138 | "cpu": [ 139 | "s390x" 140 | ], 141 | "license": "LGPL-3.0-or-later", 142 | "optional": true, 143 | "os": [ 144 | "linux" 145 | ], 146 | "funding": { 147 | "url": "https://opencollective.com/libvips" 148 | } 149 | }, 150 | "node_modules/@img/sharp-libvips-linux-x64": { 151 | "version": "1.0.4", 152 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", 153 | "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", 154 | "cpu": [ 155 | "x64" 156 | ], 157 | "license": "LGPL-3.0-or-later", 158 | "optional": true, 159 | "os": [ 160 | "linux" 161 | ], 162 | "funding": { 163 | "url": "https://opencollective.com/libvips" 164 | } 165 | }, 166 | "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 167 | "version": "1.0.4", 168 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", 169 | "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", 170 | "cpu": [ 171 | "arm64" 172 | ], 173 | "license": "LGPL-3.0-or-later", 174 | "optional": true, 175 | "os": [ 176 | "linux" 177 | ], 178 | "funding": { 179 | "url": "https://opencollective.com/libvips" 180 | } 181 | }, 182 | "node_modules/@img/sharp-libvips-linuxmusl-x64": { 183 | "version": "1.0.4", 184 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", 185 | "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", 186 | "cpu": [ 187 | "x64" 188 | ], 189 | "license": "LGPL-3.0-or-later", 190 | "optional": true, 191 | "os": [ 192 | "linux" 193 | ], 194 | "funding": { 195 | "url": "https://opencollective.com/libvips" 196 | } 197 | }, 198 | "node_modules/@img/sharp-linux-arm": { 199 | "version": "0.33.5", 200 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", 201 | "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", 202 | "cpu": [ 203 | "arm" 204 | ], 205 | "license": "Apache-2.0", 206 | "optional": true, 207 | "os": [ 208 | "linux" 209 | ], 210 | "engines": { 211 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 212 | }, 213 | "funding": { 214 | "url": "https://opencollective.com/libvips" 215 | }, 216 | "optionalDependencies": { 217 | "@img/sharp-libvips-linux-arm": "1.0.5" 218 | } 219 | }, 220 | "node_modules/@img/sharp-linux-arm64": { 221 | "version": "0.33.5", 222 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", 223 | "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", 224 | "cpu": [ 225 | "arm64" 226 | ], 227 | "license": "Apache-2.0", 228 | "optional": true, 229 | "os": [ 230 | "linux" 231 | ], 232 | "engines": { 233 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 234 | }, 235 | "funding": { 236 | "url": "https://opencollective.com/libvips" 237 | }, 238 | "optionalDependencies": { 239 | "@img/sharp-libvips-linux-arm64": "1.0.4" 240 | } 241 | }, 242 | "node_modules/@img/sharp-linux-s390x": { 243 | "version": "0.33.5", 244 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", 245 | "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", 246 | "cpu": [ 247 | "s390x" 248 | ], 249 | "license": "Apache-2.0", 250 | "optional": true, 251 | "os": [ 252 | "linux" 253 | ], 254 | "engines": { 255 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 256 | }, 257 | "funding": { 258 | "url": "https://opencollective.com/libvips" 259 | }, 260 | "optionalDependencies": { 261 | "@img/sharp-libvips-linux-s390x": "1.0.4" 262 | } 263 | }, 264 | "node_modules/@img/sharp-linux-x64": { 265 | "version": "0.33.5", 266 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", 267 | "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", 268 | "cpu": [ 269 | "x64" 270 | ], 271 | "license": "Apache-2.0", 272 | "optional": true, 273 | "os": [ 274 | "linux" 275 | ], 276 | "engines": { 277 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 278 | }, 279 | "funding": { 280 | "url": "https://opencollective.com/libvips" 281 | }, 282 | "optionalDependencies": { 283 | "@img/sharp-libvips-linux-x64": "1.0.4" 284 | } 285 | }, 286 | "node_modules/@img/sharp-linuxmusl-arm64": { 287 | "version": "0.33.5", 288 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", 289 | "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", 290 | "cpu": [ 291 | "arm64" 292 | ], 293 | "license": "Apache-2.0", 294 | "optional": true, 295 | "os": [ 296 | "linux" 297 | ], 298 | "engines": { 299 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 300 | }, 301 | "funding": { 302 | "url": "https://opencollective.com/libvips" 303 | }, 304 | "optionalDependencies": { 305 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" 306 | } 307 | }, 308 | "node_modules/@img/sharp-linuxmusl-x64": { 309 | "version": "0.33.5", 310 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", 311 | "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", 312 | "cpu": [ 313 | "x64" 314 | ], 315 | "license": "Apache-2.0", 316 | "optional": true, 317 | "os": [ 318 | "linux" 319 | ], 320 | "engines": { 321 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 322 | }, 323 | "funding": { 324 | "url": "https://opencollective.com/libvips" 325 | }, 326 | "optionalDependencies": { 327 | "@img/sharp-libvips-linuxmusl-x64": "1.0.4" 328 | } 329 | }, 330 | "node_modules/@img/sharp-wasm32": { 331 | "version": "0.33.5", 332 | "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", 333 | "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", 334 | "cpu": [ 335 | "wasm32" 336 | ], 337 | "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", 338 | "optional": true, 339 | "dependencies": { 340 | "@emnapi/runtime": "^1.2.0" 341 | }, 342 | "engines": { 343 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 344 | }, 345 | "funding": { 346 | "url": "https://opencollective.com/libvips" 347 | } 348 | }, 349 | "node_modules/@img/sharp-win32-ia32": { 350 | "version": "0.33.5", 351 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", 352 | "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", 353 | "cpu": [ 354 | "ia32" 355 | ], 356 | "license": "Apache-2.0 AND LGPL-3.0-or-later", 357 | "optional": true, 358 | "os": [ 359 | "win32" 360 | ], 361 | "engines": { 362 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 363 | }, 364 | "funding": { 365 | "url": "https://opencollective.com/libvips" 366 | } 367 | }, 368 | "node_modules/@img/sharp-win32-x64": { 369 | "version": "0.33.5", 370 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", 371 | "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", 372 | "cpu": [ 373 | "x64" 374 | ], 375 | "license": "Apache-2.0 AND LGPL-3.0-or-later", 376 | "optional": true, 377 | "os": [ 378 | "win32" 379 | ], 380 | "engines": { 381 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 382 | }, 383 | "funding": { 384 | "url": "https://opencollective.com/libvips" 385 | } 386 | }, 387 | "node_modules/@next/env": { 388 | "version": "15.0.4", 389 | "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.4.tgz", 390 | "integrity": "sha512-WNRvtgnRVDD4oM8gbUcRc27IAhaL4eXQ/2ovGbgLnPGUvdyDr8UdXP4Q/IBDdAdojnD2eScryIDirv0YUCjUVw==", 391 | "license": "MIT" 392 | }, 393 | "node_modules/@next/swc-darwin-arm64": { 394 | "version": "15.0.4", 395 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.4.tgz", 396 | "integrity": "sha512-QecQXPD0yRHxSXWL5Ff80nD+A56sUXZG9koUsjWJwA2Z0ZgVQfuy7gd0/otjxoOovPVHR2eVEvPMHbtZP+pf9w==", 397 | "cpu": [ 398 | "arm64" 399 | ], 400 | "license": "MIT", 401 | "optional": true, 402 | "os": [ 403 | "darwin" 404 | ], 405 | "engines": { 406 | "node": ">= 10" 407 | } 408 | }, 409 | "node_modules/@next/swc-darwin-x64": { 410 | "version": "15.0.4", 411 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.4.tgz", 412 | "integrity": "sha512-pb7Bye3y1Og3PlCtnz2oO4z+/b3pH2/HSYkLbL0hbVuTGil7fPen8/3pyyLjdiTLcFJ+ymeU3bck5hd4IPFFCA==", 413 | "cpu": [ 414 | "x64" 415 | ], 416 | "license": "MIT", 417 | "optional": true, 418 | "os": [ 419 | "darwin" 420 | ], 421 | "engines": { 422 | "node": ">= 10" 423 | } 424 | }, 425 | "node_modules/@next/swc-linux-arm64-gnu": { 426 | "version": "15.0.4", 427 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.4.tgz", 428 | "integrity": "sha512-12oSaBFjGpB227VHzoXF3gJoK2SlVGmFJMaBJSu5rbpaoT5OjP5OuCLuR9/jnyBF1BAWMs/boa6mLMoJPRriMA==", 429 | "cpu": [ 430 | "arm64" 431 | ], 432 | "license": "MIT", 433 | "optional": true, 434 | "os": [ 435 | "linux" 436 | ], 437 | "engines": { 438 | "node": ">= 10" 439 | } 440 | }, 441 | "node_modules/@next/swc-linux-arm64-musl": { 442 | "version": "15.0.4", 443 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.4.tgz", 444 | "integrity": "sha512-QARO88fR/a+wg+OFC3dGytJVVviiYFEyjc/Zzkjn/HevUuJ7qGUUAUYy5PGVWY1YgTzeRYz78akQrVQ8r+sMjw==", 445 | "cpu": [ 446 | "arm64" 447 | ], 448 | "license": "MIT", 449 | "optional": true, 450 | "os": [ 451 | "linux" 452 | ], 453 | "engines": { 454 | "node": ">= 10" 455 | } 456 | }, 457 | "node_modules/@next/swc-linux-x64-gnu": { 458 | "version": "15.0.4", 459 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.4.tgz", 460 | "integrity": "sha512-Z50b0gvYiUU1vLzfAMiChV8Y+6u/T2mdfpXPHraqpypP7yIT2UV9YBBhcwYkxujmCvGEcRTVWOj3EP7XW/wUnw==", 461 | "cpu": [ 462 | "x64" 463 | ], 464 | "license": "MIT", 465 | "optional": true, 466 | "os": [ 467 | "linux" 468 | ], 469 | "engines": { 470 | "node": ">= 10" 471 | } 472 | }, 473 | "node_modules/@next/swc-linux-x64-musl": { 474 | "version": "15.0.4", 475 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.4.tgz", 476 | "integrity": "sha512-7H9C4FAsrTAbA/ENzvFWsVytqRYhaJYKa2B3fyQcv96TkOGVMcvyS6s+sj4jZlacxxTcn7ygaMXUPkEk7b78zw==", 477 | "cpu": [ 478 | "x64" 479 | ], 480 | "license": "MIT", 481 | "optional": true, 482 | "os": [ 483 | "linux" 484 | ], 485 | "engines": { 486 | "node": ">= 10" 487 | } 488 | }, 489 | "node_modules/@next/swc-win32-arm64-msvc": { 490 | "version": "15.0.4", 491 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.4.tgz", 492 | "integrity": "sha512-Z/v3WV5xRaeWlgJzN9r4PydWD8sXV35ywc28W63i37G2jnUgScA4OOgS8hQdiXLxE3gqfSuHTicUhr7931OXPQ==", 493 | "cpu": [ 494 | "arm64" 495 | ], 496 | "license": "MIT", 497 | "optional": true, 498 | "os": [ 499 | "win32" 500 | ], 501 | "engines": { 502 | "node": ">= 10" 503 | } 504 | }, 505 | "node_modules/@next/swc-win32-x64-msvc": { 506 | "version": "15.0.4", 507 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.4.tgz", 508 | "integrity": "sha512-NGLchGruagh8lQpDr98bHLyWJXOBSmkEAfK980OiNBa7vNm6PsNoPvzTfstT78WyOeMRQphEQ455rggd7Eo+Dw==", 509 | "cpu": [ 510 | "x64" 511 | ], 512 | "license": "MIT", 513 | "optional": true, 514 | "os": [ 515 | "win32" 516 | ], 517 | "engines": { 518 | "node": ">= 10" 519 | } 520 | }, 521 | "node_modules/@swc/counter": { 522 | "version": "0.1.3", 523 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", 524 | "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", 525 | "license": "Apache-2.0" 526 | }, 527 | "node_modules/@swc/helpers": { 528 | "version": "0.5.13", 529 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", 530 | "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", 531 | "license": "Apache-2.0", 532 | "dependencies": { 533 | "tslib": "^2.4.0" 534 | } 535 | }, 536 | "node_modules/busboy": { 537 | "version": "1.6.0", 538 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 539 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 540 | "dependencies": { 541 | "streamsearch": "^1.1.0" 542 | }, 543 | "engines": { 544 | "node": ">=10.16.0" 545 | } 546 | }, 547 | "node_modules/caniuse-lite": { 548 | "version": "1.0.30001588", 549 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001588.tgz", 550 | "integrity": "sha512-+hVY9jE44uKLkH0SrUTqxjxqNTOWHsbnQDIKjwkZ3lNTzUUVdBLBGXtj/q5Mp5u98r3droaZAewQuEDzjQdZlQ==", 551 | "funding": [ 552 | { 553 | "type": "opencollective", 554 | "url": "https://opencollective.com/browserslist" 555 | }, 556 | { 557 | "type": "tidelift", 558 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 559 | }, 560 | { 561 | "type": "github", 562 | "url": "https://github.com/sponsors/ai" 563 | } 564 | ] 565 | }, 566 | "node_modules/client-only": { 567 | "version": "0.0.1", 568 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 569 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", 570 | "license": "MIT" 571 | }, 572 | "node_modules/color": { 573 | "version": "4.2.3", 574 | "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 575 | "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 576 | "license": "MIT", 577 | "optional": true, 578 | "dependencies": { 579 | "color-convert": "^2.0.1", 580 | "color-string": "^1.9.0" 581 | }, 582 | "engines": { 583 | "node": ">=12.5.0" 584 | } 585 | }, 586 | "node_modules/color-convert": { 587 | "version": "2.0.1", 588 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 589 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 590 | "license": "MIT", 591 | "optional": true, 592 | "dependencies": { 593 | "color-name": "~1.1.4" 594 | }, 595 | "engines": { 596 | "node": ">=7.0.0" 597 | } 598 | }, 599 | "node_modules/color-name": { 600 | "version": "1.1.4", 601 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 602 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 603 | "license": "MIT", 604 | "optional": true 605 | }, 606 | "node_modules/color-string": { 607 | "version": "1.9.1", 608 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 609 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 610 | "license": "MIT", 611 | "optional": true, 612 | "dependencies": { 613 | "color-name": "^1.0.0", 614 | "simple-swizzle": "^0.2.2" 615 | } 616 | }, 617 | "node_modules/detect-libc": { 618 | "version": "2.0.3", 619 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 620 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 621 | "license": "Apache-2.0", 622 | "optional": true, 623 | "engines": { 624 | "node": ">=8" 625 | } 626 | }, 627 | "node_modules/is-arrayish": { 628 | "version": "0.3.2", 629 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 630 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", 631 | "license": "MIT", 632 | "optional": true 633 | }, 634 | "node_modules/nanoid": { 635 | "version": "3.3.7", 636 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 637 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 638 | "funding": [ 639 | { 640 | "type": "github", 641 | "url": "https://github.com/sponsors/ai" 642 | } 643 | ], 644 | "bin": { 645 | "nanoid": "bin/nanoid.cjs" 646 | }, 647 | "engines": { 648 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 649 | } 650 | }, 651 | "node_modules/next": { 652 | "version": "15.0.4", 653 | "resolved": "https://registry.npmjs.org/next/-/next-15.0.4.tgz", 654 | "integrity": "sha512-nuy8FH6M1FG0lktGotamQDCXhh5hZ19Vo0ht1AOIQWrYJLP598TIUagKtvJrfJ5AGwB/WmDqkKaKhMpVifvGPA==", 655 | "license": "MIT", 656 | "dependencies": { 657 | "@next/env": "15.0.4", 658 | "@swc/counter": "0.1.3", 659 | "@swc/helpers": "0.5.13", 660 | "busboy": "1.6.0", 661 | "caniuse-lite": "^1.0.30001579", 662 | "postcss": "8.4.31", 663 | "styled-jsx": "5.1.6" 664 | }, 665 | "bin": { 666 | "next": "dist/bin/next" 667 | }, 668 | "engines": { 669 | "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" 670 | }, 671 | "optionalDependencies": { 672 | "@next/swc-darwin-arm64": "15.0.4", 673 | "@next/swc-darwin-x64": "15.0.4", 674 | "@next/swc-linux-arm64-gnu": "15.0.4", 675 | "@next/swc-linux-arm64-musl": "15.0.4", 676 | "@next/swc-linux-x64-gnu": "15.0.4", 677 | "@next/swc-linux-x64-musl": "15.0.4", 678 | "@next/swc-win32-arm64-msvc": "15.0.4", 679 | "@next/swc-win32-x64-msvc": "15.0.4", 680 | "sharp": "^0.33.5" 681 | }, 682 | "peerDependencies": { 683 | "@opentelemetry/api": "^1.1.0", 684 | "@playwright/test": "^1.41.2", 685 | "babel-plugin-react-compiler": "*", 686 | "react": "^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", 687 | "react-dom": "^18.2.0 || 19.0.0-rc-66855b96-20241106 || ^19.0.0", 688 | "sass": "^1.3.0" 689 | }, 690 | "peerDependenciesMeta": { 691 | "@opentelemetry/api": { 692 | "optional": true 693 | }, 694 | "@playwright/test": { 695 | "optional": true 696 | }, 697 | "babel-plugin-react-compiler": { 698 | "optional": true 699 | }, 700 | "sass": { 701 | "optional": true 702 | } 703 | } 704 | }, 705 | "node_modules/picocolors": { 706 | "version": "1.0.0", 707 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 708 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 709 | }, 710 | "node_modules/postcss": { 711 | "version": "8.4.31", 712 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", 713 | "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", 714 | "funding": [ 715 | { 716 | "type": "opencollective", 717 | "url": "https://opencollective.com/postcss/" 718 | }, 719 | { 720 | "type": "tidelift", 721 | "url": "https://tidelift.com/funding/github/npm/postcss" 722 | }, 723 | { 724 | "type": "github", 725 | "url": "https://github.com/sponsors/ai" 726 | } 727 | ], 728 | "dependencies": { 729 | "nanoid": "^3.3.6", 730 | "picocolors": "^1.0.0", 731 | "source-map-js": "^1.0.2" 732 | }, 733 | "engines": { 734 | "node": "^10 || ^12 || >=14" 735 | } 736 | }, 737 | "node_modules/react": { 738 | "version": "19.0.0", 739 | "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", 740 | "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", 741 | "license": "MIT", 742 | "engines": { 743 | "node": ">=0.10.0" 744 | } 745 | }, 746 | "node_modules/react-dom": { 747 | "version": "19.0.0", 748 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", 749 | "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", 750 | "license": "MIT", 751 | "dependencies": { 752 | "scheduler": "^0.25.0" 753 | }, 754 | "peerDependencies": { 755 | "react": "^19.0.0" 756 | } 757 | }, 758 | "node_modules/scheduler": { 759 | "version": "0.25.0", 760 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", 761 | "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", 762 | "license": "MIT" 763 | }, 764 | "node_modules/semver": { 765 | "version": "7.6.3", 766 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", 767 | "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", 768 | "license": "ISC", 769 | "optional": true, 770 | "bin": { 771 | "semver": "bin/semver.js" 772 | }, 773 | "engines": { 774 | "node": ">=10" 775 | } 776 | }, 777 | "node_modules/sharp": { 778 | "version": "0.33.5", 779 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", 780 | "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", 781 | "hasInstallScript": true, 782 | "license": "Apache-2.0", 783 | "optional": true, 784 | "dependencies": { 785 | "color": "^4.2.3", 786 | "detect-libc": "^2.0.3", 787 | "semver": "^7.6.3" 788 | }, 789 | "engines": { 790 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 791 | }, 792 | "funding": { 793 | "url": "https://opencollective.com/libvips" 794 | }, 795 | "optionalDependencies": { 796 | "@img/sharp-darwin-arm64": "0.33.5", 797 | "@img/sharp-darwin-x64": "0.33.5", 798 | "@img/sharp-libvips-darwin-arm64": "1.0.4", 799 | "@img/sharp-libvips-darwin-x64": "1.0.4", 800 | "@img/sharp-libvips-linux-arm": "1.0.5", 801 | "@img/sharp-libvips-linux-arm64": "1.0.4", 802 | "@img/sharp-libvips-linux-s390x": "1.0.4", 803 | "@img/sharp-libvips-linux-x64": "1.0.4", 804 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", 805 | "@img/sharp-libvips-linuxmusl-x64": "1.0.4", 806 | "@img/sharp-linux-arm": "0.33.5", 807 | "@img/sharp-linux-arm64": "0.33.5", 808 | "@img/sharp-linux-s390x": "0.33.5", 809 | "@img/sharp-linux-x64": "0.33.5", 810 | "@img/sharp-linuxmusl-arm64": "0.33.5", 811 | "@img/sharp-linuxmusl-x64": "0.33.5", 812 | "@img/sharp-wasm32": "0.33.5", 813 | "@img/sharp-win32-ia32": "0.33.5", 814 | "@img/sharp-win32-x64": "0.33.5" 815 | } 816 | }, 817 | "node_modules/simple-swizzle": { 818 | "version": "0.2.2", 819 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 820 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 821 | "license": "MIT", 822 | "optional": true, 823 | "dependencies": { 824 | "is-arrayish": "^0.3.1" 825 | } 826 | }, 827 | "node_modules/source-map-js": { 828 | "version": "1.0.2", 829 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 830 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 831 | "engines": { 832 | "node": ">=0.10.0" 833 | } 834 | }, 835 | "node_modules/streamsearch": { 836 | "version": "1.1.0", 837 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 838 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 839 | "engines": { 840 | "node": ">=10.0.0" 841 | } 842 | }, 843 | "node_modules/styled-jsx": { 844 | "version": "5.1.6", 845 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", 846 | "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", 847 | "license": "MIT", 848 | "dependencies": { 849 | "client-only": "0.0.1" 850 | }, 851 | "engines": { 852 | "node": ">= 12.0.0" 853 | }, 854 | "peerDependencies": { 855 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" 856 | }, 857 | "peerDependenciesMeta": { 858 | "@babel/core": { 859 | "optional": true 860 | }, 861 | "babel-plugin-macros": { 862 | "optional": true 863 | } 864 | } 865 | }, 866 | "node_modules/tslib": { 867 | "version": "2.8.1", 868 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 869 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 870 | "license": "0BSD" 871 | } 872 | } 873 | } 874 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hello-next", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start" 9 | }, 10 | "dependencies": { 11 | "next": "^15.0.4", 12 | "react": "^19.0.0", 13 | "react-dom": "^19.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/layout.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import './styles.css'; 4 | 5 | function RootLayout({ children }) { 6 | return ( 7 | 8 | 9 | {children} 10 | 11 | 12 | 13 | ); 14 | } 15 | 16 | export default RootLayout; 17 | -------------------------------------------------------------------------------- /src/app/page.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | function Home() { 4 | return ( 5 |
6 |

Hello Next!

7 |
8 | ); 9 | } 10 | 11 | export default Home; 12 | -------------------------------------------------------------------------------- /src/app/styles.css: -------------------------------------------------------------------------------- 1 | /* 2 | Josh's Custom CSS Reset 3 | https://www.joshwcomeau.com/css/custom-css-reset/ 4 | */ 5 | *, 6 | *::before, 7 | *::after { 8 | box-sizing: border-box; 9 | } 10 | * { 11 | margin: 0; 12 | } 13 | html, 14 | body { 15 | height: 100%; 16 | } 17 | body { 18 | line-height: 1.5; 19 | -webkit-font-smoothing: antialiased; 20 | } 21 | img, 22 | picture, 23 | video, 24 | canvas, 25 | svg { 26 | display: block; 27 | max-width: 100%; 28 | } 29 | input, 30 | button, 31 | textarea, 32 | select { 33 | font: inherit; 34 | } 35 | p, 36 | h1, 37 | h2, 38 | h3, 39 | h4, 40 | h5, 41 | h6 { 42 | overflow-wrap: break-word; 43 | } 44 | #root, 45 | #__next { 46 | isolation: isolate; 47 | } 48 | 49 | /* Minimal styles */ 50 | body { 51 | display: flex; 52 | flex-direction: column; 53 | justify-content: flex-start; 54 | padding: 16px; 55 | min-height: 100%; 56 | font-family: sans-serif; 57 | background: hsl(0deg 0% 95%); 58 | color: hsl(0deg 0% 10%); 59 | } 60 | main { 61 | width: 100%; 62 | max-width: 800px; 63 | padding: 16px 24px; 64 | margin: 0px auto; 65 | border: 1px solid hsl(0deg 0% 50% / 0.3); 66 | border-radius: 2px; 67 | background: white; 68 | } 69 | footer { 70 | width: 100%; 71 | font-size: 0.875rem; 72 | color: hsl(0deg 0% 30%); 73 | text-align: center; 74 | padding: 32px 0px; 75 | } 76 | --------------------------------------------------------------------------------