├── part-1 └── blog-starter-template.html ├── part-2 ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── styles.css ├── tailwind.config.js └── tailwind.css ├── part-3 ├── README.md ├── article.html ├── grids.html ├── package-lock.json ├── package.json ├── styles.css ├── tailwind.config.js └── tailwind.css ├── part-4 ├── README.md ├── brand-colors-preset.js ├── index.html ├── package-lock.json ├── package.json ├── styles.css ├── tailwind.config.js └── tailwind.css └── part-5 ├── README.md ├── examples ├── arrows.html ├── counters.html └── typography.html ├── package-lock.json ├── package.json ├── plugins ├── arrows.js └── counters.js ├── styles.css ├── tailwind.config.js └── tailwind.css /part-1/blog-starter-template.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 |
12 |
13 | 14 | Tailwind School 15 |
16 | 30 |
31 |
32 |
33 | 45 | 46 | 58 | 59 | 71 |
72 | 108 |
109 |
110 |
111 |

Want to stay up-to-date?

112 |

Join our mail list for hot news & new tutorials

113 |
114 |
115 |
116 | 117 | 118 |
119 |
120 |
121 | 161 |
162 | 163 | 164 | -------------------------------------------------------------------------------- /part-2/README.md: -------------------------------------------------------------------------------- 1 | # Learn Tailwind CSS: Going Beyond the Basics 2 | 3 | Project setup instructions: 4 | 5 | 1. Run `npm install` to install the dependencies. 6 | 1. Run `npm run dev` to build the styles. 7 | 1. Run `npm run dev:watch` to automatically build the styles on every change. -------------------------------------------------------------------------------- /part-2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 | WebCraft 16 | 17 |
18 | 19 | 22 | 23 | 45 |
46 | 47 |
48 |
Info
49 |
Lorem ipsum dolor sit amet consectetur adipisicing elit.
50 |
51 |
52 |
Warning
53 |
Lorem ipsum dolor sit amet consectetur adipisicing elit.
54 |
55 | 56 |
57 | 66 | 67 |
68 | 69 |
70 |
71 |

Dark mode in action! Click me to toggle between light and dark modes...

72 |

73 | Lorem ipsum... 74 |

75 |
76 |
77 | 78 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /part-2/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "part-2", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "part-2", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "tailwindcss": "^3.0.23" 13 | } 14 | }, 15 | "node_modules/@babel/code-frame": { 16 | "version": "7.16.7", 17 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 18 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 19 | "dev": true, 20 | "dependencies": { 21 | "@babel/highlight": "^7.16.7" 22 | }, 23 | "engines": { 24 | "node": ">=6.9.0" 25 | } 26 | }, 27 | "node_modules/@babel/helper-validator-identifier": { 28 | "version": "7.16.7", 29 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 30 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 31 | "dev": true, 32 | "engines": { 33 | "node": ">=6.9.0" 34 | } 35 | }, 36 | "node_modules/@babel/highlight": { 37 | "version": "7.16.10", 38 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", 39 | "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", 40 | "dev": true, 41 | "dependencies": { 42 | "@babel/helper-validator-identifier": "^7.16.7", 43 | "chalk": "^2.0.0", 44 | "js-tokens": "^4.0.0" 45 | }, 46 | "engines": { 47 | "node": ">=6.9.0" 48 | } 49 | }, 50 | "node_modules/@babel/highlight/node_modules/ansi-styles": { 51 | "version": "3.2.1", 52 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 53 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 54 | "dev": true, 55 | "dependencies": { 56 | "color-convert": "^1.9.0" 57 | }, 58 | "engines": { 59 | "node": ">=4" 60 | } 61 | }, 62 | "node_modules/@babel/highlight/node_modules/chalk": { 63 | "version": "2.4.2", 64 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 65 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 66 | "dev": true, 67 | "dependencies": { 68 | "ansi-styles": "^3.2.1", 69 | "escape-string-regexp": "^1.0.5", 70 | "supports-color": "^5.3.0" 71 | }, 72 | "engines": { 73 | "node": ">=4" 74 | } 75 | }, 76 | "node_modules/@babel/highlight/node_modules/color-convert": { 77 | "version": "1.9.3", 78 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 79 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 80 | "dev": true, 81 | "dependencies": { 82 | "color-name": "1.1.3" 83 | } 84 | }, 85 | "node_modules/@babel/highlight/node_modules/color-name": { 86 | "version": "1.1.3", 87 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 88 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 89 | "dev": true 90 | }, 91 | "node_modules/@babel/highlight/node_modules/has-flag": { 92 | "version": "3.0.0", 93 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 94 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 95 | "dev": true, 96 | "engines": { 97 | "node": ">=4" 98 | } 99 | }, 100 | "node_modules/@babel/highlight/node_modules/supports-color": { 101 | "version": "5.5.0", 102 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 103 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 104 | "dev": true, 105 | "dependencies": { 106 | "has-flag": "^3.0.0" 107 | }, 108 | "engines": { 109 | "node": ">=4" 110 | } 111 | }, 112 | "node_modules/@nodelib/fs.scandir": { 113 | "version": "2.1.5", 114 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 115 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 116 | "dev": true, 117 | "dependencies": { 118 | "@nodelib/fs.stat": "2.0.5", 119 | "run-parallel": "^1.1.9" 120 | }, 121 | "engines": { 122 | "node": ">= 8" 123 | } 124 | }, 125 | "node_modules/@nodelib/fs.stat": { 126 | "version": "2.0.5", 127 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 128 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 129 | "dev": true, 130 | "engines": { 131 | "node": ">= 8" 132 | } 133 | }, 134 | "node_modules/@nodelib/fs.walk": { 135 | "version": "1.2.8", 136 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 137 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 138 | "dev": true, 139 | "dependencies": { 140 | "@nodelib/fs.scandir": "2.1.5", 141 | "fastq": "^1.6.0" 142 | }, 143 | "engines": { 144 | "node": ">= 8" 145 | } 146 | }, 147 | "node_modules/@types/parse-json": { 148 | "version": "4.0.0", 149 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 150 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 151 | "dev": true 152 | }, 153 | "node_modules/acorn": { 154 | "version": "7.4.1", 155 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 156 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 157 | "dev": true, 158 | "bin": { 159 | "acorn": "bin/acorn" 160 | }, 161 | "engines": { 162 | "node": ">=0.4.0" 163 | } 164 | }, 165 | "node_modules/acorn-node": { 166 | "version": "1.8.2", 167 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 168 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 169 | "dev": true, 170 | "dependencies": { 171 | "acorn": "^7.0.0", 172 | "acorn-walk": "^7.0.0", 173 | "xtend": "^4.0.2" 174 | } 175 | }, 176 | "node_modules/acorn-walk": { 177 | "version": "7.2.0", 178 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 179 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 180 | "dev": true, 181 | "engines": { 182 | "node": ">=0.4.0" 183 | } 184 | }, 185 | "node_modules/ansi-styles": { 186 | "version": "4.3.0", 187 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 188 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 189 | "dev": true, 190 | "dependencies": { 191 | "color-convert": "^2.0.1" 192 | }, 193 | "engines": { 194 | "node": ">=8" 195 | }, 196 | "funding": { 197 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 198 | } 199 | }, 200 | "node_modules/anymatch": { 201 | "version": "3.1.2", 202 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 203 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 204 | "dev": true, 205 | "dependencies": { 206 | "normalize-path": "^3.0.0", 207 | "picomatch": "^2.0.4" 208 | }, 209 | "engines": { 210 | "node": ">= 8" 211 | } 212 | }, 213 | "node_modules/arg": { 214 | "version": "5.0.1", 215 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 216 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 217 | "dev": true 218 | }, 219 | "node_modules/autoprefixer": { 220 | "version": "10.4.4", 221 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", 222 | "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", 223 | "dev": true, 224 | "funding": [ 225 | { 226 | "type": "opencollective", 227 | "url": "https://opencollective.com/postcss/" 228 | }, 229 | { 230 | "type": "tidelift", 231 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 232 | } 233 | ], 234 | "peer": true, 235 | "dependencies": { 236 | "browserslist": "^4.20.2", 237 | "caniuse-lite": "^1.0.30001317", 238 | "fraction.js": "^4.2.0", 239 | "normalize-range": "^0.1.2", 240 | "picocolors": "^1.0.0", 241 | "postcss-value-parser": "^4.2.0" 242 | }, 243 | "bin": { 244 | "autoprefixer": "bin/autoprefixer" 245 | }, 246 | "engines": { 247 | "node": "^10 || ^12 || >=14" 248 | }, 249 | "peerDependencies": { 250 | "postcss": "^8.1.0" 251 | } 252 | }, 253 | "node_modules/binary-extensions": { 254 | "version": "2.2.0", 255 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 256 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 257 | "dev": true, 258 | "engines": { 259 | "node": ">=8" 260 | } 261 | }, 262 | "node_modules/braces": { 263 | "version": "3.0.2", 264 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 265 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 266 | "dev": true, 267 | "dependencies": { 268 | "fill-range": "^7.0.1" 269 | }, 270 | "engines": { 271 | "node": ">=8" 272 | } 273 | }, 274 | "node_modules/browserslist": { 275 | "version": "4.20.2", 276 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", 277 | "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", 278 | "dev": true, 279 | "funding": [ 280 | { 281 | "type": "opencollective", 282 | "url": "https://opencollective.com/browserslist" 283 | }, 284 | { 285 | "type": "tidelift", 286 | "url": "https://tidelift.com/funding/github/npm/browserslist" 287 | } 288 | ], 289 | "peer": true, 290 | "dependencies": { 291 | "caniuse-lite": "^1.0.30001317", 292 | "electron-to-chromium": "^1.4.84", 293 | "escalade": "^3.1.1", 294 | "node-releases": "^2.0.2", 295 | "picocolors": "^1.0.0" 296 | }, 297 | "bin": { 298 | "browserslist": "cli.js" 299 | }, 300 | "engines": { 301 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 302 | } 303 | }, 304 | "node_modules/callsites": { 305 | "version": "3.1.0", 306 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 307 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 308 | "dev": true, 309 | "engines": { 310 | "node": ">=6" 311 | } 312 | }, 313 | "node_modules/camelcase-css": { 314 | "version": "2.0.1", 315 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 316 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 317 | "dev": true, 318 | "engines": { 319 | "node": ">= 6" 320 | } 321 | }, 322 | "node_modules/caniuse-lite": { 323 | "version": "1.0.30001320", 324 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", 325 | "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==", 326 | "dev": true, 327 | "funding": [ 328 | { 329 | "type": "opencollective", 330 | "url": "https://opencollective.com/browserslist" 331 | }, 332 | { 333 | "type": "tidelift", 334 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 335 | } 336 | ], 337 | "peer": true 338 | }, 339 | "node_modules/chalk": { 340 | "version": "4.1.2", 341 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 342 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 343 | "dev": true, 344 | "dependencies": { 345 | "ansi-styles": "^4.1.0", 346 | "supports-color": "^7.1.0" 347 | }, 348 | "engines": { 349 | "node": ">=10" 350 | }, 351 | "funding": { 352 | "url": "https://github.com/chalk/chalk?sponsor=1" 353 | } 354 | }, 355 | "node_modules/chokidar": { 356 | "version": "3.5.3", 357 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 358 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 359 | "dev": true, 360 | "funding": [ 361 | { 362 | "type": "individual", 363 | "url": "https://paulmillr.com/funding/" 364 | } 365 | ], 366 | "dependencies": { 367 | "anymatch": "~3.1.2", 368 | "braces": "~3.0.2", 369 | "glob-parent": "~5.1.2", 370 | "is-binary-path": "~2.1.0", 371 | "is-glob": "~4.0.1", 372 | "normalize-path": "~3.0.0", 373 | "readdirp": "~3.6.0" 374 | }, 375 | "engines": { 376 | "node": ">= 8.10.0" 377 | }, 378 | "optionalDependencies": { 379 | "fsevents": "~2.3.2" 380 | } 381 | }, 382 | "node_modules/chokidar/node_modules/glob-parent": { 383 | "version": "5.1.2", 384 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 385 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 386 | "dev": true, 387 | "dependencies": { 388 | "is-glob": "^4.0.1" 389 | }, 390 | "engines": { 391 | "node": ">= 6" 392 | } 393 | }, 394 | "node_modules/color-convert": { 395 | "version": "2.0.1", 396 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 397 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 398 | "dev": true, 399 | "dependencies": { 400 | "color-name": "~1.1.4" 401 | }, 402 | "engines": { 403 | "node": ">=7.0.0" 404 | } 405 | }, 406 | "node_modules/color-name": { 407 | "version": "1.1.4", 408 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 409 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 410 | "dev": true 411 | }, 412 | "node_modules/cosmiconfig": { 413 | "version": "7.0.1", 414 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", 415 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", 416 | "dev": true, 417 | "dependencies": { 418 | "@types/parse-json": "^4.0.0", 419 | "import-fresh": "^3.2.1", 420 | "parse-json": "^5.0.0", 421 | "path-type": "^4.0.0", 422 | "yaml": "^1.10.0" 423 | }, 424 | "engines": { 425 | "node": ">=10" 426 | } 427 | }, 428 | "node_modules/cssesc": { 429 | "version": "3.0.0", 430 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 431 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 432 | "dev": true, 433 | "bin": { 434 | "cssesc": "bin/cssesc" 435 | }, 436 | "engines": { 437 | "node": ">=4" 438 | } 439 | }, 440 | "node_modules/defined": { 441 | "version": "1.0.0", 442 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 443 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 444 | "dev": true 445 | }, 446 | "node_modules/detective": { 447 | "version": "5.2.0", 448 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 449 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 450 | "dev": true, 451 | "dependencies": { 452 | "acorn-node": "^1.6.1", 453 | "defined": "^1.0.0", 454 | "minimist": "^1.1.1" 455 | }, 456 | "bin": { 457 | "detective": "bin/detective.js" 458 | }, 459 | "engines": { 460 | "node": ">=0.8.0" 461 | } 462 | }, 463 | "node_modules/didyoumean": { 464 | "version": "1.2.2", 465 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 466 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 467 | "dev": true 468 | }, 469 | "node_modules/dlv": { 470 | "version": "1.1.3", 471 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 472 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 473 | "dev": true 474 | }, 475 | "node_modules/electron-to-chromium": { 476 | "version": "1.4.96", 477 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", 478 | "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", 479 | "dev": true, 480 | "peer": true 481 | }, 482 | "node_modules/error-ex": { 483 | "version": "1.3.2", 484 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 485 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 486 | "dev": true, 487 | "dependencies": { 488 | "is-arrayish": "^0.2.1" 489 | } 490 | }, 491 | "node_modules/escalade": { 492 | "version": "3.1.1", 493 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 494 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 495 | "dev": true, 496 | "peer": true, 497 | "engines": { 498 | "node": ">=6" 499 | } 500 | }, 501 | "node_modules/escape-string-regexp": { 502 | "version": "1.0.5", 503 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 504 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 505 | "dev": true, 506 | "engines": { 507 | "node": ">=0.8.0" 508 | } 509 | }, 510 | "node_modules/fast-glob": { 511 | "version": "3.2.11", 512 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 513 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 514 | "dev": true, 515 | "dependencies": { 516 | "@nodelib/fs.stat": "^2.0.2", 517 | "@nodelib/fs.walk": "^1.2.3", 518 | "glob-parent": "^5.1.2", 519 | "merge2": "^1.3.0", 520 | "micromatch": "^4.0.4" 521 | }, 522 | "engines": { 523 | "node": ">=8.6.0" 524 | } 525 | }, 526 | "node_modules/fast-glob/node_modules/glob-parent": { 527 | "version": "5.1.2", 528 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 529 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 530 | "dev": true, 531 | "dependencies": { 532 | "is-glob": "^4.0.1" 533 | }, 534 | "engines": { 535 | "node": ">= 6" 536 | } 537 | }, 538 | "node_modules/fastq": { 539 | "version": "1.13.0", 540 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 541 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 542 | "dev": true, 543 | "dependencies": { 544 | "reusify": "^1.0.4" 545 | } 546 | }, 547 | "node_modules/fill-range": { 548 | "version": "7.0.1", 549 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 550 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 551 | "dev": true, 552 | "dependencies": { 553 | "to-regex-range": "^5.0.1" 554 | }, 555 | "engines": { 556 | "node": ">=8" 557 | } 558 | }, 559 | "node_modules/fraction.js": { 560 | "version": "4.2.0", 561 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 562 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 563 | "dev": true, 564 | "peer": true, 565 | "engines": { 566 | "node": "*" 567 | }, 568 | "funding": { 569 | "type": "patreon", 570 | "url": "https://www.patreon.com/infusion" 571 | } 572 | }, 573 | "node_modules/fsevents": { 574 | "version": "2.3.2", 575 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 576 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 577 | "dev": true, 578 | "hasInstallScript": true, 579 | "optional": true, 580 | "os": [ 581 | "darwin" 582 | ], 583 | "engines": { 584 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 585 | } 586 | }, 587 | "node_modules/function-bind": { 588 | "version": "1.1.1", 589 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 590 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 591 | "dev": true 592 | }, 593 | "node_modules/glob-parent": { 594 | "version": "6.0.2", 595 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 596 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 597 | "dev": true, 598 | "dependencies": { 599 | "is-glob": "^4.0.3" 600 | }, 601 | "engines": { 602 | "node": ">=10.13.0" 603 | } 604 | }, 605 | "node_modules/has": { 606 | "version": "1.0.3", 607 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 608 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 609 | "dev": true, 610 | "dependencies": { 611 | "function-bind": "^1.1.1" 612 | }, 613 | "engines": { 614 | "node": ">= 0.4.0" 615 | } 616 | }, 617 | "node_modules/has-flag": { 618 | "version": "4.0.0", 619 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 620 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 621 | "dev": true, 622 | "engines": { 623 | "node": ">=8" 624 | } 625 | }, 626 | "node_modules/import-fresh": { 627 | "version": "3.3.0", 628 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 629 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 630 | "dev": true, 631 | "dependencies": { 632 | "parent-module": "^1.0.0", 633 | "resolve-from": "^4.0.0" 634 | }, 635 | "engines": { 636 | "node": ">=6" 637 | }, 638 | "funding": { 639 | "url": "https://github.com/sponsors/sindresorhus" 640 | } 641 | }, 642 | "node_modules/is-arrayish": { 643 | "version": "0.2.1", 644 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 645 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 646 | "dev": true 647 | }, 648 | "node_modules/is-binary-path": { 649 | "version": "2.1.0", 650 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 651 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 652 | "dev": true, 653 | "dependencies": { 654 | "binary-extensions": "^2.0.0" 655 | }, 656 | "engines": { 657 | "node": ">=8" 658 | } 659 | }, 660 | "node_modules/is-core-module": { 661 | "version": "2.8.1", 662 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 663 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 664 | "dev": true, 665 | "dependencies": { 666 | "has": "^1.0.3" 667 | }, 668 | "funding": { 669 | "url": "https://github.com/sponsors/ljharb" 670 | } 671 | }, 672 | "node_modules/is-extglob": { 673 | "version": "2.1.1", 674 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 675 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 676 | "dev": true, 677 | "engines": { 678 | "node": ">=0.10.0" 679 | } 680 | }, 681 | "node_modules/is-glob": { 682 | "version": "4.0.3", 683 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 684 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 685 | "dev": true, 686 | "dependencies": { 687 | "is-extglob": "^2.1.1" 688 | }, 689 | "engines": { 690 | "node": ">=0.10.0" 691 | } 692 | }, 693 | "node_modules/is-number": { 694 | "version": "7.0.0", 695 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 696 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 697 | "dev": true, 698 | "engines": { 699 | "node": ">=0.12.0" 700 | } 701 | }, 702 | "node_modules/js-tokens": { 703 | "version": "4.0.0", 704 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 705 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 706 | "dev": true 707 | }, 708 | "node_modules/json-parse-even-better-errors": { 709 | "version": "2.3.1", 710 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 711 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 712 | "dev": true 713 | }, 714 | "node_modules/lilconfig": { 715 | "version": "2.0.5", 716 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", 717 | "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", 718 | "dev": true, 719 | "engines": { 720 | "node": ">=10" 721 | } 722 | }, 723 | "node_modules/lines-and-columns": { 724 | "version": "1.2.4", 725 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 726 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 727 | "dev": true 728 | }, 729 | "node_modules/merge2": { 730 | "version": "1.4.1", 731 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 732 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 733 | "dev": true, 734 | "engines": { 735 | "node": ">= 8" 736 | } 737 | }, 738 | "node_modules/micromatch": { 739 | "version": "4.0.5", 740 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 741 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 742 | "dev": true, 743 | "dependencies": { 744 | "braces": "^3.0.2", 745 | "picomatch": "^2.3.1" 746 | }, 747 | "engines": { 748 | "node": ">=8.6" 749 | } 750 | }, 751 | "node_modules/minimist": { 752 | "version": "1.2.6", 753 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 754 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 755 | "dev": true 756 | }, 757 | "node_modules/nanoid": { 758 | "version": "3.3.1", 759 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 760 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 761 | "dev": true, 762 | "bin": { 763 | "nanoid": "bin/nanoid.cjs" 764 | }, 765 | "engines": { 766 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 767 | } 768 | }, 769 | "node_modules/node-releases": { 770 | "version": "2.0.2", 771 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", 772 | "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", 773 | "dev": true, 774 | "peer": true 775 | }, 776 | "node_modules/normalize-path": { 777 | "version": "3.0.0", 778 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 779 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 780 | "dev": true, 781 | "engines": { 782 | "node": ">=0.10.0" 783 | } 784 | }, 785 | "node_modules/normalize-range": { 786 | "version": "0.1.2", 787 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 788 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", 789 | "dev": true, 790 | "peer": true, 791 | "engines": { 792 | "node": ">=0.10.0" 793 | } 794 | }, 795 | "node_modules/object-hash": { 796 | "version": "2.2.0", 797 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", 798 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", 799 | "dev": true, 800 | "engines": { 801 | "node": ">= 6" 802 | } 803 | }, 804 | "node_modules/parent-module": { 805 | "version": "1.0.1", 806 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 807 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 808 | "dev": true, 809 | "dependencies": { 810 | "callsites": "^3.0.0" 811 | }, 812 | "engines": { 813 | "node": ">=6" 814 | } 815 | }, 816 | "node_modules/parse-json": { 817 | "version": "5.2.0", 818 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 819 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 820 | "dev": true, 821 | "dependencies": { 822 | "@babel/code-frame": "^7.0.0", 823 | "error-ex": "^1.3.1", 824 | "json-parse-even-better-errors": "^2.3.0", 825 | "lines-and-columns": "^1.1.6" 826 | }, 827 | "engines": { 828 | "node": ">=8" 829 | }, 830 | "funding": { 831 | "url": "https://github.com/sponsors/sindresorhus" 832 | } 833 | }, 834 | "node_modules/path-parse": { 835 | "version": "1.0.7", 836 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 837 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 838 | "dev": true 839 | }, 840 | "node_modules/path-type": { 841 | "version": "4.0.0", 842 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 843 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 844 | "dev": true, 845 | "engines": { 846 | "node": ">=8" 847 | } 848 | }, 849 | "node_modules/picocolors": { 850 | "version": "1.0.0", 851 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 852 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 853 | "dev": true 854 | }, 855 | "node_modules/picomatch": { 856 | "version": "2.3.1", 857 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 858 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 859 | "dev": true, 860 | "engines": { 861 | "node": ">=8.6" 862 | }, 863 | "funding": { 864 | "url": "https://github.com/sponsors/jonschlinkert" 865 | } 866 | }, 867 | "node_modules/postcss": { 868 | "version": "8.4.12", 869 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", 870 | "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", 871 | "dev": true, 872 | "funding": [ 873 | { 874 | "type": "opencollective", 875 | "url": "https://opencollective.com/postcss/" 876 | }, 877 | { 878 | "type": "tidelift", 879 | "url": "https://tidelift.com/funding/github/npm/postcss" 880 | } 881 | ], 882 | "dependencies": { 883 | "nanoid": "^3.3.1", 884 | "picocolors": "^1.0.0", 885 | "source-map-js": "^1.0.2" 886 | }, 887 | "engines": { 888 | "node": "^10 || ^12 || >=14" 889 | } 890 | }, 891 | "node_modules/postcss-js": { 892 | "version": "4.0.0", 893 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 894 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 895 | "dev": true, 896 | "dependencies": { 897 | "camelcase-css": "^2.0.1" 898 | }, 899 | "engines": { 900 | "node": "^12 || ^14 || >= 16" 901 | }, 902 | "funding": { 903 | "type": "opencollective", 904 | "url": "https://opencollective.com/postcss/" 905 | }, 906 | "peerDependencies": { 907 | "postcss": "^8.3.3" 908 | } 909 | }, 910 | "node_modules/postcss-load-config": { 911 | "version": "3.1.3", 912 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz", 913 | "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==", 914 | "dev": true, 915 | "dependencies": { 916 | "lilconfig": "^2.0.4", 917 | "yaml": "^1.10.2" 918 | }, 919 | "engines": { 920 | "node": ">= 10" 921 | }, 922 | "funding": { 923 | "type": "opencollective", 924 | "url": "https://opencollective.com/postcss/" 925 | }, 926 | "peerDependencies": { 927 | "ts-node": ">=9.0.0" 928 | }, 929 | "peerDependenciesMeta": { 930 | "ts-node": { 931 | "optional": true 932 | } 933 | } 934 | }, 935 | "node_modules/postcss-nested": { 936 | "version": "5.0.6", 937 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 938 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 939 | "dev": true, 940 | "dependencies": { 941 | "postcss-selector-parser": "^6.0.6" 942 | }, 943 | "engines": { 944 | "node": ">=12.0" 945 | }, 946 | "funding": { 947 | "type": "opencollective", 948 | "url": "https://opencollective.com/postcss/" 949 | }, 950 | "peerDependencies": { 951 | "postcss": "^8.2.14" 952 | } 953 | }, 954 | "node_modules/postcss-selector-parser": { 955 | "version": "6.0.9", 956 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", 957 | "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", 958 | "dev": true, 959 | "dependencies": { 960 | "cssesc": "^3.0.0", 961 | "util-deprecate": "^1.0.2" 962 | }, 963 | "engines": { 964 | "node": ">=4" 965 | } 966 | }, 967 | "node_modules/postcss-value-parser": { 968 | "version": "4.2.0", 969 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 970 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 971 | "dev": true 972 | }, 973 | "node_modules/queue-microtask": { 974 | "version": "1.2.3", 975 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 976 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 977 | "dev": true, 978 | "funding": [ 979 | { 980 | "type": "github", 981 | "url": "https://github.com/sponsors/feross" 982 | }, 983 | { 984 | "type": "patreon", 985 | "url": "https://www.patreon.com/feross" 986 | }, 987 | { 988 | "type": "consulting", 989 | "url": "https://feross.org/support" 990 | } 991 | ] 992 | }, 993 | "node_modules/quick-lru": { 994 | "version": "5.1.1", 995 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 996 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 997 | "dev": true, 998 | "engines": { 999 | "node": ">=10" 1000 | }, 1001 | "funding": { 1002 | "url": "https://github.com/sponsors/sindresorhus" 1003 | } 1004 | }, 1005 | "node_modules/readdirp": { 1006 | "version": "3.6.0", 1007 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1008 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1009 | "dev": true, 1010 | "dependencies": { 1011 | "picomatch": "^2.2.1" 1012 | }, 1013 | "engines": { 1014 | "node": ">=8.10.0" 1015 | } 1016 | }, 1017 | "node_modules/resolve": { 1018 | "version": "1.22.0", 1019 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1020 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1021 | "dev": true, 1022 | "dependencies": { 1023 | "is-core-module": "^2.8.1", 1024 | "path-parse": "^1.0.7", 1025 | "supports-preserve-symlinks-flag": "^1.0.0" 1026 | }, 1027 | "bin": { 1028 | "resolve": "bin/resolve" 1029 | }, 1030 | "funding": { 1031 | "url": "https://github.com/sponsors/ljharb" 1032 | } 1033 | }, 1034 | "node_modules/resolve-from": { 1035 | "version": "4.0.0", 1036 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1037 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1038 | "dev": true, 1039 | "engines": { 1040 | "node": ">=4" 1041 | } 1042 | }, 1043 | "node_modules/reusify": { 1044 | "version": "1.0.4", 1045 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1046 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1047 | "dev": true, 1048 | "engines": { 1049 | "iojs": ">=1.0.0", 1050 | "node": ">=0.10.0" 1051 | } 1052 | }, 1053 | "node_modules/run-parallel": { 1054 | "version": "1.2.0", 1055 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1056 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1057 | "dev": true, 1058 | "funding": [ 1059 | { 1060 | "type": "github", 1061 | "url": "https://github.com/sponsors/feross" 1062 | }, 1063 | { 1064 | "type": "patreon", 1065 | "url": "https://www.patreon.com/feross" 1066 | }, 1067 | { 1068 | "type": "consulting", 1069 | "url": "https://feross.org/support" 1070 | } 1071 | ], 1072 | "dependencies": { 1073 | "queue-microtask": "^1.2.2" 1074 | } 1075 | }, 1076 | "node_modules/source-map-js": { 1077 | "version": "1.0.2", 1078 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1079 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1080 | "dev": true, 1081 | "engines": { 1082 | "node": ">=0.10.0" 1083 | } 1084 | }, 1085 | "node_modules/supports-color": { 1086 | "version": "7.2.0", 1087 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1088 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1089 | "dev": true, 1090 | "dependencies": { 1091 | "has-flag": "^4.0.0" 1092 | }, 1093 | "engines": { 1094 | "node": ">=8" 1095 | } 1096 | }, 1097 | "node_modules/supports-preserve-symlinks-flag": { 1098 | "version": "1.0.0", 1099 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1100 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1101 | "dev": true, 1102 | "engines": { 1103 | "node": ">= 0.4" 1104 | }, 1105 | "funding": { 1106 | "url": "https://github.com/sponsors/ljharb" 1107 | } 1108 | }, 1109 | "node_modules/tailwindcss": { 1110 | "version": "3.0.23", 1111 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", 1112 | "integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==", 1113 | "dev": true, 1114 | "dependencies": { 1115 | "arg": "^5.0.1", 1116 | "chalk": "^4.1.2", 1117 | "chokidar": "^3.5.3", 1118 | "color-name": "^1.1.4", 1119 | "cosmiconfig": "^7.0.1", 1120 | "detective": "^5.2.0", 1121 | "didyoumean": "^1.2.2", 1122 | "dlv": "^1.1.3", 1123 | "fast-glob": "^3.2.11", 1124 | "glob-parent": "^6.0.2", 1125 | "is-glob": "^4.0.3", 1126 | "normalize-path": "^3.0.0", 1127 | "object-hash": "^2.2.0", 1128 | "postcss": "^8.4.6", 1129 | "postcss-js": "^4.0.0", 1130 | "postcss-load-config": "^3.1.0", 1131 | "postcss-nested": "5.0.6", 1132 | "postcss-selector-parser": "^6.0.9", 1133 | "postcss-value-parser": "^4.2.0", 1134 | "quick-lru": "^5.1.1", 1135 | "resolve": "^1.22.0" 1136 | }, 1137 | "bin": { 1138 | "tailwind": "lib/cli.js", 1139 | "tailwindcss": "lib/cli.js" 1140 | }, 1141 | "engines": { 1142 | "node": ">=12.13.0" 1143 | }, 1144 | "peerDependencies": { 1145 | "autoprefixer": "^10.0.2", 1146 | "postcss": "^8.0.9" 1147 | } 1148 | }, 1149 | "node_modules/to-regex-range": { 1150 | "version": "5.0.1", 1151 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1152 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1153 | "dev": true, 1154 | "dependencies": { 1155 | "is-number": "^7.0.0" 1156 | }, 1157 | "engines": { 1158 | "node": ">=8.0" 1159 | } 1160 | }, 1161 | "node_modules/util-deprecate": { 1162 | "version": "1.0.2", 1163 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1164 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1165 | "dev": true 1166 | }, 1167 | "node_modules/xtend": { 1168 | "version": "4.0.2", 1169 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1170 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1171 | "dev": true, 1172 | "engines": { 1173 | "node": ">=0.4" 1174 | } 1175 | }, 1176 | "node_modules/yaml": { 1177 | "version": "1.10.2", 1178 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1179 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1180 | "dev": true, 1181 | "engines": { 1182 | "node": ">= 6" 1183 | } 1184 | } 1185 | }, 1186 | "dependencies": { 1187 | "@babel/code-frame": { 1188 | "version": "7.16.7", 1189 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 1190 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 1191 | "dev": true, 1192 | "requires": { 1193 | "@babel/highlight": "^7.16.7" 1194 | } 1195 | }, 1196 | "@babel/helper-validator-identifier": { 1197 | "version": "7.16.7", 1198 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 1199 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 1200 | "dev": true 1201 | }, 1202 | "@babel/highlight": { 1203 | "version": "7.16.10", 1204 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", 1205 | "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", 1206 | "dev": true, 1207 | "requires": { 1208 | "@babel/helper-validator-identifier": "^7.16.7", 1209 | "chalk": "^2.0.0", 1210 | "js-tokens": "^4.0.0" 1211 | }, 1212 | "dependencies": { 1213 | "ansi-styles": { 1214 | "version": "3.2.1", 1215 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1216 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1217 | "dev": true, 1218 | "requires": { 1219 | "color-convert": "^1.9.0" 1220 | } 1221 | }, 1222 | "chalk": { 1223 | "version": "2.4.2", 1224 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1225 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1226 | "dev": true, 1227 | "requires": { 1228 | "ansi-styles": "^3.2.1", 1229 | "escape-string-regexp": "^1.0.5", 1230 | "supports-color": "^5.3.0" 1231 | } 1232 | }, 1233 | "color-convert": { 1234 | "version": "1.9.3", 1235 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1236 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1237 | "dev": true, 1238 | "requires": { 1239 | "color-name": "1.1.3" 1240 | } 1241 | }, 1242 | "color-name": { 1243 | "version": "1.1.3", 1244 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1245 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1246 | "dev": true 1247 | }, 1248 | "has-flag": { 1249 | "version": "3.0.0", 1250 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1251 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1252 | "dev": true 1253 | }, 1254 | "supports-color": { 1255 | "version": "5.5.0", 1256 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1257 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1258 | "dev": true, 1259 | "requires": { 1260 | "has-flag": "^3.0.0" 1261 | } 1262 | } 1263 | } 1264 | }, 1265 | "@nodelib/fs.scandir": { 1266 | "version": "2.1.5", 1267 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1268 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1269 | "dev": true, 1270 | "requires": { 1271 | "@nodelib/fs.stat": "2.0.5", 1272 | "run-parallel": "^1.1.9" 1273 | } 1274 | }, 1275 | "@nodelib/fs.stat": { 1276 | "version": "2.0.5", 1277 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1278 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 1279 | "dev": true 1280 | }, 1281 | "@nodelib/fs.walk": { 1282 | "version": "1.2.8", 1283 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1284 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1285 | "dev": true, 1286 | "requires": { 1287 | "@nodelib/fs.scandir": "2.1.5", 1288 | "fastq": "^1.6.0" 1289 | } 1290 | }, 1291 | "@types/parse-json": { 1292 | "version": "4.0.0", 1293 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 1294 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 1295 | "dev": true 1296 | }, 1297 | "acorn": { 1298 | "version": "7.4.1", 1299 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 1300 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 1301 | "dev": true 1302 | }, 1303 | "acorn-node": { 1304 | "version": "1.8.2", 1305 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 1306 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 1307 | "dev": true, 1308 | "requires": { 1309 | "acorn": "^7.0.0", 1310 | "acorn-walk": "^7.0.0", 1311 | "xtend": "^4.0.2" 1312 | } 1313 | }, 1314 | "acorn-walk": { 1315 | "version": "7.2.0", 1316 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 1317 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 1318 | "dev": true 1319 | }, 1320 | "ansi-styles": { 1321 | "version": "4.3.0", 1322 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1323 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1324 | "dev": true, 1325 | "requires": { 1326 | "color-convert": "^2.0.1" 1327 | } 1328 | }, 1329 | "anymatch": { 1330 | "version": "3.1.2", 1331 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 1332 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 1333 | "dev": true, 1334 | "requires": { 1335 | "normalize-path": "^3.0.0", 1336 | "picomatch": "^2.0.4" 1337 | } 1338 | }, 1339 | "arg": { 1340 | "version": "5.0.1", 1341 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 1342 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 1343 | "dev": true 1344 | }, 1345 | "autoprefixer": { 1346 | "version": "10.4.4", 1347 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.4.tgz", 1348 | "integrity": "sha512-Tm8JxsB286VweiZ5F0anmbyGiNI3v3wGv3mz9W+cxEDYB/6jbnj6GM9H9mK3wIL8ftgl+C07Lcwb8PG5PCCPzA==", 1349 | "dev": true, 1350 | "peer": true, 1351 | "requires": { 1352 | "browserslist": "^4.20.2", 1353 | "caniuse-lite": "^1.0.30001317", 1354 | "fraction.js": "^4.2.0", 1355 | "normalize-range": "^0.1.2", 1356 | "picocolors": "^1.0.0", 1357 | "postcss-value-parser": "^4.2.0" 1358 | } 1359 | }, 1360 | "binary-extensions": { 1361 | "version": "2.2.0", 1362 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1363 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1364 | "dev": true 1365 | }, 1366 | "braces": { 1367 | "version": "3.0.2", 1368 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1369 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1370 | "dev": true, 1371 | "requires": { 1372 | "fill-range": "^7.0.1" 1373 | } 1374 | }, 1375 | "browserslist": { 1376 | "version": "4.20.2", 1377 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", 1378 | "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", 1379 | "dev": true, 1380 | "peer": true, 1381 | "requires": { 1382 | "caniuse-lite": "^1.0.30001317", 1383 | "electron-to-chromium": "^1.4.84", 1384 | "escalade": "^3.1.1", 1385 | "node-releases": "^2.0.2", 1386 | "picocolors": "^1.0.0" 1387 | } 1388 | }, 1389 | "callsites": { 1390 | "version": "3.1.0", 1391 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1392 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1393 | "dev": true 1394 | }, 1395 | "camelcase-css": { 1396 | "version": "2.0.1", 1397 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1398 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1399 | "dev": true 1400 | }, 1401 | "caniuse-lite": { 1402 | "version": "1.0.30001320", 1403 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001320.tgz", 1404 | "integrity": "sha512-MWPzG54AGdo3nWx7zHZTefseM5Y1ccM7hlQKHRqJkPozUaw3hNbBTMmLn16GG2FUzjR13Cr3NPfhIieX5PzXDA==", 1405 | "dev": true, 1406 | "peer": true 1407 | }, 1408 | "chalk": { 1409 | "version": "4.1.2", 1410 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1411 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1412 | "dev": true, 1413 | "requires": { 1414 | "ansi-styles": "^4.1.0", 1415 | "supports-color": "^7.1.0" 1416 | } 1417 | }, 1418 | "chokidar": { 1419 | "version": "3.5.3", 1420 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1421 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1422 | "dev": true, 1423 | "requires": { 1424 | "anymatch": "~3.1.2", 1425 | "braces": "~3.0.2", 1426 | "fsevents": "~2.3.2", 1427 | "glob-parent": "~5.1.2", 1428 | "is-binary-path": "~2.1.0", 1429 | "is-glob": "~4.0.1", 1430 | "normalize-path": "~3.0.0", 1431 | "readdirp": "~3.6.0" 1432 | }, 1433 | "dependencies": { 1434 | "glob-parent": { 1435 | "version": "5.1.2", 1436 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1437 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1438 | "dev": true, 1439 | "requires": { 1440 | "is-glob": "^4.0.1" 1441 | } 1442 | } 1443 | } 1444 | }, 1445 | "color-convert": { 1446 | "version": "2.0.1", 1447 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1448 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1449 | "dev": true, 1450 | "requires": { 1451 | "color-name": "~1.1.4" 1452 | } 1453 | }, 1454 | "color-name": { 1455 | "version": "1.1.4", 1456 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1457 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1458 | "dev": true 1459 | }, 1460 | "cosmiconfig": { 1461 | "version": "7.0.1", 1462 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", 1463 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", 1464 | "dev": true, 1465 | "requires": { 1466 | "@types/parse-json": "^4.0.0", 1467 | "import-fresh": "^3.2.1", 1468 | "parse-json": "^5.0.0", 1469 | "path-type": "^4.0.0", 1470 | "yaml": "^1.10.0" 1471 | } 1472 | }, 1473 | "cssesc": { 1474 | "version": "3.0.0", 1475 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1476 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1477 | "dev": true 1478 | }, 1479 | "defined": { 1480 | "version": "1.0.0", 1481 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 1482 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 1483 | "dev": true 1484 | }, 1485 | "detective": { 1486 | "version": "5.2.0", 1487 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 1488 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 1489 | "dev": true, 1490 | "requires": { 1491 | "acorn-node": "^1.6.1", 1492 | "defined": "^1.0.0", 1493 | "minimist": "^1.1.1" 1494 | } 1495 | }, 1496 | "didyoumean": { 1497 | "version": "1.2.2", 1498 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1499 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1500 | "dev": true 1501 | }, 1502 | "dlv": { 1503 | "version": "1.1.3", 1504 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1505 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1506 | "dev": true 1507 | }, 1508 | "electron-to-chromium": { 1509 | "version": "1.4.96", 1510 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.96.tgz", 1511 | "integrity": "sha512-DPNjvNGPabv6FcyjzLAN4C0psN/GgD9rSGvMTuv81SeXG/EX3mCz0wiw9N1tUEnfQXYCJi3H8M0oFPRziZh7rw==", 1512 | "dev": true, 1513 | "peer": true 1514 | }, 1515 | "error-ex": { 1516 | "version": "1.3.2", 1517 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1518 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1519 | "dev": true, 1520 | "requires": { 1521 | "is-arrayish": "^0.2.1" 1522 | } 1523 | }, 1524 | "escalade": { 1525 | "version": "3.1.1", 1526 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1527 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1528 | "dev": true, 1529 | "peer": true 1530 | }, 1531 | "escape-string-regexp": { 1532 | "version": "1.0.5", 1533 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1534 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1535 | "dev": true 1536 | }, 1537 | "fast-glob": { 1538 | "version": "3.2.11", 1539 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 1540 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 1541 | "dev": true, 1542 | "requires": { 1543 | "@nodelib/fs.stat": "^2.0.2", 1544 | "@nodelib/fs.walk": "^1.2.3", 1545 | "glob-parent": "^5.1.2", 1546 | "merge2": "^1.3.0", 1547 | "micromatch": "^4.0.4" 1548 | }, 1549 | "dependencies": { 1550 | "glob-parent": { 1551 | "version": "5.1.2", 1552 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1553 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1554 | "dev": true, 1555 | "requires": { 1556 | "is-glob": "^4.0.1" 1557 | } 1558 | } 1559 | } 1560 | }, 1561 | "fastq": { 1562 | "version": "1.13.0", 1563 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1564 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1565 | "dev": true, 1566 | "requires": { 1567 | "reusify": "^1.0.4" 1568 | } 1569 | }, 1570 | "fill-range": { 1571 | "version": "7.0.1", 1572 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1573 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1574 | "dev": true, 1575 | "requires": { 1576 | "to-regex-range": "^5.0.1" 1577 | } 1578 | }, 1579 | "fraction.js": { 1580 | "version": "4.2.0", 1581 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 1582 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 1583 | "dev": true, 1584 | "peer": true 1585 | }, 1586 | "fsevents": { 1587 | "version": "2.3.2", 1588 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1589 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1590 | "dev": true, 1591 | "optional": true 1592 | }, 1593 | "function-bind": { 1594 | "version": "1.1.1", 1595 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1596 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1597 | "dev": true 1598 | }, 1599 | "glob-parent": { 1600 | "version": "6.0.2", 1601 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1602 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1603 | "dev": true, 1604 | "requires": { 1605 | "is-glob": "^4.0.3" 1606 | } 1607 | }, 1608 | "has": { 1609 | "version": "1.0.3", 1610 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1611 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1612 | "dev": true, 1613 | "requires": { 1614 | "function-bind": "^1.1.1" 1615 | } 1616 | }, 1617 | "has-flag": { 1618 | "version": "4.0.0", 1619 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1620 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1621 | "dev": true 1622 | }, 1623 | "import-fresh": { 1624 | "version": "3.3.0", 1625 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1626 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1627 | "dev": true, 1628 | "requires": { 1629 | "parent-module": "^1.0.0", 1630 | "resolve-from": "^4.0.0" 1631 | } 1632 | }, 1633 | "is-arrayish": { 1634 | "version": "0.2.1", 1635 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1636 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1637 | "dev": true 1638 | }, 1639 | "is-binary-path": { 1640 | "version": "2.1.0", 1641 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1642 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1643 | "dev": true, 1644 | "requires": { 1645 | "binary-extensions": "^2.0.0" 1646 | } 1647 | }, 1648 | "is-core-module": { 1649 | "version": "2.8.1", 1650 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1651 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1652 | "dev": true, 1653 | "requires": { 1654 | "has": "^1.0.3" 1655 | } 1656 | }, 1657 | "is-extglob": { 1658 | "version": "2.1.1", 1659 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1660 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1661 | "dev": true 1662 | }, 1663 | "is-glob": { 1664 | "version": "4.0.3", 1665 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1666 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1667 | "dev": true, 1668 | "requires": { 1669 | "is-extglob": "^2.1.1" 1670 | } 1671 | }, 1672 | "is-number": { 1673 | "version": "7.0.0", 1674 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1675 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1676 | "dev": true 1677 | }, 1678 | "js-tokens": { 1679 | "version": "4.0.0", 1680 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1681 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1682 | "dev": true 1683 | }, 1684 | "json-parse-even-better-errors": { 1685 | "version": "2.3.1", 1686 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1687 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1688 | "dev": true 1689 | }, 1690 | "lilconfig": { 1691 | "version": "2.0.5", 1692 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", 1693 | "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", 1694 | "dev": true 1695 | }, 1696 | "lines-and-columns": { 1697 | "version": "1.2.4", 1698 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1699 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1700 | "dev": true 1701 | }, 1702 | "merge2": { 1703 | "version": "1.4.1", 1704 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1705 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1706 | "dev": true 1707 | }, 1708 | "micromatch": { 1709 | "version": "4.0.5", 1710 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1711 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1712 | "dev": true, 1713 | "requires": { 1714 | "braces": "^3.0.2", 1715 | "picomatch": "^2.3.1" 1716 | } 1717 | }, 1718 | "minimist": { 1719 | "version": "1.2.6", 1720 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 1721 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 1722 | "dev": true 1723 | }, 1724 | "nanoid": { 1725 | "version": "3.3.1", 1726 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", 1727 | "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", 1728 | "dev": true 1729 | }, 1730 | "node-releases": { 1731 | "version": "2.0.2", 1732 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", 1733 | "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", 1734 | "dev": true, 1735 | "peer": true 1736 | }, 1737 | "normalize-path": { 1738 | "version": "3.0.0", 1739 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1740 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1741 | "dev": true 1742 | }, 1743 | "normalize-range": { 1744 | "version": "0.1.2", 1745 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1746 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", 1747 | "dev": true, 1748 | "peer": true 1749 | }, 1750 | "object-hash": { 1751 | "version": "2.2.0", 1752 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", 1753 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", 1754 | "dev": true 1755 | }, 1756 | "parent-module": { 1757 | "version": "1.0.1", 1758 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1759 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1760 | "dev": true, 1761 | "requires": { 1762 | "callsites": "^3.0.0" 1763 | } 1764 | }, 1765 | "parse-json": { 1766 | "version": "5.2.0", 1767 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1768 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1769 | "dev": true, 1770 | "requires": { 1771 | "@babel/code-frame": "^7.0.0", 1772 | "error-ex": "^1.3.1", 1773 | "json-parse-even-better-errors": "^2.3.0", 1774 | "lines-and-columns": "^1.1.6" 1775 | } 1776 | }, 1777 | "path-parse": { 1778 | "version": "1.0.7", 1779 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1780 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1781 | "dev": true 1782 | }, 1783 | "path-type": { 1784 | "version": "4.0.0", 1785 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1786 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1787 | "dev": true 1788 | }, 1789 | "picocolors": { 1790 | "version": "1.0.0", 1791 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1792 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1793 | "dev": true 1794 | }, 1795 | "picomatch": { 1796 | "version": "2.3.1", 1797 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1798 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1799 | "dev": true 1800 | }, 1801 | "postcss": { 1802 | "version": "8.4.12", 1803 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.12.tgz", 1804 | "integrity": "sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg==", 1805 | "dev": true, 1806 | "requires": { 1807 | "nanoid": "^3.3.1", 1808 | "picocolors": "^1.0.0", 1809 | "source-map-js": "^1.0.2" 1810 | } 1811 | }, 1812 | "postcss-js": { 1813 | "version": "4.0.0", 1814 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1815 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1816 | "dev": true, 1817 | "requires": { 1818 | "camelcase-css": "^2.0.1" 1819 | } 1820 | }, 1821 | "postcss-load-config": { 1822 | "version": "3.1.3", 1823 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz", 1824 | "integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==", 1825 | "dev": true, 1826 | "requires": { 1827 | "lilconfig": "^2.0.4", 1828 | "yaml": "^1.10.2" 1829 | } 1830 | }, 1831 | "postcss-nested": { 1832 | "version": "5.0.6", 1833 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 1834 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 1835 | "dev": true, 1836 | "requires": { 1837 | "postcss-selector-parser": "^6.0.6" 1838 | } 1839 | }, 1840 | "postcss-selector-parser": { 1841 | "version": "6.0.9", 1842 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", 1843 | "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", 1844 | "dev": true, 1845 | "requires": { 1846 | "cssesc": "^3.0.0", 1847 | "util-deprecate": "^1.0.2" 1848 | } 1849 | }, 1850 | "postcss-value-parser": { 1851 | "version": "4.2.0", 1852 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1853 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1854 | "dev": true 1855 | }, 1856 | "queue-microtask": { 1857 | "version": "1.2.3", 1858 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1859 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1860 | "dev": true 1861 | }, 1862 | "quick-lru": { 1863 | "version": "5.1.1", 1864 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1865 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1866 | "dev": true 1867 | }, 1868 | "readdirp": { 1869 | "version": "3.6.0", 1870 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1871 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1872 | "dev": true, 1873 | "requires": { 1874 | "picomatch": "^2.2.1" 1875 | } 1876 | }, 1877 | "resolve": { 1878 | "version": "1.22.0", 1879 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 1880 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 1881 | "dev": true, 1882 | "requires": { 1883 | "is-core-module": "^2.8.1", 1884 | "path-parse": "^1.0.7", 1885 | "supports-preserve-symlinks-flag": "^1.0.0" 1886 | } 1887 | }, 1888 | "resolve-from": { 1889 | "version": "4.0.0", 1890 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1891 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1892 | "dev": true 1893 | }, 1894 | "reusify": { 1895 | "version": "1.0.4", 1896 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1897 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1898 | "dev": true 1899 | }, 1900 | "run-parallel": { 1901 | "version": "1.2.0", 1902 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1903 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1904 | "dev": true, 1905 | "requires": { 1906 | "queue-microtask": "^1.2.2" 1907 | } 1908 | }, 1909 | "source-map-js": { 1910 | "version": "1.0.2", 1911 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1912 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1913 | "dev": true 1914 | }, 1915 | "supports-color": { 1916 | "version": "7.2.0", 1917 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1918 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1919 | "dev": true, 1920 | "requires": { 1921 | "has-flag": "^4.0.0" 1922 | } 1923 | }, 1924 | "supports-preserve-symlinks-flag": { 1925 | "version": "1.0.0", 1926 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1927 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1928 | "dev": true 1929 | }, 1930 | "tailwindcss": { 1931 | "version": "3.0.23", 1932 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.23.tgz", 1933 | "integrity": "sha512-+OZOV9ubyQ6oI2BXEhzw4HrqvgcARY38xv3zKcjnWtMIZstEsXdI9xftd1iB7+RbOnj2HOEzkA0OyB5BaSxPQA==", 1934 | "dev": true, 1935 | "requires": { 1936 | "arg": "^5.0.1", 1937 | "chalk": "^4.1.2", 1938 | "chokidar": "^3.5.3", 1939 | "color-name": "^1.1.4", 1940 | "cosmiconfig": "^7.0.1", 1941 | "detective": "^5.2.0", 1942 | "didyoumean": "^1.2.2", 1943 | "dlv": "^1.1.3", 1944 | "fast-glob": "^3.2.11", 1945 | "glob-parent": "^6.0.2", 1946 | "is-glob": "^4.0.3", 1947 | "normalize-path": "^3.0.0", 1948 | "object-hash": "^2.2.0", 1949 | "postcss": "^8.4.6", 1950 | "postcss-js": "^4.0.0", 1951 | "postcss-load-config": "^3.1.0", 1952 | "postcss-nested": "5.0.6", 1953 | "postcss-selector-parser": "^6.0.9", 1954 | "postcss-value-parser": "^4.2.0", 1955 | "quick-lru": "^5.1.1", 1956 | "resolve": "^1.22.0" 1957 | } 1958 | }, 1959 | "to-regex-range": { 1960 | "version": "5.0.1", 1961 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1962 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1963 | "dev": true, 1964 | "requires": { 1965 | "is-number": "^7.0.0" 1966 | } 1967 | }, 1968 | "util-deprecate": { 1969 | "version": "1.0.2", 1970 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1971 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1972 | "dev": true 1973 | }, 1974 | "xtend": { 1975 | "version": "4.0.2", 1976 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1977 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1978 | "dev": true 1979 | }, 1980 | "yaml": { 1981 | "version": "1.10.2", 1982 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1983 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1984 | "dev": true 1985 | } 1986 | } 1987 | } 1988 | -------------------------------------------------------------------------------- /part-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-part-2", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "npx tailwindcss -i styles.css -o tailwind.css", 8 | "dev:watch": "npx tailwindcss -i styles.css -o tailwind.css -w" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "tailwindcss": "^3.0.23" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /part-2/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer components { 6 | .alert { 7 | @apply flex flex-col p-4 pt-2 w-full border-l-8; 8 | } 9 | 10 | .alert-title { 11 | @apply font-semibold italic text-lg; 12 | } 13 | 14 | .alert-content { 15 | @apply leading-tight text-sm; 16 | } 17 | 18 | .alert-info { 19 | @apply bg-blue-100 border-blue-500 20 | } 21 | 22 | .alert-info-title { 23 | @apply text-blue-500; 24 | } 25 | 26 | .alert-info-content { 27 | @apply text-blue-800; 28 | } 29 | 30 | .alert-warning { 31 | @apply bg-red-100 border-red-500 32 | } 33 | 34 | .alert-warning-title { 35 | @apply text-red-500; 36 | } 37 | 38 | .alert-warning-content { 39 | @apply text-red-800; 40 | } 41 | } -------------------------------------------------------------------------------- /part-2/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | darkMode: 'class', 3 | content: ['index.html'], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /part-2/tailwind.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr:where([title]) { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | line-height: inherit; 191 | /* 1 */ 192 | color: inherit; 193 | /* 1 */ 194 | margin: 0; 195 | /* 2 */ 196 | padding: 0; 197 | /* 3 */ 198 | } 199 | 200 | /* 201 | Remove the inheritance of text transform in Edge and Firefox. 202 | */ 203 | 204 | button, 205 | select { 206 | text-transform: none; 207 | } 208 | 209 | /* 210 | 1. Correct the inability to style clickable types in iOS and Safari. 211 | 2. Remove default button styles. 212 | */ 213 | 214 | button, 215 | [type='button'], 216 | [type='reset'], 217 | [type='submit'] { 218 | -webkit-appearance: button; 219 | /* 1 */ 220 | background-color: transparent; 221 | /* 2 */ 222 | background-image: none; 223 | /* 2 */ 224 | } 225 | 226 | /* 227 | Use the modern Firefox focus style for all focusable elements. 228 | */ 229 | 230 | :-moz-focusring { 231 | outline: auto; 232 | } 233 | 234 | /* 235 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 236 | */ 237 | 238 | :-moz-ui-invalid { 239 | box-shadow: none; 240 | } 241 | 242 | /* 243 | Add the correct vertical alignment in Chrome and Firefox. 244 | */ 245 | 246 | progress { 247 | vertical-align: baseline; 248 | } 249 | 250 | /* 251 | Correct the cursor style of increment and decrement buttons in Safari. 252 | */ 253 | 254 | ::-webkit-inner-spin-button, 255 | ::-webkit-outer-spin-button { 256 | height: auto; 257 | } 258 | 259 | /* 260 | 1. Correct the odd appearance in Chrome and Safari. 261 | 2. Correct the outline style in Safari. 262 | */ 263 | 264 | [type='search'] { 265 | -webkit-appearance: textfield; 266 | /* 1 */ 267 | outline-offset: -2px; 268 | /* 2 */ 269 | } 270 | 271 | /* 272 | Remove the inner padding in Chrome and Safari on macOS. 273 | */ 274 | 275 | ::-webkit-search-decoration { 276 | -webkit-appearance: none; 277 | } 278 | 279 | /* 280 | 1. Correct the inability to style clickable types in iOS and Safari. 281 | 2. Change font properties to `inherit` in Safari. 282 | */ 283 | 284 | ::-webkit-file-upload-button { 285 | -webkit-appearance: button; 286 | /* 1 */ 287 | font: inherit; 288 | /* 2 */ 289 | } 290 | 291 | /* 292 | Add the correct display in Chrome and Safari. 293 | */ 294 | 295 | summary { 296 | display: list-item; 297 | } 298 | 299 | /* 300 | Removes the default spacing and border for appropriate elements. 301 | */ 302 | 303 | blockquote, 304 | dl, 305 | dd, 306 | h1, 307 | h2, 308 | h3, 309 | h4, 310 | h5, 311 | h6, 312 | hr, 313 | figure, 314 | p, 315 | pre { 316 | margin: 0; 317 | } 318 | 319 | fieldset { 320 | margin: 0; 321 | padding: 0; 322 | } 323 | 324 | legend { 325 | padding: 0; 326 | } 327 | 328 | ol, 329 | ul, 330 | menu { 331 | list-style: none; 332 | margin: 0; 333 | padding: 0; 334 | } 335 | 336 | /* 337 | Prevent resizing textareas horizontally by default. 338 | */ 339 | 340 | textarea { 341 | resize: vertical; 342 | } 343 | 344 | /* 345 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 346 | 2. Set the default placeholder color to the user's configured gray 400 color. 347 | */ 348 | 349 | input::-moz-placeholder, textarea::-moz-placeholder { 350 | opacity: 1; 351 | /* 1 */ 352 | color: #9ca3af; 353 | /* 2 */ 354 | } 355 | 356 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* 419 | Ensure the default browser behavior of the `hidden` attribute. 420 | */ 421 | 422 | [hidden] { 423 | display: none; 424 | } 425 | 426 | *, ::before, ::after { 427 | --tw-translate-x: 0; 428 | --tw-translate-y: 0; 429 | --tw-rotate: 0; 430 | --tw-skew-x: 0; 431 | --tw-skew-y: 0; 432 | --tw-scale-x: 1; 433 | --tw-scale-y: 1; 434 | --tw-pan-x: ; 435 | --tw-pan-y: ; 436 | --tw-pinch-zoom: ; 437 | --tw-scroll-snap-strictness: proximity; 438 | --tw-ordinal: ; 439 | --tw-slashed-zero: ; 440 | --tw-numeric-figure: ; 441 | --tw-numeric-spacing: ; 442 | --tw-numeric-fraction: ; 443 | --tw-ring-inset: ; 444 | --tw-ring-offset-width: 0px; 445 | --tw-ring-offset-color: #fff; 446 | --tw-ring-color: rgb(59 130 246 / 0.5); 447 | --tw-ring-offset-shadow: 0 0 #0000; 448 | --tw-ring-shadow: 0 0 #0000; 449 | --tw-shadow: 0 0 #0000; 450 | --tw-shadow-colored: 0 0 #0000; 451 | --tw-blur: ; 452 | --tw-brightness: ; 453 | --tw-contrast: ; 454 | --tw-grayscale: ; 455 | --tw-hue-rotate: ; 456 | --tw-invert: ; 457 | --tw-saturate: ; 458 | --tw-sepia: ; 459 | --tw-drop-shadow: ; 460 | --tw-backdrop-blur: ; 461 | --tw-backdrop-brightness: ; 462 | --tw-backdrop-contrast: ; 463 | --tw-backdrop-grayscale: ; 464 | --tw-backdrop-hue-rotate: ; 465 | --tw-backdrop-invert: ; 466 | --tw-backdrop-opacity: ; 467 | --tw-backdrop-saturate: ; 468 | --tw-backdrop-sepia: ; 469 | } 470 | 471 | .alert { 472 | display: flex; 473 | width: 100%; 474 | flex-direction: column; 475 | border-left-width: 8px; 476 | padding: 1rem; 477 | padding-top: 0.5rem; 478 | } 479 | 480 | .alert-title { 481 | font-size: 1.125rem; 482 | line-height: 1.75rem; 483 | font-weight: 600; 484 | font-style: italic; 485 | } 486 | 487 | .alert-content { 488 | font-size: 0.875rem; 489 | line-height: 1.25rem; 490 | line-height: 1.25; 491 | } 492 | 493 | .alert-info { 494 | --tw-border-opacity: 1; 495 | border-color: rgb(59 130 246 / var(--tw-border-opacity)); 496 | --tw-bg-opacity: 1; 497 | background-color: rgb(219 234 254 / var(--tw-bg-opacity)); 498 | } 499 | 500 | .alert-info-title { 501 | --tw-text-opacity: 1; 502 | color: rgb(59 130 246 / var(--tw-text-opacity)); 503 | } 504 | 505 | .alert-info-content { 506 | --tw-text-opacity: 1; 507 | color: rgb(30 64 175 / var(--tw-text-opacity)); 508 | } 509 | 510 | .alert-warning { 511 | --tw-border-opacity: 1; 512 | border-color: rgb(239 68 68 / var(--tw-border-opacity)); 513 | --tw-bg-opacity: 1; 514 | background-color: rgb(254 226 226 / var(--tw-bg-opacity)); 515 | } 516 | 517 | .alert-warning-title { 518 | --tw-text-opacity: 1; 519 | color: rgb(239 68 68 / var(--tw-text-opacity)); 520 | } 521 | 522 | .alert-warning-content { 523 | --tw-text-opacity: 1; 524 | color: rgb(153 27 27 / var(--tw-text-opacity)); 525 | } 526 | 527 | .m-6 { 528 | margin: 1.5rem; 529 | } 530 | 531 | .m-5 { 532 | margin: 1.25rem; 533 | } 534 | 535 | .my-2 { 536 | margin-top: 0.5rem; 537 | margin-bottom: 0.5rem; 538 | } 539 | 540 | .ml-6 { 541 | margin-left: 1.5rem; 542 | } 543 | 544 | .ml-1 { 545 | margin-left: 0.25rem; 546 | } 547 | 548 | .mr-4 { 549 | margin-right: 1rem; 550 | } 551 | 552 | .mr-6 { 553 | margin-right: 1.5rem; 554 | } 555 | 556 | .flex { 557 | display: flex; 558 | } 559 | 560 | .hidden { 561 | display: none; 562 | } 563 | 564 | .w-full { 565 | width: 100%; 566 | } 567 | 568 | .w-1\/3 { 569 | width: 33.333333%; 570 | } 571 | 572 | .w-80 { 573 | width: 20rem; 574 | } 575 | 576 | .flex-1 { 577 | flex: 1 1 0%; 578 | } 579 | 580 | .flex-shrink-0 { 581 | flex-shrink: 0; 582 | } 583 | 584 | .cursor-default { 585 | cursor: default; 586 | } 587 | 588 | .flex-wrap { 589 | flex-wrap: wrap; 590 | } 591 | 592 | .items-center { 593 | align-items: center; 594 | } 595 | 596 | .justify-between { 597 | justify-content: space-between; 598 | } 599 | 600 | .divide-x-2 > :not([hidden]) ~ :not([hidden]) { 601 | --tw-divide-x-reverse: 0; 602 | border-right-width: calc(2px * var(--tw-divide-x-reverse)); 603 | border-left-width: calc(2px * calc(1 - var(--tw-divide-x-reverse))); 604 | } 605 | 606 | .overflow-hidden { 607 | overflow: hidden; 608 | } 609 | 610 | .rounded { 611 | border-radius: 0.25rem; 612 | } 613 | 614 | .border { 615 | border-width: 1px; 616 | } 617 | 618 | .border-t { 619 | border-top-width: 1px; 620 | } 621 | 622 | .border-gray-600 { 623 | --tw-border-opacity: 1; 624 | border-color: rgb(75 85 99 / var(--tw-border-opacity)); 625 | } 626 | 627 | .border-yellow-500 { 628 | --tw-border-opacity: 1; 629 | border-color: rgb(234 179 8 / var(--tw-border-opacity)); 630 | } 631 | 632 | .border-gray-300 { 633 | --tw-border-opacity: 1; 634 | border-color: rgb(209 213 219 / var(--tw-border-opacity)); 635 | } 636 | 637 | .bg-gray-800 { 638 | --tw-bg-opacity: 1; 639 | background-color: rgb(31 41 55 / var(--tw-bg-opacity)); 640 | } 641 | 642 | .bg-white { 643 | --tw-bg-opacity: 1; 644 | background-color: rgb(255 255 255 / var(--tw-bg-opacity)); 645 | } 646 | 647 | .p-2 { 648 | padding: 0.5rem; 649 | } 650 | 651 | .p-1 { 652 | padding: 0.25rem; 653 | } 654 | 655 | .py-4 { 656 | padding-top: 1rem; 657 | padding-bottom: 1rem; 658 | } 659 | 660 | .pl-6 { 661 | padding-left: 1.5rem; 662 | } 663 | 664 | .pt-2 { 665 | padding-top: 0.5rem; 666 | } 667 | 668 | .text-center { 669 | text-align: center; 670 | } 671 | 672 | .text-3xl { 673 | font-size: 1.875rem; 674 | line-height: 2.25rem; 675 | } 676 | 677 | .text-lg { 678 | font-size: 1.125rem; 679 | line-height: 1.75rem; 680 | } 681 | 682 | .text-xs { 683 | font-size: 0.75rem; 684 | line-height: 1rem; 685 | } 686 | 687 | .text-sm { 688 | font-size: 0.875rem; 689 | line-height: 1.25rem; 690 | } 691 | 692 | .font-semibold { 693 | font-weight: 600; 694 | } 695 | 696 | .font-bold { 697 | font-weight: 700; 698 | } 699 | 700 | .leading-snug { 701 | line-height: 1.375; 702 | } 703 | 704 | .leading-tight { 705 | line-height: 1.25; 706 | } 707 | 708 | .tracking-wide { 709 | letter-spacing: 0.025em; 710 | } 711 | 712 | .text-yellow-500 { 713 | --tw-text-opacity: 1; 714 | color: rgb(234 179 8 / var(--tw-text-opacity)); 715 | } 716 | 717 | .text-blue-200 { 718 | --tw-text-opacity: 1; 719 | color: rgb(191 219 254 / var(--tw-text-opacity)); 720 | } 721 | 722 | .text-white { 723 | --tw-text-opacity: 1; 724 | color: rgb(255 255 255 / var(--tw-text-opacity)); 725 | } 726 | 727 | .text-gray-900 { 728 | --tw-text-opacity: 1; 729 | color: rgb(17 24 39 / var(--tw-text-opacity)); 730 | } 731 | 732 | .text-gray-600 { 733 | --tw-text-opacity: 1; 734 | color: rgb(75 85 99 / var(--tw-text-opacity)); 735 | } 736 | 737 | .text-gray-700 { 738 | --tw-text-opacity: 1; 739 | color: rgb(55 65 81 / var(--tw-text-opacity)); 740 | } 741 | 742 | .shadow-md { 743 | --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); 744 | --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); 745 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 746 | } 747 | 748 | .hover\:border-blue-200:hover { 749 | --tw-border-opacity: 1; 750 | border-color: rgb(191 219 254 / var(--tw-border-opacity)); 751 | } 752 | 753 | .hover\:text-blue-300:hover { 754 | --tw-text-opacity: 1; 755 | color: rgb(147 197 253 / var(--tw-text-opacity)); 756 | } 757 | 758 | .hover\:underline:hover { 759 | -webkit-text-decoration-line: underline; 760 | text-decoration-line: underline; 761 | } 762 | 763 | .dark .dark\:bg-gray-800 { 764 | --tw-bg-opacity: 1; 765 | background-color: rgb(31 41 55 / var(--tw-bg-opacity)); 766 | } 767 | 768 | .dark .dark\:text-white { 769 | --tw-text-opacity: 1; 770 | color: rgb(255 255 255 / var(--tw-text-opacity)); 771 | } 772 | 773 | .dark .dark\:text-gray-300 { 774 | --tw-text-opacity: 1; 775 | color: rgb(209 213 219 / var(--tw-text-opacity)); 776 | } 777 | 778 | @media (min-width: 768px) { 779 | .md\:block { 780 | display: block; 781 | } 782 | 783 | .md\:flex { 784 | display: flex; 785 | } 786 | 787 | .md\:hidden { 788 | display: none; 789 | } 790 | 791 | .md\:w-auto { 792 | width: auto; 793 | } 794 | 795 | .md\:border-b-2 { 796 | border-bottom-width: 2px; 797 | } 798 | } -------------------------------------------------------------------------------- /part-3/README.md: -------------------------------------------------------------------------------- 1 | # Building Complex Designs With Tailwind 2 | 3 | Project setup instructions: 4 | 5 | 1. Run `npm install` to install the dependencies. 6 | 1. Run `npm run dev` to build the styles. 7 | 1. Run `npm run dev:watch` to automatically build the styles on every change. -------------------------------------------------------------------------------- /part-3/article.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius vitae ipsum et commodo. In scelerisque est magna, ut fringilla purus congue eu. Mauris id metus ac metus porta aliquet. Aliquam quam ipsum, consequat malesuada lectus nec, blandit condimentum enim. Donec varius mattis facilisis. Morbi rhoncus erat vel erat pellentesque suscipit. Nunc dictum euismod libero sed tristique.

11 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius vitae ipsum et commodo. In scelerisque est magna, ut fringilla purus congue eu. Mauris id metus ac metus porta aliquet. 12 |

Aliquam id nulla dignissim felis bibendum aliquam. Cras vulputate blandit semper. Nam quam dolor, tincidunt non odio ac, condimentum molestie justo. In ornare maximus tortor, aliquam consequat arcu sagittis id. Vivamus condimentum varius ante, pulvinar laoreet tortor dignissim ac. Curabitur egestas in arcu sit amet feugiat. Aenean interdum, purus eget sodales tincidunt, magna sem lobortis nunc, at porttitor arcu velit sed augue. Praesent porttitor nisl enim, eget sollicitudin ipsum porta a. Integer tincidunt, lorem sit amet gravida hendrerit, arcu felis convallis metus, vitae vehicula diam dolor vulputate sapien. Nulla finibus lectus nec porta faucibus. Praesent in massa sollicitudin, dignissim quam at, volutpat mauris. Morbi in turpis sapien. Morbi ante est, gravida vitae ipsum quis, pretium scelerisque massa.

13 | 14 |

Vestibulum congue felis at posuere commodo. Praesent sapien magna, aliquet ut efficitur et, luctus at neque. Donec vitae nunc convallis, maximus ex sit amet, consequat tellus. Aenean eleifend cursus urna, sed fermentum felis cursus eget. Sed accumsan hendrerit turpis at ullamcorper. Integer quam sapien, rutrum ac pharetra eget, maximus id lacus. Vivamus sollicitudin molestie hendrerit. Proin sem quam, tempus in felis et, elementum dignissim felis. Integer odio tellus, semper at commodo at, euismod id magna. Aenean nisl metus, maximus a eros sit amet, facilisis malesuada lorem. Mauris est tortor, accumsan ac aliquet et, sagittis vitae velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.

15 |

Aenean scelerisque urna id dictum tempor. Pellentesque ipsum orci, convallis eget purus nec, placerat laoreet nulla. Nullam vitae lectus porta, lacinia neque at, rutrum felis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi luctus, magna eget gravida lobortis, elit elit rutrum urna, at volutpat ex orci accumsan urna. Sed et ligula magna. Ut dignissim semper ligula, at lacinia mi dignissim non. In eleifend ultricies viverra. Nunc euismod ac lacus ac molestie. Nam sem lectus, malesuada a ipsum vitae, viverra condimentum elit. Ut at vulputate tortor, nec suscipit leo. In non dolor nec purus semper tempus:

16 | 21 |

Pellentesque tincidunt non orci id congue. Donec blandit pulvinar leo et tincidunt. Sed venenatis venenatis justo, ut congue neque lobortis sit amet. Nam tempus vehicula nisi, vitae commodo magna condimentum id. In quis vehicula massa. Fusce id congue lorem. Duis imperdiet placerat metus, vitae hendrerit lorem sollicitudin sit amet. Integer varius justo non velit semper elementum. Donec scelerisque magna nibh, at efficitur elit hendrerit id. Aenean sagittis lectus odio, eu varius lectus vestibulum eget. Sed gravida mattis auctor.

22 |
23 |
24 | 25 |
26 |

David Smith

27 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius vitae ipsum et commodo.

28 |
29 |
30 |
31 | 32 | -------------------------------------------------------------------------------- /part-3/grids.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 18 | 19 | 20 |
21 | 22 |

Grid Layout Examples

23 | 24 |

Example #1

25 | 26 |
27 |
1
28 |
2
29 |
3
30 |
31 | 32 |

Example #2

33 | 34 |
35 |
1
36 |
2
37 |
3
38 |
4
39 |
5
40 |
41 | 42 |

Example #3

43 | 44 |
45 |
1
46 |
2
47 |
3
48 |
4
49 |
5
50 |
6
51 |
52 | 53 |

Example #4

54 | 55 |
56 |
1
57 |
2
58 |
3
59 |
4
60 |
5
61 |
6
62 |
7
63 |
64 | 65 |
66 | 67 |
68 |
1
69 |
2
70 |
3
71 |
4
72 |
5
73 |
6
74 |
7
75 |
76 | 77 |

Example #5

78 | 79 |
80 |
1
81 |
2
82 |
3
83 |
4
84 |
5
85 |
86 | 87 |
88 | 89 | -------------------------------------------------------------------------------- /part-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-part-3", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "npx tailwindcss -i styles.css -o tailwind.css", 8 | "dev:watch": "npx tailwindcss -i styles.css -o tailwind.css -w" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "tailwindcss": "^3.0.23" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /part-3/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /part-3/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['*.html'], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [], 7 | } 8 | -------------------------------------------------------------------------------- /part-3/tailwind.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr:where([title]) { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | line-height: inherit; 191 | /* 1 */ 192 | color: inherit; 193 | /* 1 */ 194 | margin: 0; 195 | /* 2 */ 196 | padding: 0; 197 | /* 3 */ 198 | } 199 | 200 | /* 201 | Remove the inheritance of text transform in Edge and Firefox. 202 | */ 203 | 204 | button, 205 | select { 206 | text-transform: none; 207 | } 208 | 209 | /* 210 | 1. Correct the inability to style clickable types in iOS and Safari. 211 | 2. Remove default button styles. 212 | */ 213 | 214 | button, 215 | [type='button'], 216 | [type='reset'], 217 | [type='submit'] { 218 | -webkit-appearance: button; 219 | /* 1 */ 220 | background-color: transparent; 221 | /* 2 */ 222 | background-image: none; 223 | /* 2 */ 224 | } 225 | 226 | /* 227 | Use the modern Firefox focus style for all focusable elements. 228 | */ 229 | 230 | :-moz-focusring { 231 | outline: auto; 232 | } 233 | 234 | /* 235 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 236 | */ 237 | 238 | :-moz-ui-invalid { 239 | box-shadow: none; 240 | } 241 | 242 | /* 243 | Add the correct vertical alignment in Chrome and Firefox. 244 | */ 245 | 246 | progress { 247 | vertical-align: baseline; 248 | } 249 | 250 | /* 251 | Correct the cursor style of increment and decrement buttons in Safari. 252 | */ 253 | 254 | ::-webkit-inner-spin-button, 255 | ::-webkit-outer-spin-button { 256 | height: auto; 257 | } 258 | 259 | /* 260 | 1. Correct the odd appearance in Chrome and Safari. 261 | 2. Correct the outline style in Safari. 262 | */ 263 | 264 | [type='search'] { 265 | -webkit-appearance: textfield; 266 | /* 1 */ 267 | outline-offset: -2px; 268 | /* 2 */ 269 | } 270 | 271 | /* 272 | Remove the inner padding in Chrome and Safari on macOS. 273 | */ 274 | 275 | ::-webkit-search-decoration { 276 | -webkit-appearance: none; 277 | } 278 | 279 | /* 280 | 1. Correct the inability to style clickable types in iOS and Safari. 281 | 2. Change font properties to `inherit` in Safari. 282 | */ 283 | 284 | ::-webkit-file-upload-button { 285 | -webkit-appearance: button; 286 | /* 1 */ 287 | font: inherit; 288 | /* 2 */ 289 | } 290 | 291 | /* 292 | Add the correct display in Chrome and Safari. 293 | */ 294 | 295 | summary { 296 | display: list-item; 297 | } 298 | 299 | /* 300 | Removes the default spacing and border for appropriate elements. 301 | */ 302 | 303 | blockquote, 304 | dl, 305 | dd, 306 | h1, 307 | h2, 308 | h3, 309 | h4, 310 | h5, 311 | h6, 312 | hr, 313 | figure, 314 | p, 315 | pre { 316 | margin: 0; 317 | } 318 | 319 | fieldset { 320 | margin: 0; 321 | padding: 0; 322 | } 323 | 324 | legend { 325 | padding: 0; 326 | } 327 | 328 | ol, 329 | ul, 330 | menu { 331 | list-style: none; 332 | margin: 0; 333 | padding: 0; 334 | } 335 | 336 | /* 337 | Prevent resizing textareas horizontally by default. 338 | */ 339 | 340 | textarea { 341 | resize: vertical; 342 | } 343 | 344 | /* 345 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 346 | 2. Set the default placeholder color to the user's configured gray 400 color. 347 | */ 348 | 349 | input::-moz-placeholder, textarea::-moz-placeholder { 350 | opacity: 1; 351 | /* 1 */ 352 | color: #9ca3af; 353 | /* 2 */ 354 | } 355 | 356 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* 419 | Ensure the default browser behavior of the `hidden` attribute. 420 | */ 421 | 422 | [hidden] { 423 | display: none; 424 | } 425 | 426 | *, ::before, ::after { 427 | --tw-translate-x: 0; 428 | --tw-translate-y: 0; 429 | --tw-rotate: 0; 430 | --tw-skew-x: 0; 431 | --tw-skew-y: 0; 432 | --tw-scale-x: 1; 433 | --tw-scale-y: 1; 434 | --tw-pan-x: ; 435 | --tw-pan-y: ; 436 | --tw-pinch-zoom: ; 437 | --tw-scroll-snap-strictness: proximity; 438 | --tw-ordinal: ; 439 | --tw-slashed-zero: ; 440 | --tw-numeric-figure: ; 441 | --tw-numeric-spacing: ; 442 | --tw-numeric-fraction: ; 443 | --tw-ring-inset: ; 444 | --tw-ring-offset-width: 0px; 445 | --tw-ring-offset-color: #fff; 446 | --tw-ring-color: rgb(59 130 246 / 0.5); 447 | --tw-ring-offset-shadow: 0 0 #0000; 448 | --tw-ring-shadow: 0 0 #0000; 449 | --tw-shadow: 0 0 #0000; 450 | --tw-shadow-colored: 0 0 #0000; 451 | --tw-blur: ; 452 | --tw-brightness: ; 453 | --tw-contrast: ; 454 | --tw-grayscale: ; 455 | --tw-hue-rotate: ; 456 | --tw-invert: ; 457 | --tw-saturate: ; 458 | --tw-sepia: ; 459 | --tw-drop-shadow: ; 460 | --tw-backdrop-blur: ; 461 | --tw-backdrop-brightness: ; 462 | --tw-backdrop-contrast: ; 463 | --tw-backdrop-grayscale: ; 464 | --tw-backdrop-hue-rotate: ; 465 | --tw-backdrop-invert: ; 466 | --tw-backdrop-opacity: ; 467 | --tw-backdrop-saturate: ; 468 | --tw-backdrop-sepia: ; 469 | } 470 | 471 | .col-span-2 { 472 | grid-column: span 2 / span 2; 473 | } 474 | 475 | .col-start-1 { 476 | grid-column-start: 1; 477 | } 478 | 479 | .col-start-2 { 480 | grid-column-start: 2; 481 | } 482 | 483 | .col-end-3 { 484 | grid-column-end: 3; 485 | } 486 | 487 | .col-end-4 { 488 | grid-column-end: 4; 489 | } 490 | 491 | .row-span-2 { 492 | grid-row: span 2 / span 2; 493 | } 494 | 495 | .row-span-4 { 496 | grid-row: span 4 / span 4; 497 | } 498 | 499 | .row-start-3 { 500 | grid-row-start: 3; 501 | } 502 | 503 | .row-start-4 { 504 | grid-row-start: 4; 505 | } 506 | 507 | .row-start-2 { 508 | grid-row-start: 2; 509 | } 510 | 511 | .row-start-1 { 512 | grid-row-start: 1; 513 | } 514 | 515 | .row-end-4 { 516 | grid-row-end: 4; 517 | } 518 | 519 | .row-end-3 { 520 | grid-row-end: 3; 521 | } 522 | 523 | .float-left { 524 | float: left; 525 | } 526 | 527 | .m-6 { 528 | margin: 1.5rem; 529 | } 530 | 531 | .mx-auto { 532 | margin-left: auto; 533 | margin-right: auto; 534 | } 535 | 536 | .my-6 { 537 | margin-top: 1.5rem; 538 | margin-bottom: 1.5rem; 539 | } 540 | 541 | .mr-3 { 542 | margin-right: 0.75rem; 543 | } 544 | 545 | .ml-6 { 546 | margin-left: 1.5rem; 547 | } 548 | 549 | .mr-6 { 550 | margin-right: 1.5rem; 551 | } 552 | 553 | .mb-6 { 554 | margin-bottom: 1.5rem; 555 | } 556 | 557 | .-mt-3 { 558 | margin-top: -0.75rem; 559 | } 560 | 561 | .mt-2 { 562 | margin-top: 0.5rem; 563 | } 564 | 565 | .block { 566 | display: block; 567 | } 568 | 569 | .flex { 570 | display: flex; 571 | } 572 | 573 | .grid { 574 | display: grid; 575 | } 576 | 577 | .h-24 { 578 | height: 6rem; 579 | } 580 | 581 | .w-full { 582 | width: 100%; 583 | } 584 | 585 | .w-1\/2 { 586 | width: 50%; 587 | } 588 | 589 | .w-24 { 590 | width: 6rem; 591 | } 592 | 593 | .origin-bottom-left { 594 | transform-origin: bottom left; 595 | } 596 | 597 | .-rotate-6 { 598 | --tw-rotate: -6deg; 599 | transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); 600 | } 601 | 602 | .list-disc { 603 | list-style-type: disc; 604 | } 605 | 606 | .grid-cols-3 { 607 | grid-template-columns: repeat(3, minmax(0, 1fr)); 608 | } 609 | 610 | .grid-cols-2 { 611 | grid-template-columns: repeat(2, minmax(0, 1fr)); 612 | } 613 | 614 | .grid-cols-4 { 615 | grid-template-columns: repeat(4, minmax(0, 1fr)); 616 | } 617 | 618 | .grid-rows-2 { 619 | grid-template-rows: repeat(2, minmax(0, 1fr)); 620 | } 621 | 622 | .grid-rows-4 { 623 | grid-template-rows: repeat(4, minmax(0, 1fr)); 624 | } 625 | 626 | .grid-rows-3 { 627 | grid-template-rows: repeat(3, minmax(0, 1fr)); 628 | } 629 | 630 | .gap-2 { 631 | gap: 0.5rem; 632 | } 633 | 634 | .gap-x-4 { 635 | -moz-column-gap: 1rem; 636 | column-gap: 1rem; 637 | } 638 | 639 | .gap-y-2 { 640 | row-gap: 0.5rem; 641 | } 642 | 643 | .gap-x-2 { 644 | -moz-column-gap: 0.5rem; 645 | column-gap: 0.5rem; 646 | } 647 | 648 | .gap-y-4 { 649 | row-gap: 1rem; 650 | } 651 | 652 | .space-y-6 > :not([hidden]) ~ :not([hidden]) { 653 | --tw-space-y-reverse: 0; 654 | margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse))); 655 | margin-bottom: calc(1.5rem * var(--tw-space-y-reverse)); 656 | } 657 | 658 | .space-y-3 > :not([hidden]) ~ :not([hidden]) { 659 | --tw-space-y-reverse: 0; 660 | margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse))); 661 | margin-bottom: calc(0.75rem * var(--tw-space-y-reverse)); 662 | } 663 | 664 | .rounded { 665 | border-radius: 0.25rem; 666 | } 667 | 668 | .border-4 { 669 | border-width: 4px; 670 | } 671 | 672 | .border-l-4 { 673 | border-left-width: 4px; 674 | } 675 | 676 | .border-b-\[16px\] { 677 | border-bottom-width: 16px; 678 | } 679 | 680 | .border-cyan-400 { 681 | --tw-border-opacity: 1; 682 | border-color: rgb(34 211 238 / var(--tw-border-opacity)); 683 | } 684 | 685 | .border-red-600 { 686 | --tw-border-opacity: 1; 687 | border-color: rgb(220 38 38 / var(--tw-border-opacity)); 688 | } 689 | 690 | .bg-sky-50 { 691 | --tw-bg-opacity: 1; 692 | background-color: rgb(240 249 255 / var(--tw-bg-opacity)); 693 | } 694 | 695 | .bg-gradient-to-r { 696 | background-image: linear-gradient(to right, var(--tw-gradient-stops)); 697 | } 698 | 699 | .from-teal-100 { 700 | --tw-gradient-from: #ccfbf1; 701 | --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to, rgb(204 251 241 / 0)); 702 | } 703 | 704 | .to-cyan-300 { 705 | --tw-gradient-to: #67e8f9; 706 | } 707 | 708 | .p-8 { 709 | padding: 2rem; 710 | } 711 | 712 | .px-4 { 713 | padding-left: 1rem; 714 | padding-right: 1rem; 715 | } 716 | 717 | .py-2 { 718 | padding-top: 0.5rem; 719 | padding-bottom: 0.5rem; 720 | } 721 | 722 | .pl-6 { 723 | padding-left: 1.5rem; 724 | } 725 | 726 | .pt-6 { 727 | padding-top: 1.5rem; 728 | } 729 | 730 | .indent-6 { 731 | text-indent: 1.5rem; 732 | } 733 | 734 | .text-3xl { 735 | font-size: 1.875rem; 736 | line-height: 2.25rem; 737 | } 738 | 739 | .text-2xl { 740 | font-size: 1.5rem; 741 | line-height: 2rem; 742 | } 743 | 744 | .text-sm { 745 | font-size: 0.875rem; 746 | line-height: 1.25rem; 747 | } 748 | 749 | .font-bold { 750 | font-weight: 700; 751 | } 752 | 753 | .font-light { 754 | font-weight: 300; 755 | } 756 | 757 | .font-semibold { 758 | font-weight: 600; 759 | } 760 | 761 | .italic { 762 | font-style: italic; 763 | } 764 | 765 | .text-gray-600 { 766 | --tw-text-opacity: 1; 767 | color: rgb(75 85 99 / var(--tw-text-opacity)); 768 | } 769 | 770 | .text-cyan-600 { 771 | --tw-text-opacity: 1; 772 | color: rgb(8 145 178 / var(--tw-text-opacity)); 773 | } 774 | 775 | .text-stone-900 { 776 | --tw-text-opacity: 1; 777 | color: rgb(28 25 23 / var(--tw-text-opacity)); 778 | } 779 | 780 | .underline { 781 | -webkit-text-decoration-line: underline; 782 | text-decoration-line: underline; 783 | } 784 | 785 | .decoration-cyan-600 { 786 | -webkit-text-decoration-color: #0891b2; 787 | text-decoration-color: #0891b2; 788 | } 789 | 790 | .decoration-wavy { 791 | -webkit-text-decoration-style: wavy; 792 | text-decoration-style: wavy; 793 | } 794 | 795 | .decoration-1 { 796 | text-decoration-thickness: 1px; 797 | } 798 | 799 | .underline-offset-2 { 800 | text-underline-offset: 2px; 801 | } 802 | 803 | .underline-offset-1 { 804 | text-underline-offset: 1px; 805 | } 806 | 807 | .shadow-md { 808 | --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); 809 | --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); 810 | box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); 811 | } 812 | 813 | .shadow-red-900 { 814 | --tw-shadow-color: #7f1d1d; 815 | --tw-shadow: var(--tw-shadow-colored); 816 | } 817 | 818 | .duration-500 { 819 | transition-duration: 500ms; 820 | } 821 | 822 | .\[clip-path\:circle\(80\%_at_30\%_20\%\)\] { 823 | -webkit-clip-path: circle(80% at 30% 20%); 824 | clip-path: circle(80% at 30% 20%); 825 | } 826 | 827 | .\[shape-outside\:circle\(80\%_at_30\%_20\%\)\] { 828 | shape-outside: circle(80% at 30% 20%); 829 | } 830 | 831 | .first-letter\:float-left::first-letter { 832 | float: left; 833 | } 834 | 835 | .first-letter\:-mt-2::first-letter { 836 | margin-top: -0.5rem; 837 | } 838 | 839 | .first-letter\:mr-3::first-letter { 840 | margin-right: 0.75rem; 841 | } 842 | 843 | .first-letter\:text-7xl::first-letter { 844 | font-size: 4.5rem; 845 | line-height: 1; 846 | } 847 | 848 | .first-letter\:font-bold::first-letter { 849 | font-weight: 700; 850 | } 851 | 852 | .first-letter\:text-cyan-400::first-letter { 853 | --tw-text-opacity: 1; 854 | color: rgb(34 211 238 / var(--tw-text-opacity)); 855 | } 856 | 857 | .first-line\:uppercase::first-line { 858 | text-transform: uppercase; 859 | } 860 | 861 | .first-line\:tracking-widest::first-line { 862 | letter-spacing: 0.1em; 863 | } 864 | 865 | .first-line\:text-cyan-600::first-line { 866 | --tw-text-opacity: 1; 867 | color: rgb(8 145 178 / var(--tw-text-opacity)); 868 | } 869 | 870 | .marker\:text-cyan-400 *::marker { 871 | --tw-text-opacity: 1; 872 | color: rgb(34 211 238 / var(--tw-text-opacity)); 873 | } 874 | 875 | .marker\:text-cyan-400::marker { 876 | --tw-text-opacity: 1; 877 | color: rgb(34 211 238 / var(--tw-text-opacity)); 878 | } 879 | 880 | .hover\:rotate-0:hover { 881 | --tw-rotate: 0deg; 882 | transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); 883 | } 884 | 885 | .hover\:scale-110:hover { 886 | --tw-scale-x: 1.1; 887 | --tw-scale-y: 1.1; 888 | transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); 889 | } 890 | 891 | .hover\:text-cyan-600:hover { 892 | --tw-text-opacity: 1; 893 | color: rgb(8 145 178 / var(--tw-text-opacity)); 894 | } 895 | 896 | .hover\:drop-shadow-lg:hover { 897 | --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); 898 | filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 899 | } 900 | 901 | .hover\:sepia:hover { 902 | --tw-sepia: sepia(100%); 903 | filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 904 | } 905 | 906 | @media (min-width: 768px) { 907 | .md\:mx-auto { 908 | margin-left: auto; 909 | margin-right: auto; 910 | } 911 | 912 | .md\:w-1\/2 { 913 | width: 50%; 914 | } 915 | } 916 | 917 | @media (min-width: 1024px) { 918 | .lg\:w-1\/2 { 919 | width: 50%; 920 | } 921 | } 922 | 923 | @media (min-width: 1280px) { 924 | .xl\:w-1\/3 { 925 | width: 33.333333%; 926 | } 927 | } -------------------------------------------------------------------------------- /part-4/README.md: -------------------------------------------------------------------------------- 1 | # Customizing Tailwind 2 | 3 | Project setup instructions: 4 | 5 | 1. Run `npm install` to install the dependencies. 6 | 1. Run `npm run dev` to build the styles. 7 | 1. Run `npm run dev:watch` to automatically build the styles on every change. -------------------------------------------------------------------------------- /part-4/brand-colors-preset.js: -------------------------------------------------------------------------------- 1 | const colors = require('tailwindcss/colors') 2 | 3 | module.exports = { 4 | theme: { 5 | extend: { 6 | colors: { 7 | primary: colors.yellow, 8 | secondary: colors.blue, 9 | neutral: colors.gray, 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /part-4/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 | WebCraft 16 | 17 |
18 | 19 | 22 | 23 | 45 |
46 | 47 |

Main Heading Is Here

48 | 49 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce quis urna vitae sapien volutpat commodo nec in nulla. Cras consectetur lorem pharetra turpis iaculis, vel finibus ante facilisis. Morbi auctor, elit sit amet congue sollicitudin, mi mi aliquam neque, ac condimentum purus leo nec felis. Pellentesque bibendum vel massa vel sodales. Nam semper dolor ac pharetra ultrices. Etiam lectus purus, congue rutrum mi a, gravida finibus ipsum. Donec at auctor orci. Praesent sagittis augue in eleifend volutpat. Integer blandit consequat fermentum.

50 | 51 |

Second Heading Is Here

52 | 53 |

Donec tempor odio sed sem porttitor, ac sodales dolor ultrices. Phasellus nec enim et nibh vestibulum placerat. Nam sed lobortis tortor. Etiam at ipsum risus. Vestibulum erat elit, iaculis a pulvinar at, interdum nec mi. Aenean in consectetur ipsum, vitae rhoncus arcu. Vestibulum quis sapien nibh. Curabitur feugiat vestibulum lorem, vitae volutpat lectus porttitor tincidunt. Praesent diam sem, ultrices quis nibh luctus, pharetra tristique elit. Donec mattis velit eget nulla hendrerit dictum. Maecenas dictum orci at sagittis interdum. Etiam posuere, eros nec suscipit convallis, mi est tempor purus, congue ultrices ipsum massa nec lectus. Fusce id odio vel diam tristique iaculis. Cras dapibus facilisis suscipit. Donec rutrum molestie nibh, in tempus augue venenatis sed. Pellentesque eget mauris in magna ornare pharetra.

54 | 55 |

Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nam non urna in mi dictum tempor. Quisque leo odio, pretium ut egestas eu, pulvinar eget lacus. Nulla quis orci ac dui hendrerit mattis quis a ex. Phasellus facilisis rutrum ante a auctor. Morbi non gravida risus. Integer convallis leo odio, nec pulvinar magna condimentum eleifend. Cras at massa a libero mattis vestibulum eget ac purus. Pellentesque at libero eget sem sollicitudin interdum. Interdum et malesuada fames ac ante ipsum primis in faucibus. Nam nulla sapien, venenatis nec elit accumsan, laoreet mattis ligula. Sed faucibus vitae ex sed ultricies. Nulla odio nisi, pretium eget lacus nec, dapibus luctus nunc. Vestibulum consequat est at risus faucibus consequat. Curabitur iaculis lorem eget rutrum fermentum. Ut pulvinar condimentum dignissim.

56 | 57 | 62 | 63 | -------------------------------------------------------------------------------- /part-4/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-part-4", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "npx tailwindcss -i styles.css -o tailwind.css", 8 | "dev:watch": "npx tailwindcss -i styles.css -o tailwind.css -w" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "tailwindcss": "^3.0.23" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /part-4/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | h1 { 7 | @apply text-2xl; 8 | } 9 | h2 { 10 | @apply text-xl; 11 | } 12 | h1, h2, p { 13 | @apply my-6 mx-4; 14 | } 15 | } -------------------------------------------------------------------------------- /part-4/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['./index.html'], 3 | presets: [ 4 | require('./brand-colors-preset.js') 5 | ], 6 | theme: { 7 | screens: { 8 | 'phone': '640px', 9 | 'tablet': '768px', 10 | 'laptop': '1024px', 11 | 'desktop': '1280px', 12 | }, 13 | extend: { 14 | spacing: { 15 | '4.5': '1.125rem', 16 | '5.5': '1.375rem', 17 | '6.5': '1.625rem', 18 | '7.5': '1.875rem', 19 | '8.5': '2.125rem', 20 | '9.5': '2.375rem', 21 | }, 22 | fontFamily: { 23 | 'display': ['"Carter One"'], 24 | } 25 | } 26 | }, 27 | plugins: [], 28 | } -------------------------------------------------------------------------------- /part-4/tailwind.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr:where([title]) { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | line-height: inherit; 191 | /* 1 */ 192 | color: inherit; 193 | /* 1 */ 194 | margin: 0; 195 | /* 2 */ 196 | padding: 0; 197 | /* 3 */ 198 | } 199 | 200 | /* 201 | Remove the inheritance of text transform in Edge and Firefox. 202 | */ 203 | 204 | button, 205 | select { 206 | text-transform: none; 207 | } 208 | 209 | /* 210 | 1. Correct the inability to style clickable types in iOS and Safari. 211 | 2. Remove default button styles. 212 | */ 213 | 214 | button, 215 | [type='button'], 216 | [type='reset'], 217 | [type='submit'] { 218 | -webkit-appearance: button; 219 | /* 1 */ 220 | background-color: transparent; 221 | /* 2 */ 222 | background-image: none; 223 | /* 2 */ 224 | } 225 | 226 | /* 227 | Use the modern Firefox focus style for all focusable elements. 228 | */ 229 | 230 | :-moz-focusring { 231 | outline: auto; 232 | } 233 | 234 | /* 235 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 236 | */ 237 | 238 | :-moz-ui-invalid { 239 | box-shadow: none; 240 | } 241 | 242 | /* 243 | Add the correct vertical alignment in Chrome and Firefox. 244 | */ 245 | 246 | progress { 247 | vertical-align: baseline; 248 | } 249 | 250 | /* 251 | Correct the cursor style of increment and decrement buttons in Safari. 252 | */ 253 | 254 | ::-webkit-inner-spin-button, 255 | ::-webkit-outer-spin-button { 256 | height: auto; 257 | } 258 | 259 | /* 260 | 1. Correct the odd appearance in Chrome and Safari. 261 | 2. Correct the outline style in Safari. 262 | */ 263 | 264 | [type='search'] { 265 | -webkit-appearance: textfield; 266 | /* 1 */ 267 | outline-offset: -2px; 268 | /* 2 */ 269 | } 270 | 271 | /* 272 | Remove the inner padding in Chrome and Safari on macOS. 273 | */ 274 | 275 | ::-webkit-search-decoration { 276 | -webkit-appearance: none; 277 | } 278 | 279 | /* 280 | 1. Correct the inability to style clickable types in iOS and Safari. 281 | 2. Change font properties to `inherit` in Safari. 282 | */ 283 | 284 | ::-webkit-file-upload-button { 285 | -webkit-appearance: button; 286 | /* 1 */ 287 | font: inherit; 288 | /* 2 */ 289 | } 290 | 291 | /* 292 | Add the correct display in Chrome and Safari. 293 | */ 294 | 295 | summary { 296 | display: list-item; 297 | } 298 | 299 | /* 300 | Removes the default spacing and border for appropriate elements. 301 | */ 302 | 303 | blockquote, 304 | dl, 305 | dd, 306 | h1, 307 | h2, 308 | h3, 309 | h4, 310 | h5, 311 | h6, 312 | hr, 313 | figure, 314 | p, 315 | pre { 316 | margin: 0; 317 | } 318 | 319 | fieldset { 320 | margin: 0; 321 | padding: 0; 322 | } 323 | 324 | legend { 325 | padding: 0; 326 | } 327 | 328 | ol, 329 | ul, 330 | menu { 331 | list-style: none; 332 | margin: 0; 333 | padding: 0; 334 | } 335 | 336 | /* 337 | Prevent resizing textareas horizontally by default. 338 | */ 339 | 340 | textarea { 341 | resize: vertical; 342 | } 343 | 344 | /* 345 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 346 | 2. Set the default placeholder color to the user's configured gray 400 color. 347 | */ 348 | 349 | input::-moz-placeholder, textarea::-moz-placeholder { 350 | opacity: 1; 351 | /* 1 */ 352 | color: #9ca3af; 353 | /* 2 */ 354 | } 355 | 356 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* 419 | Ensure the default browser behavior of the `hidden` attribute. 420 | */ 421 | 422 | [hidden] { 423 | display: none; 424 | } 425 | 426 | h1 { 427 | font-size: 1.5rem; 428 | line-height: 2rem; 429 | } 430 | 431 | h2 { 432 | font-size: 1.25rem; 433 | line-height: 1.75rem; 434 | } 435 | 436 | h1, h2, p { 437 | margin-top: 1.5rem; 438 | margin-bottom: 1.5rem; 439 | margin-left: 1rem; 440 | margin-right: 1rem; 441 | } 442 | 443 | *, ::before, ::after { 444 | --tw-translate-x: 0; 445 | --tw-translate-y: 0; 446 | --tw-rotate: 0; 447 | --tw-skew-x: 0; 448 | --tw-skew-y: 0; 449 | --tw-scale-x: 1; 450 | --tw-scale-y: 1; 451 | --tw-pan-x: ; 452 | --tw-pan-y: ; 453 | --tw-pinch-zoom: ; 454 | --tw-scroll-snap-strictness: proximity; 455 | --tw-ordinal: ; 456 | --tw-slashed-zero: ; 457 | --tw-numeric-figure: ; 458 | --tw-numeric-spacing: ; 459 | --tw-numeric-fraction: ; 460 | --tw-ring-inset: ; 461 | --tw-ring-offset-width: 0px; 462 | --tw-ring-offset-color: #fff; 463 | --tw-ring-color: rgb(59 130 246 / 0.5); 464 | --tw-ring-offset-shadow: 0 0 #0000; 465 | --tw-ring-shadow: 0 0 #0000; 466 | --tw-shadow: 0 0 #0000; 467 | --tw-shadow-colored: 0 0 #0000; 468 | --tw-blur: ; 469 | --tw-brightness: ; 470 | --tw-contrast: ; 471 | --tw-grayscale: ; 472 | --tw-hue-rotate: ; 473 | --tw-invert: ; 474 | --tw-saturate: ; 475 | --tw-sepia: ; 476 | --tw-drop-shadow: ; 477 | --tw-backdrop-blur: ; 478 | --tw-backdrop-brightness: ; 479 | --tw-backdrop-contrast: ; 480 | --tw-backdrop-grayscale: ; 481 | --tw-backdrop-hue-rotate: ; 482 | --tw-backdrop-invert: ; 483 | --tw-backdrop-opacity: ; 484 | --tw-backdrop-saturate: ; 485 | --tw-backdrop-sepia: ; 486 | } 487 | 488 | .my-2 { 489 | margin-top: 0.5rem; 490 | margin-bottom: 0.5rem; 491 | } 492 | 493 | .ml-6 { 494 | margin-left: 1.5rem; 495 | } 496 | 497 | .ml-1 { 498 | margin-left: 0.25rem; 499 | } 500 | 501 | .mr-4 { 502 | margin-right: 1rem; 503 | } 504 | 505 | .mr-5\.5 { 506 | margin-right: 1.375rem; 507 | } 508 | 509 | .mr-5 { 510 | margin-right: 1.25rem; 511 | } 512 | 513 | .flex { 514 | display: flex; 515 | } 516 | 517 | .hidden { 518 | display: none; 519 | } 520 | 521 | .w-full { 522 | width: 100%; 523 | } 524 | 525 | .flex-shrink-0 { 526 | flex-shrink: 0; 527 | } 528 | 529 | .cursor-default { 530 | cursor: default; 531 | } 532 | 533 | .flex-wrap { 534 | flex-wrap: wrap; 535 | } 536 | 537 | .items-center { 538 | align-items: center; 539 | } 540 | 541 | .justify-between { 542 | justify-content: space-between; 543 | } 544 | 545 | .rounded { 546 | border-radius: 0.25rem; 547 | } 548 | 549 | .border { 550 | border-width: 1px; 551 | } 552 | 553 | .border-neutral-600 { 554 | --tw-border-opacity: 1; 555 | border-color: rgb(75 85 99 / var(--tw-border-opacity)); 556 | } 557 | 558 | .border-primary-500 { 559 | --tw-border-opacity: 1; 560 | border-color: rgb(234 179 8 / var(--tw-border-opacity)); 561 | } 562 | 563 | .bg-neutral-800 { 564 | --tw-bg-opacity: 1; 565 | background-color: rgb(31 41 55 / var(--tw-bg-opacity)); 566 | } 567 | 568 | .p-2 { 569 | padding: 0.5rem; 570 | } 571 | 572 | .p-1 { 573 | padding: 0.25rem; 574 | } 575 | 576 | .py-4 { 577 | padding-top: 1rem; 578 | padding-bottom: 1rem; 579 | } 580 | 581 | .pl-6 { 582 | padding-left: 1.5rem; 583 | } 584 | 585 | .font-display { 586 | font-family: "Carter One"; 587 | } 588 | 589 | .text-3xl { 590 | font-size: 1.875rem; 591 | line-height: 2.25rem; 592 | } 593 | 594 | .font-semibold { 595 | font-weight: 600; 596 | } 597 | 598 | .text-primary-500 { 599 | --tw-text-opacity: 1; 600 | color: rgb(234 179 8 / var(--tw-text-opacity)); 601 | } 602 | 603 | .text-secondary-200 { 604 | --tw-text-opacity: 1; 605 | color: rgb(191 219 254 / var(--tw-text-opacity)); 606 | } 607 | 608 | .text-white { 609 | --tw-text-opacity: 1; 610 | color: rgb(255 255 255 / var(--tw-text-opacity)); 611 | } 612 | 613 | .hover\:border-secondary-200:hover { 614 | --tw-border-opacity: 1; 615 | border-color: rgb(191 219 254 / var(--tw-border-opacity)); 616 | } 617 | 618 | .hover\:text-secondary-300:hover { 619 | --tw-text-opacity: 1; 620 | color: rgb(147 197 253 / var(--tw-text-opacity)); 621 | } 622 | 623 | @media (min-width: 768px) { 624 | .tablet\:block { 625 | display: block; 626 | } 627 | 628 | .tablet\:flex { 629 | display: flex; 630 | } 631 | 632 | .tablet\:hidden { 633 | display: none; 634 | } 635 | 636 | .tablet\:w-auto { 637 | width: auto; 638 | } 639 | 640 | .tablet\:border-b-2 { 641 | border-bottom-width: 2px; 642 | } 643 | } -------------------------------------------------------------------------------- /part-5/README.md: -------------------------------------------------------------------------------- 1 | # Working with Tailwind Plugins 2 | 3 | Project setup instructions: 4 | 5 | 1. Run `npm install` to install the dependencies. 6 | 1. Run `npm run dev` to build the styles. 7 | 1. Run `npm run dev:watch` to automatically build the styles on every change. -------------------------------------------------------------------------------- /part-5/examples/arrows.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CSS Arrows Example 8 | 9 | 10 | 11 |

Tree-View Dynamic List with CSS Arrows:

12 | 33 | 34 | 46 | 47 | -------------------------------------------------------------------------------- /part-5/examples/counters.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | CSS Counters Example 8 | 9 | 10 | 11 |
12 |

Counters Based on Heading Elements:

13 |

Web Development Languages

14 |

HTML

15 |

CSS

16 |

Tailwind

17 |

Bootstrap

18 |

JavaScript

19 |

Node

20 |

Express

21 |

Vue

22 |

Vuetify

23 |

Nuxt

24 | 25 |

Counters Based on Class Utilities:

26 |
27 |

HTML

28 |

CSS

29 |

JavaScript

30 |
31 |

Node

32 |

React

33 |

Vue

34 |
35 |

Nuxt

36 |

Vuetify

37 |
38 |
39 |
40 |
41 | 42 | -------------------------------------------------------------------------------- /part-5/examples/typography.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Tailwind Typography Plugin Example 7 | 8 | 9 | 10 |
11 |
22 |

Some Nice Title Here

23 |

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius vitae ipsum et commodo. In scelerisque est magna, ut fringilla purus congue eu. Mauris id metus ac metus porta aliquet. Aliquam quam ipsum, consequat malesuada lectus nec, blandit condimentum enim.

24 |

1. A Heading 2 Here

25 |

"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius vitae ipsum et commodo."

26 |

Aliquam id nulla dignissim felis bibendum aliquam. Cras vulputate blandit semper. Nam quam dolor, tincidunt non odio ac, condimentum molestie justo. In ornare maximus tortor, aliquam consequat arcu sagittis id.

27 |
28 | 29 |
Donec blandit pulvinar leo et tincidunt.
30 |
31 |

2. Another Heading 2 Here

32 |

Vestibulum congue felis at posuere commodo. Praesent sapien magna, aliquet ut efficitur et, luctus at neque. Donec vitae nunc convallis, maximus ex sit amet, consequat tellus. Aenean eleifend cursus urna, sed fermentum felis cursus eget. Sed accumsan hendrerit turpis at ullamcorper. Integer quam sapien, rutrum ac pharetra eget, maximus id lacus.

33 | 38 |

Aenean scelerisque urna id dictum tempor. Pellentesque ipsum orci, convallis eget purus nec, placerat laoreet nulla. Nullam vitae lectus porta, lacinia neque at, rutrum felis.

39 |
    40 |
  1. First item
  2. 41 |
  3. Second item
  4. 42 |
  5. Third item
  6. 43 |
44 |

Pellentesque tincidunt non orci id congue. Donec blandit pulvinar leo et tincidunt. Sed venenatis venenatis justo, ut congue neque lobortis sit amet. Nam tempus vehicula nisi, vitae commodo magna condimentum id.

45 |
46 |
47 | 48 | -------------------------------------------------------------------------------- /part-5/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tailwind-part-5", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "npx tailwindcss -i styles.css -o tailwind.css", 8 | "dev:watch": "npx tailwindcss -i styles.css -o tailwind.css -w" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "@tailwindcss/typography": "^0.5.2", 15 | "tailwindcss": "^3.0.23" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /part-5/plugins/arrows.js: -------------------------------------------------------------------------------- 1 | const plugin = require('tailwindcss/plugin') 2 | 3 | const arrows = plugin(function({ addComponents }) { 4 | addComponents({ 5 | '.arrow': { 6 | border: 'solid black', 7 | borderWidth: '0 3px 3px 0', 8 | display: 'inline-block', 9 | padding: '3px', 10 | marginLeft: '5px' 11 | }, 12 | '.arrow-up': { 13 | transform: 'rotate(-135deg)' 14 | }, 15 | '.arrow-right': { 16 | transform: 'rotate(-45deg)' 17 | }, 18 | '.arrow-down': { 19 | transform: 'rotate(45deg)' 20 | }, 21 | '.arrow-left': { 22 | transform: 'rotate(135deg)' 23 | }, 24 | }) 25 | }) 26 | 27 | module.exports = arrows -------------------------------------------------------------------------------- /part-5/plugins/counters.js: -------------------------------------------------------------------------------- 1 | const plugin = require('tailwindcss/plugin') 2 | 3 | const counters = plugin(function({ addBase, addUtilities, theme }) { 4 | addBase({ 5 | 'h1': { 6 | counterReset: 'level-1' 7 | }, 8 | 'h2': { 9 | counterReset: 'level-2' 10 | }, 11 | 'h3': { 12 | counterReset: 'level-3' 13 | }, 14 | 'h2::before, h3::before, h4::before': { 15 | color: theme('colors.slate.600') 16 | }, 17 | 'h2::before': { 18 | counterIncrement: 'level-1', 19 | content: 'counter(level-1) ". "' 20 | }, 21 | 'h3::before': { 22 | counterIncrement: 'level-2', 23 | content: 'counter(level-1) "." counter(level-2) " "' 24 | }, 25 | 'h4::before': { 26 | counterIncrement: 'level-3', 27 | content: 'counter(level-1) "." counter(level-2) "." counter(level-3) " "' 28 | }, 29 | }) 30 | addUtilities({ 31 | '.collection': { 32 | counterReset: 'collection' 33 | }, 34 | '.item::before': { 35 | counterIncrement: 'collection', 36 | content: 'counters(collection,".") " "' 37 | } 38 | }) 39 | }) 40 | 41 | module.exports = counters -------------------------------------------------------------------------------- /part-5/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /part-5/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: ['./examples/*.html'], 3 | theme: { 4 | extend: {}, 5 | }, 6 | plugins: [ 7 | require('@tailwindcss/typography'), 8 | require('./plugins/counters'), 9 | require('./plugins/arrows') 10 | ], 11 | } 12 | -------------------------------------------------------------------------------- /part-5/tailwind.css: -------------------------------------------------------------------------------- 1 | /* 2 | ! tailwindcss v3.0.23 | MIT License | https://tailwindcss.com 3 | */ 4 | 5 | /* 6 | 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 7 | 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 8 | */ 9 | 10 | *, 11 | ::before, 12 | ::after { 13 | box-sizing: border-box; 14 | /* 1 */ 15 | border-width: 0; 16 | /* 2 */ 17 | border-style: solid; 18 | /* 2 */ 19 | border-color: #e5e7eb; 20 | /* 2 */ 21 | } 22 | 23 | ::before, 24 | ::after { 25 | --tw-content: ''; 26 | } 27 | 28 | /* 29 | 1. Use a consistent sensible line-height in all browsers. 30 | 2. Prevent adjustments of font size after orientation changes in iOS. 31 | 3. Use a more readable tab size. 32 | 4. Use the user's configured `sans` font-family by default. 33 | */ 34 | 35 | html { 36 | line-height: 1.5; 37 | /* 1 */ 38 | -webkit-text-size-adjust: 100%; 39 | /* 2 */ 40 | -moz-tab-size: 4; 41 | /* 3 */ 42 | -o-tab-size: 4; 43 | tab-size: 4; 44 | /* 3 */ 45 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 46 | /* 4 */ 47 | } 48 | 49 | /* 50 | 1. Remove the margin in all browsers. 51 | 2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. 52 | */ 53 | 54 | body { 55 | margin: 0; 56 | /* 1 */ 57 | line-height: inherit; 58 | /* 2 */ 59 | } 60 | 61 | /* 62 | 1. Add the correct height in Firefox. 63 | 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) 64 | 3. Ensure horizontal rules are visible by default. 65 | */ 66 | 67 | hr { 68 | height: 0; 69 | /* 1 */ 70 | color: inherit; 71 | /* 2 */ 72 | border-top-width: 1px; 73 | /* 3 */ 74 | } 75 | 76 | /* 77 | Add the correct text decoration in Chrome, Edge, and Safari. 78 | */ 79 | 80 | abbr:where([title]) { 81 | -webkit-text-decoration: underline dotted; 82 | text-decoration: underline dotted; 83 | } 84 | 85 | /* 86 | Remove the default font size and weight for headings. 87 | */ 88 | 89 | h1, 90 | h2, 91 | h3, 92 | h4, 93 | h5, 94 | h6 { 95 | font-size: inherit; 96 | font-weight: inherit; 97 | } 98 | 99 | /* 100 | Reset links to optimize for opt-in styling instead of opt-out. 101 | */ 102 | 103 | a { 104 | color: inherit; 105 | text-decoration: inherit; 106 | } 107 | 108 | /* 109 | Add the correct font weight in Edge and Safari. 110 | */ 111 | 112 | b, 113 | strong { 114 | font-weight: bolder; 115 | } 116 | 117 | /* 118 | 1. Use the user's configured `mono` font family by default. 119 | 2. Correct the odd `em` font sizing in all browsers. 120 | */ 121 | 122 | code, 123 | kbd, 124 | samp, 125 | pre { 126 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 127 | /* 1 */ 128 | font-size: 1em; 129 | /* 2 */ 130 | } 131 | 132 | /* 133 | Add the correct font size in all browsers. 134 | */ 135 | 136 | small { 137 | font-size: 80%; 138 | } 139 | 140 | /* 141 | Prevent `sub` and `sup` elements from affecting the line height in all browsers. 142 | */ 143 | 144 | sub, 145 | sup { 146 | font-size: 75%; 147 | line-height: 0; 148 | position: relative; 149 | vertical-align: baseline; 150 | } 151 | 152 | sub { 153 | bottom: -0.25em; 154 | } 155 | 156 | sup { 157 | top: -0.5em; 158 | } 159 | 160 | /* 161 | 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) 162 | 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) 163 | 3. Remove gaps between table borders by default. 164 | */ 165 | 166 | table { 167 | text-indent: 0; 168 | /* 1 */ 169 | border-color: inherit; 170 | /* 2 */ 171 | border-collapse: collapse; 172 | /* 3 */ 173 | } 174 | 175 | /* 176 | 1. Change the font styles in all browsers. 177 | 2. Remove the margin in Firefox and Safari. 178 | 3. Remove default padding in all browsers. 179 | */ 180 | 181 | button, 182 | input, 183 | optgroup, 184 | select, 185 | textarea { 186 | font-family: inherit; 187 | /* 1 */ 188 | font-size: 100%; 189 | /* 1 */ 190 | line-height: inherit; 191 | /* 1 */ 192 | color: inherit; 193 | /* 1 */ 194 | margin: 0; 195 | /* 2 */ 196 | padding: 0; 197 | /* 3 */ 198 | } 199 | 200 | /* 201 | Remove the inheritance of text transform in Edge and Firefox. 202 | */ 203 | 204 | button, 205 | select { 206 | text-transform: none; 207 | } 208 | 209 | /* 210 | 1. Correct the inability to style clickable types in iOS and Safari. 211 | 2. Remove default button styles. 212 | */ 213 | 214 | button, 215 | [type='button'], 216 | [type='reset'], 217 | [type='submit'] { 218 | -webkit-appearance: button; 219 | /* 1 */ 220 | background-color: transparent; 221 | /* 2 */ 222 | background-image: none; 223 | /* 2 */ 224 | } 225 | 226 | /* 227 | Use the modern Firefox focus style for all focusable elements. 228 | */ 229 | 230 | :-moz-focusring { 231 | outline: auto; 232 | } 233 | 234 | /* 235 | Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) 236 | */ 237 | 238 | :-moz-ui-invalid { 239 | box-shadow: none; 240 | } 241 | 242 | /* 243 | Add the correct vertical alignment in Chrome and Firefox. 244 | */ 245 | 246 | progress { 247 | vertical-align: baseline; 248 | } 249 | 250 | /* 251 | Correct the cursor style of increment and decrement buttons in Safari. 252 | */ 253 | 254 | ::-webkit-inner-spin-button, 255 | ::-webkit-outer-spin-button { 256 | height: auto; 257 | } 258 | 259 | /* 260 | 1. Correct the odd appearance in Chrome and Safari. 261 | 2. Correct the outline style in Safari. 262 | */ 263 | 264 | [type='search'] { 265 | -webkit-appearance: textfield; 266 | /* 1 */ 267 | outline-offset: -2px; 268 | /* 2 */ 269 | } 270 | 271 | /* 272 | Remove the inner padding in Chrome and Safari on macOS. 273 | */ 274 | 275 | ::-webkit-search-decoration { 276 | -webkit-appearance: none; 277 | } 278 | 279 | /* 280 | 1. Correct the inability to style clickable types in iOS and Safari. 281 | 2. Change font properties to `inherit` in Safari. 282 | */ 283 | 284 | ::-webkit-file-upload-button { 285 | -webkit-appearance: button; 286 | /* 1 */ 287 | font: inherit; 288 | /* 2 */ 289 | } 290 | 291 | /* 292 | Add the correct display in Chrome and Safari. 293 | */ 294 | 295 | summary { 296 | display: list-item; 297 | } 298 | 299 | /* 300 | Removes the default spacing and border for appropriate elements. 301 | */ 302 | 303 | blockquote, 304 | dl, 305 | dd, 306 | h1, 307 | h2, 308 | h3, 309 | h4, 310 | h5, 311 | h6, 312 | hr, 313 | figure, 314 | p, 315 | pre { 316 | margin: 0; 317 | } 318 | 319 | fieldset { 320 | margin: 0; 321 | padding: 0; 322 | } 323 | 324 | legend { 325 | padding: 0; 326 | } 327 | 328 | ol, 329 | ul, 330 | menu { 331 | list-style: none; 332 | margin: 0; 333 | padding: 0; 334 | } 335 | 336 | /* 337 | Prevent resizing textareas horizontally by default. 338 | */ 339 | 340 | textarea { 341 | resize: vertical; 342 | } 343 | 344 | /* 345 | 1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) 346 | 2. Set the default placeholder color to the user's configured gray 400 color. 347 | */ 348 | 349 | input::-moz-placeholder, textarea::-moz-placeholder { 350 | opacity: 1; 351 | /* 1 */ 352 | color: #9ca3af; 353 | /* 2 */ 354 | } 355 | 356 | input:-ms-input-placeholder, textarea:-ms-input-placeholder { 357 | opacity: 1; 358 | /* 1 */ 359 | color: #9ca3af; 360 | /* 2 */ 361 | } 362 | 363 | input::placeholder, 364 | textarea::placeholder { 365 | opacity: 1; 366 | /* 1 */ 367 | color: #9ca3af; 368 | /* 2 */ 369 | } 370 | 371 | /* 372 | Set the default cursor for buttons. 373 | */ 374 | 375 | button, 376 | [role="button"] { 377 | cursor: pointer; 378 | } 379 | 380 | /* 381 | Make sure disabled buttons don't get the pointer cursor. 382 | */ 383 | 384 | :disabled { 385 | cursor: default; 386 | } 387 | 388 | /* 389 | 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) 390 | 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) 391 | This can trigger a poorly considered lint error in some tools but is included by design. 392 | */ 393 | 394 | img, 395 | svg, 396 | video, 397 | canvas, 398 | audio, 399 | iframe, 400 | embed, 401 | object { 402 | display: block; 403 | /* 1 */ 404 | vertical-align: middle; 405 | /* 2 */ 406 | } 407 | 408 | /* 409 | Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) 410 | */ 411 | 412 | img, 413 | video { 414 | max-width: 100%; 415 | height: auto; 416 | } 417 | 418 | /* 419 | Ensure the default browser behavior of the `hidden` attribute. 420 | */ 421 | 422 | [hidden] { 423 | display: none; 424 | } 425 | 426 | h1 { 427 | counter-reset: level-1; 428 | } 429 | 430 | h2 { 431 | counter-reset: level-2; 432 | } 433 | 434 | h3 { 435 | counter-reset: level-3; 436 | } 437 | 438 | h2::before, h3::before, h4::before { 439 | color: #475569; 440 | } 441 | 442 | h2::before { 443 | counter-increment: level-1; 444 | content: counter(level-1) ". "; 445 | } 446 | 447 | h3::before { 448 | counter-increment: level-2; 449 | content: counter(level-1) "." counter(level-2) " "; 450 | } 451 | 452 | h4::before { 453 | counter-increment: level-3; 454 | content: counter(level-1) "." counter(level-2) "." counter(level-3) " "; 455 | } 456 | 457 | *, ::before, ::after { 458 | --tw-translate-x: 0; 459 | --tw-translate-y: 0; 460 | --tw-rotate: 0; 461 | --tw-skew-x: 0; 462 | --tw-skew-y: 0; 463 | --tw-scale-x: 1; 464 | --tw-scale-y: 1; 465 | --tw-pan-x: ; 466 | --tw-pan-y: ; 467 | --tw-pinch-zoom: ; 468 | --tw-scroll-snap-strictness: proximity; 469 | --tw-ordinal: ; 470 | --tw-slashed-zero: ; 471 | --tw-numeric-figure: ; 472 | --tw-numeric-spacing: ; 473 | --tw-numeric-fraction: ; 474 | --tw-ring-inset: ; 475 | --tw-ring-offset-width: 0px; 476 | --tw-ring-offset-color: #fff; 477 | --tw-ring-color: rgb(59 130 246 / 0.5); 478 | --tw-ring-offset-shadow: 0 0 #0000; 479 | --tw-ring-shadow: 0 0 #0000; 480 | --tw-shadow: 0 0 #0000; 481 | --tw-shadow-colored: 0 0 #0000; 482 | --tw-blur: ; 483 | --tw-brightness: ; 484 | --tw-contrast: ; 485 | --tw-grayscale: ; 486 | --tw-hue-rotate: ; 487 | --tw-invert: ; 488 | --tw-saturate: ; 489 | --tw-sepia: ; 490 | --tw-drop-shadow: ; 491 | --tw-backdrop-blur: ; 492 | --tw-backdrop-brightness: ; 493 | --tw-backdrop-contrast: ; 494 | --tw-backdrop-grayscale: ; 495 | --tw-backdrop-hue-rotate: ; 496 | --tw-backdrop-invert: ; 497 | --tw-backdrop-opacity: ; 498 | --tw-backdrop-saturate: ; 499 | --tw-backdrop-sepia: ; 500 | } 501 | 502 | .prose { 503 | color: var(--tw-prose-body); 504 | max-width: 65ch; 505 | } 506 | 507 | .prose :where([class~="lead"]):not(:where([class~="not-prose"] *)) { 508 | color: var(--tw-prose-lead); 509 | font-size: 1.25em; 510 | line-height: 1.6; 511 | margin-top: 1.2em; 512 | margin-bottom: 1.2em; 513 | } 514 | 515 | .prose :where(a):not(:where([class~="not-prose"] *)) { 516 | color: var(--tw-prose-links); 517 | text-decoration: underline; 518 | font-weight: 500; 519 | } 520 | 521 | .prose :where(strong):not(:where([class~="not-prose"] *)) { 522 | color: var(--tw-prose-bold); 523 | font-weight: 600; 524 | } 525 | 526 | .prose :where(ol):not(:where([class~="not-prose"] *)) { 527 | list-style-type: decimal; 528 | padding-left: 1.625em; 529 | } 530 | 531 | .prose :where(ol[type="A"]):not(:where([class~="not-prose"] *)) { 532 | list-style-type: upper-alpha; 533 | } 534 | 535 | .prose :where(ol[type="a"]):not(:where([class~="not-prose"] *)) { 536 | list-style-type: lower-alpha; 537 | } 538 | 539 | .prose :where(ol[type="A" s]):not(:where([class~="not-prose"] *)) { 540 | list-style-type: upper-alpha; 541 | } 542 | 543 | .prose :where(ol[type="a" s]):not(:where([class~="not-prose"] *)) { 544 | list-style-type: lower-alpha; 545 | } 546 | 547 | .prose :where(ol[type="I"]):not(:where([class~="not-prose"] *)) { 548 | list-style-type: upper-roman; 549 | } 550 | 551 | .prose :where(ol[type="i"]):not(:where([class~="not-prose"] *)) { 552 | list-style-type: lower-roman; 553 | } 554 | 555 | .prose :where(ol[type="I" s]):not(:where([class~="not-prose"] *)) { 556 | list-style-type: upper-roman; 557 | } 558 | 559 | .prose :where(ol[type="i" s]):not(:where([class~="not-prose"] *)) { 560 | list-style-type: lower-roman; 561 | } 562 | 563 | .prose :where(ol[type="1"]):not(:where([class~="not-prose"] *)) { 564 | list-style-type: decimal; 565 | } 566 | 567 | .prose :where(ul):not(:where([class~="not-prose"] *)) { 568 | list-style-type: disc; 569 | padding-left: 1.625em; 570 | } 571 | 572 | .prose :where(ol > li):not(:where([class~="not-prose"] *))::marker { 573 | font-weight: 400; 574 | color: var(--tw-prose-counters); 575 | } 576 | 577 | .prose :where(ul > li):not(:where([class~="not-prose"] *))::marker { 578 | color: var(--tw-prose-bullets); 579 | } 580 | 581 | .prose :where(hr):not(:where([class~="not-prose"] *)) { 582 | border-color: var(--tw-prose-hr); 583 | border-top-width: 1px; 584 | margin-top: 3em; 585 | margin-bottom: 3em; 586 | } 587 | 588 | .prose :where(blockquote):not(:where([class~="not-prose"] *)) { 589 | font-weight: 500; 590 | font-style: italic; 591 | color: var(--tw-prose-quotes); 592 | border-left-width: 0.25rem; 593 | border-left-color: var(--tw-prose-quote-borders); 594 | quotes: "\201C""\201D""\2018""\2019"; 595 | margin-top: 1.6em; 596 | margin-bottom: 1.6em; 597 | padding-left: 1em; 598 | } 599 | 600 | .prose :where(blockquote p:first-of-type):not(:where([class~="not-prose"] *))::before { 601 | content: open-quote; 602 | } 603 | 604 | .prose :where(blockquote p:last-of-type):not(:where([class~="not-prose"] *))::after { 605 | content: close-quote; 606 | } 607 | 608 | .prose :where(h1):not(:where([class~="not-prose"] *)) { 609 | color: var(--tw-prose-headings); 610 | font-weight: 800; 611 | font-size: 2.25em; 612 | margin-top: 0; 613 | margin-bottom: 0.8888889em; 614 | line-height: 1.1111111; 615 | } 616 | 617 | .prose :where(h1 strong):not(:where([class~="not-prose"] *)) { 618 | font-weight: 900; 619 | } 620 | 621 | .prose :where(h2):not(:where([class~="not-prose"] *)) { 622 | color: var(--tw-prose-headings); 623 | font-weight: 700; 624 | font-size: 1.5em; 625 | margin-top: 2em; 626 | margin-bottom: 1em; 627 | line-height: 1.3333333; 628 | } 629 | 630 | .prose :where(h2 strong):not(:where([class~="not-prose"] *)) { 631 | font-weight: 800; 632 | } 633 | 634 | .prose :where(h3):not(:where([class~="not-prose"] *)) { 635 | color: var(--tw-prose-headings); 636 | font-weight: 600; 637 | font-size: 1.25em; 638 | margin-top: 1.6em; 639 | margin-bottom: 0.6em; 640 | line-height: 1.6; 641 | } 642 | 643 | .prose :where(h3 strong):not(:where([class~="not-prose"] *)) { 644 | font-weight: 700; 645 | } 646 | 647 | .prose :where(h4):not(:where([class~="not-prose"] *)) { 648 | color: var(--tw-prose-headings); 649 | font-weight: 600; 650 | margin-top: 1.5em; 651 | margin-bottom: 0.5em; 652 | line-height: 1.5; 653 | } 654 | 655 | .prose :where(h4 strong):not(:where([class~="not-prose"] *)) { 656 | font-weight: 700; 657 | } 658 | 659 | .prose :where(figure > *):not(:where([class~="not-prose"] *)) { 660 | margin-top: 0; 661 | margin-bottom: 0; 662 | } 663 | 664 | .prose :where(figcaption):not(:where([class~="not-prose"] *)) { 665 | color: var(--tw-prose-captions); 666 | font-size: 0.875em; 667 | line-height: 1.4285714; 668 | margin-top: 0.8571429em; 669 | } 670 | 671 | .prose :where(code):not(:where([class~="not-prose"] *)) { 672 | color: var(--tw-prose-code); 673 | font-weight: 600; 674 | font-size: 0.875em; 675 | } 676 | 677 | .prose :where(code):not(:where([class~="not-prose"] *))::before { 678 | content: "`"; 679 | } 680 | 681 | .prose :where(code):not(:where([class~="not-prose"] *))::after { 682 | content: "`"; 683 | } 684 | 685 | .prose :where(a code):not(:where([class~="not-prose"] *)) { 686 | color: var(--tw-prose-links); 687 | } 688 | 689 | .prose :where(pre):not(:where([class~="not-prose"] *)) { 690 | color: var(--tw-prose-pre-code); 691 | background-color: var(--tw-prose-pre-bg); 692 | overflow-x: auto; 693 | font-weight: 400; 694 | font-size: 0.875em; 695 | line-height: 1.7142857; 696 | margin-top: 1.7142857em; 697 | margin-bottom: 1.7142857em; 698 | border-radius: 0.375rem; 699 | padding-top: 0.8571429em; 700 | padding-right: 1.1428571em; 701 | padding-bottom: 0.8571429em; 702 | padding-left: 1.1428571em; 703 | } 704 | 705 | .prose :where(pre code):not(:where([class~="not-prose"] *)) { 706 | background-color: transparent; 707 | border-width: 0; 708 | border-radius: 0; 709 | padding: 0; 710 | font-weight: inherit; 711 | color: inherit; 712 | font-size: inherit; 713 | font-family: inherit; 714 | line-height: inherit; 715 | } 716 | 717 | .prose :where(pre code):not(:where([class~="not-prose"] *))::before { 718 | content: none; 719 | } 720 | 721 | .prose :where(pre code):not(:where([class~="not-prose"] *))::after { 722 | content: none; 723 | } 724 | 725 | .prose :where(table):not(:where([class~="not-prose"] *)) { 726 | width: 100%; 727 | table-layout: auto; 728 | text-align: left; 729 | margin-top: 2em; 730 | margin-bottom: 2em; 731 | font-size: 0.875em; 732 | line-height: 1.7142857; 733 | } 734 | 735 | .prose :where(thead):not(:where([class~="not-prose"] *)) { 736 | border-bottom-width: 1px; 737 | border-bottom-color: var(--tw-prose-th-borders); 738 | } 739 | 740 | .prose :where(thead th):not(:where([class~="not-prose"] *)) { 741 | color: var(--tw-prose-headings); 742 | font-weight: 600; 743 | vertical-align: bottom; 744 | padding-right: 0.5714286em; 745 | padding-bottom: 0.5714286em; 746 | padding-left: 0.5714286em; 747 | } 748 | 749 | .prose :where(tbody tr):not(:where([class~="not-prose"] *)) { 750 | border-bottom-width: 1px; 751 | border-bottom-color: var(--tw-prose-td-borders); 752 | } 753 | 754 | .prose :where(tbody tr:last-child):not(:where([class~="not-prose"] *)) { 755 | border-bottom-width: 0; 756 | } 757 | 758 | .prose :where(tbody td):not(:where([class~="not-prose"] *)) { 759 | vertical-align: baseline; 760 | padding-top: 0.5714286em; 761 | padding-right: 0.5714286em; 762 | padding-bottom: 0.5714286em; 763 | padding-left: 0.5714286em; 764 | } 765 | 766 | .prose { 767 | --tw-prose-body: #374151; 768 | --tw-prose-headings: #111827; 769 | --tw-prose-lead: #4b5563; 770 | --tw-prose-links: #111827; 771 | --tw-prose-bold: #111827; 772 | --tw-prose-counters: #6b7280; 773 | --tw-prose-bullets: #d1d5db; 774 | --tw-prose-hr: #e5e7eb; 775 | --tw-prose-quotes: #111827; 776 | --tw-prose-quote-borders: #e5e7eb; 777 | --tw-prose-captions: #6b7280; 778 | --tw-prose-code: #111827; 779 | --tw-prose-pre-code: #e5e7eb; 780 | --tw-prose-pre-bg: #1f2937; 781 | --tw-prose-th-borders: #d1d5db; 782 | --tw-prose-td-borders: #e5e7eb; 783 | --tw-prose-invert-body: #d1d5db; 784 | --tw-prose-invert-headings: #fff; 785 | --tw-prose-invert-lead: #9ca3af; 786 | --tw-prose-invert-links: #fff; 787 | --tw-prose-invert-bold: #fff; 788 | --tw-prose-invert-counters: #9ca3af; 789 | --tw-prose-invert-bullets: #4b5563; 790 | --tw-prose-invert-hr: #374151; 791 | --tw-prose-invert-quotes: #f3f4f6; 792 | --tw-prose-invert-quote-borders: #374151; 793 | --tw-prose-invert-captions: #9ca3af; 794 | --tw-prose-invert-code: #fff; 795 | --tw-prose-invert-pre-code: #d1d5db; 796 | --tw-prose-invert-pre-bg: rgb(0 0 0 / 50%); 797 | --tw-prose-invert-th-borders: #4b5563; 798 | --tw-prose-invert-td-borders: #374151; 799 | font-size: 1rem; 800 | line-height: 1.75; 801 | } 802 | 803 | .prose :where(p):not(:where([class~="not-prose"] *)) { 804 | margin-top: 1.25em; 805 | margin-bottom: 1.25em; 806 | } 807 | 808 | .prose :where(img):not(:where([class~="not-prose"] *)) { 809 | margin-top: 2em; 810 | margin-bottom: 2em; 811 | } 812 | 813 | .prose :where(video):not(:where([class~="not-prose"] *)) { 814 | margin-top: 2em; 815 | margin-bottom: 2em; 816 | } 817 | 818 | .prose :where(figure):not(:where([class~="not-prose"] *)) { 819 | margin-top: 2em; 820 | margin-bottom: 2em; 821 | } 822 | 823 | .prose :where(h2 code):not(:where([class~="not-prose"] *)) { 824 | font-size: 0.875em; 825 | } 826 | 827 | .prose :where(h3 code):not(:where([class~="not-prose"] *)) { 828 | font-size: 0.9em; 829 | } 830 | 831 | .prose :where(li):not(:where([class~="not-prose"] *)) { 832 | margin-top: 0.5em; 833 | margin-bottom: 0.5em; 834 | } 835 | 836 | .prose :where(ol > li):not(:where([class~="not-prose"] *)) { 837 | padding-left: 0.375em; 838 | } 839 | 840 | .prose :where(ul > li):not(:where([class~="not-prose"] *)) { 841 | padding-left: 0.375em; 842 | } 843 | 844 | .prose > :where(ul > li p):not(:where([class~="not-prose"] *)) { 845 | margin-top: 0.75em; 846 | margin-bottom: 0.75em; 847 | } 848 | 849 | .prose > :where(ul > li > *:first-child):not(:where([class~="not-prose"] *)) { 850 | margin-top: 1.25em; 851 | } 852 | 853 | .prose > :where(ul > li > *:last-child):not(:where([class~="not-prose"] *)) { 854 | margin-bottom: 1.25em; 855 | } 856 | 857 | .prose > :where(ol > li > *:first-child):not(:where([class~="not-prose"] *)) { 858 | margin-top: 1.25em; 859 | } 860 | 861 | .prose > :where(ol > li > *:last-child):not(:where([class~="not-prose"] *)) { 862 | margin-bottom: 1.25em; 863 | } 864 | 865 | .prose :where(ul ul, ul ol, ol ul, ol ol):not(:where([class~="not-prose"] *)) { 866 | margin-top: 0.75em; 867 | margin-bottom: 0.75em; 868 | } 869 | 870 | .prose :where(hr + *):not(:where([class~="not-prose"] *)) { 871 | margin-top: 0; 872 | } 873 | 874 | .prose :where(h2 + *):not(:where([class~="not-prose"] *)) { 875 | margin-top: 0; 876 | } 877 | 878 | .prose :where(h3 + *):not(:where([class~="not-prose"] *)) { 879 | margin-top: 0; 880 | } 881 | 882 | .prose :where(h4 + *):not(:where([class~="not-prose"] *)) { 883 | margin-top: 0; 884 | } 885 | 886 | .prose :where(thead th:first-child):not(:where([class~="not-prose"] *)) { 887 | padding-left: 0; 888 | } 889 | 890 | .prose :where(thead th:last-child):not(:where([class~="not-prose"] *)) { 891 | padding-right: 0; 892 | } 893 | 894 | .prose :where(tbody td:first-child):not(:where([class~="not-prose"] *)) { 895 | padding-left: 0; 896 | } 897 | 898 | .prose :where(tbody td:last-child):not(:where([class~="not-prose"] *)) { 899 | padding-right: 0; 900 | } 901 | 902 | .prose > :where(:first-child):not(:where([class~="not-prose"] *)) { 903 | margin-top: 0; 904 | } 905 | 906 | .prose > :where(:last-child):not(:where([class~="not-prose"] *)) { 907 | margin-bottom: 0; 908 | } 909 | 910 | .m-3 { 911 | margin: 0.75rem; 912 | } 913 | 914 | .mt-12 { 915 | margin-top: 3rem; 916 | } 917 | 918 | .hidden { 919 | display: none; 920 | } 921 | 922 | .cursor-pointer { 923 | cursor: pointer; 924 | } 925 | 926 | .bg-sky-50 { 927 | --tw-bg-opacity: 1; 928 | background-color: rgb(240 249 255 / var(--tw-bg-opacity)); 929 | } 930 | 931 | .p-6 { 932 | padding: 1.5rem; 933 | } 934 | 935 | .text-3xl { 936 | font-size: 1.875rem; 937 | line-height: 2.25rem; 938 | } 939 | 940 | .text-red-700 { 941 | --tw-text-opacity: 1; 942 | color: rgb(185 28 28 / var(--tw-text-opacity)); 943 | } 944 | 945 | .collection { 946 | counter-reset: collection; 947 | } 948 | 949 | .item::before { 950 | counter-increment: collection; 951 | content: counters(collection,".") " "; 952 | } 953 | 954 | .after\:arrow::after { 955 | content: var(--tw-content); 956 | border: solid black; 957 | border-width: 0 3px 3px 0; 958 | display: inline-block; 959 | padding: 3px; 960 | margin-left: 5px; 961 | } 962 | 963 | .after\:arrow-right::after { 964 | content: var(--tw-content); 965 | transform: rotate(-45deg); 966 | } 967 | 968 | .after\:arrow-down::after { 969 | content: var(--tw-content); 970 | transform: rotate(45deg); 971 | } 972 | 973 | .prose-headings\:text-cyan-900 :is(:where(h1, h2, h3, h4, th):not(:where([class~="not-prose"] *))) { 974 | --tw-text-opacity: 1; 975 | color: rgb(22 78 99 / var(--tw-text-opacity)); 976 | } 977 | 978 | .prose-lead\:text-cyan-600 :is(:where([class~="lead"]):not(:where([class~="not-prose"] *))) { 979 | --tw-text-opacity: 1; 980 | color: rgb(8 145 178 / var(--tw-text-opacity)); 981 | } 982 | 983 | .prose-h1\:underline :is(:where(h1):not(:where([class~="not-prose"] *))) { 984 | -webkit-text-decoration-line: underline; 985 | text-decoration-line: underline; 986 | } 987 | 988 | .prose-h1\:underline-offset-8 :is(:where(h1):not(:where([class~="not-prose"] *))) { 989 | text-underline-offset: 8px; 990 | } 991 | 992 | .prose-h2\:first-letter\:text-cyan-600 :is(:where(h2):not(:where([class~="not-prose"] *)))::first-letter { 993 | --tw-text-opacity: 1; 994 | color: rgb(8 145 178 / var(--tw-text-opacity)); 995 | } 996 | 997 | .prose-p\:first-line\:italic :is(:where(p):not(:where([class~="not-prose"] *)))::first-line { 998 | font-style: italic; 999 | } 1000 | 1001 | .prose-blockquote\:mx-6 :is(:where(blockquote):not(:where([class~="not-prose"] *))) { 1002 | margin-left: 1.5rem; 1003 | margin-right: 1.5rem; 1004 | } 1005 | 1006 | .prose-blockquote\:border-cyan-600 :is(:where(blockquote):not(:where([class~="not-prose"] *))) { 1007 | --tw-border-opacity: 1; 1008 | border-color: rgb(8 145 178 / var(--tw-border-opacity)); 1009 | } 1010 | 1011 | .prose-blockquote\:text-cyan-600 :is(:where(blockquote):not(:where([class~="not-prose"] *))) { 1012 | --tw-text-opacity: 1; 1013 | color: rgb(8 145 178 / var(--tw-text-opacity)); 1014 | } 1015 | 1016 | .prose-figure\:mx-6 :is(:where(figure):not(:where([class~="not-prose"] *))) { 1017 | margin-left: 1.5rem; 1018 | margin-right: 1.5rem; 1019 | } 1020 | 1021 | .prose-figcaption\:text-center :is(:where(figcaption):not(:where([class~="not-prose"] *))) { 1022 | text-align: center; 1023 | } 1024 | 1025 | .prose-li\:marker\:text-cyan-600 * :is(:where(li):not(:where([class~="not-prose"] *)))::marker { 1026 | --tw-text-opacity: 1; 1027 | color: rgb(8 145 178 / var(--tw-text-opacity)); 1028 | } 1029 | 1030 | .prose-li\:marker\:text-cyan-600 :is(:where(li):not(:where([class~="not-prose"] *)))::marker { 1031 | --tw-text-opacity: 1; 1032 | color: rgb(8 145 178 / var(--tw-text-opacity)); 1033 | } 1034 | 1035 | .prose-img\:rounded-lg :is(:where(img):not(:where([class~="not-prose"] *))) { 1036 | border-radius: 0.5rem; 1037 | } 1038 | 1039 | .prose-img\:drop-shadow-lg :is(:where(img):not(:where([class~="not-prose"] *))) { 1040 | --tw-drop-shadow: drop-shadow(0 10px 8px rgb(0 0 0 / 0.04)) drop-shadow(0 4px 3px rgb(0 0 0 / 0.1)); 1041 | filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); 1042 | } --------------------------------------------------------------------------------