├── 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 |
31 |
109 |
110 |
111 |
Want to stay up-to-date?
112 | Join our mail list for hot news & new tutorials
113 |
114 |
115 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
ABOUT US
126 |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ac est massa. Donec eget elementum sapien, tincidunt tempor nunc. Cras sodales id ipsum at convallis.
127 |
128 |
129 |
130 |
CONTACT US
131 |
132 | A108 Adam Street
133 | New York, NY 535022
134 | United States
135 | Phone: +1 5589 55488 55
136 | Email: info@webcraft.com
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
SAY HELLO!
153 |
158 |
159 |
160 |
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 |
18 |
19 |
20 |
21 |
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 |
17 | First item
18 | Second item
19 | Third item
20 |
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 |
18 |
19 |
20 |
21 |
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 |
13 | JavaScript
14 |
15 | Node
16 | React
17 | Vue
18 |
19 | Nuxt
20 | Vuetify
21 | Quasar
22 |
23 | Components
24 | Composables
25 | Directives
26 |
27 |
28 |
29 |
30 |
31 |
32 |
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 |
34 | List item
35 | List item
36 | List item
37 |
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 | First item
41 | Second item
42 | Third item
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 | }
--------------------------------------------------------------------------------