lookbook 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +257 -0
  4. data/app/assets/lookbook/css/app.css +37 -0
  5. data/app/assets/lookbook/css/code_theme.css +214 -0
  6. data/app/assets/lookbook/css/tooltip_theme.css +16 -0
  7. data/app/assets/lookbook/js/app.js +47 -0
  8. data/app/assets/lookbook/js/preview.js +76 -0
  9. data/app/assets/lookbook/js/reloader.js +28 -0
  10. data/app/assets/lookbook/js/size_observer.js +16 -0
  11. data/app/assets/lookbook/js/split.js +26 -0
  12. data/app/channels/lookbook/connection.rb +11 -0
  13. data/app/channels/lookbook/reload_channel.rb +7 -0
  14. data/app/controllers/lookbook/browser_controller.rb +141 -0
  15. data/app/helpers/lookbook/application_helper.rb +24 -0
  16. data/app/views/lookbook/browser/error.html.erb +1 -0
  17. data/app/views/lookbook/browser/index.html.erb +8 -0
  18. data/app/views/lookbook/browser/not_found.html.erb +25 -0
  19. data/app/views/lookbook/browser/show.html.erb +33 -0
  20. data/app/views/lookbook/layouts/app.html.erb +49 -0
  21. data/app/views/lookbook/partials/_icon_sprite.html.erb +1 -0
  22. data/app/views/lookbook/partials/_preview.html.erb +18 -0
  23. data/app/views/lookbook/partials/_sidebar.html.erb +21 -0
  24. data/app/views/lookbook/partials/inspector/_code.html.erb +1 -0
  25. data/app/views/lookbook/partials/inspector/_inspector.html.erb +43 -0
  26. data/app/views/lookbook/partials/inspector/_plain.html.erb +3 -0
  27. data/app/views/lookbook/partials/inspector/_prose.html.erb +3 -0
  28. data/app/views/lookbook/partials/nav/_collection.html.erb +17 -0
  29. data/app/views/lookbook/partials/nav/_label.html.erb +13 -0
  30. data/app/views/lookbook/partials/nav/_nav.html.erb +27 -0
  31. data/app/views/lookbook/partials/nav/_preview.html.erb +48 -0
  32. data/config/lookbook_cable.yml +8 -0
  33. data/config/routes.rb +8 -0
  34. data/lib/lookbook.rb +14 -0
  35. data/lib/lookbook/collection.rb +51 -0
  36. data/lib/lookbook/engine.rb +96 -0
  37. data/lib/lookbook/lang.rb +42 -0
  38. data/lib/lookbook/navigation.rb +68 -0
  39. data/lib/lookbook/parser.rb +33 -0
  40. data/lib/lookbook/preview.rb +86 -0
  41. data/lib/lookbook/preview_controller.rb +17 -0
  42. data/lib/lookbook/preview_example.rb +68 -0
  43. data/lib/lookbook/taggable.rb +23 -0
  44. data/lib/lookbook/version.rb +3 -0
  45. data/lib/tasks/lookbook_tasks.rake +15 -0
  46. data/public/lookbook-assets/app.css +2361 -0
  47. data/public/lookbook-assets/app.js +7692 -0
  48. metadata +242 -0
@@ -0,0 +1,42 @@
1
+ module Lookbook
2
+ module Lang
3
+ class << self
4
+ LANGUAGES = [
5
+ {
6
+ name: "ruby",
7
+ ext: ".rb",
8
+ label: "Ruby"
9
+ },
10
+ {
11
+ name: "html",
12
+ ext: ".html",
13
+ label: "HTML"
14
+ },
15
+ {
16
+ name: "erb",
17
+ ext: ".erb",
18
+ label: "ERB"
19
+ },
20
+ {
21
+ name: "haml",
22
+ ext: ".haml",
23
+ label: "Haml"
24
+ },
25
+ {
26
+ name: "slim",
27
+ ext: ".slim",
28
+ label: "Slim"
29
+ }
30
+ ]
31
+
32
+ def find(name)
33
+ LANGUAGES.find { |l| l[:name] == name.to_s }
34
+ end
35
+
36
+ def guess(path)
37
+ ext = File.extname(path)
38
+ LANGUAGES.find { |l| l[:ext] == ext }
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,68 @@
1
+ module Lookbook
2
+ class Navigation
3
+ class << self
4
+ def previews
5
+ valid_previews = ViewComponent::Preview.all.filter { |preview| preview.get_visible_examples.any? && !preview.hidden? }
6
+ valid_previews.sort_by(&:normalized_name)
7
+ end
8
+
9
+ def flat
10
+ {
11
+ flat: true,
12
+ depth: 0,
13
+ items: previews.map do |preview|
14
+ nav_item_for_preview(preview, expand_name: true)
15
+ end
16
+ }
17
+ end
18
+
19
+ def nested
20
+ nav = {flat: false, depth: 0, items: []}
21
+ previews.each do |preview|
22
+ current = nav
23
+ depth = preview.path_parts.size
24
+ path = ""
25
+ preview.path_parts.each_with_index do |segment, i|
26
+ target = current[:items].find { |item| item[:name] == segment }
27
+ if target.nil?
28
+ path = "#{path.present? ? path + "." : ""}#{segment}"
29
+ target = {
30
+ depth: i + 1,
31
+ nested: true,
32
+ name: path,
33
+ label: segment.titleize,
34
+ type: :group,
35
+ items: []
36
+ }
37
+ current[:items].append(target)
38
+ end
39
+ if depth == i + 1
40
+ target[:items].push(nav_item_for_preview(preview))
41
+ else
42
+ current = target
43
+ end
44
+ end
45
+ end
46
+ nav
47
+ end
48
+
49
+ private
50
+
51
+ def nav_item_for_preview(preview, expand_name: false)
52
+ {
53
+ name: preview.preview_name.tr("/", "."),
54
+ label: expand_name ? "#{preview.pretty_path}/#{preview.label}" : preview.label,
55
+ type: :preview,
56
+ examples: preview.get_visible_examples.map do |example|
57
+ example_path = "#{preview.preview_name}/#{example.name}"
58
+ {
59
+ name: example.name,
60
+ label: example.label,
61
+ path: example_path
62
+ }
63
+ end
64
+ }
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,33 @@
1
+ require "yard"
2
+
3
+ module Lookbook
4
+ class Parser
5
+ YARDOC_FILE_PATH = Rails.root.join("tmp/storage/.yardoc").to_s
6
+
7
+ def initialize(paths)
8
+ @paths = paths.map { |p| "#{p}/**/*.rb" }
9
+ YARD::Registry.yardoc_file = YARDOC_FILE_PATH
10
+ end
11
+
12
+ def parse
13
+ YARD::Registry.clear
14
+ YARD::Registry.lock_for_writing do
15
+ YARD.parse(@paths)
16
+ YARD::Registry.save(false, YARDOC_FILE_PATH)
17
+ end
18
+ end
19
+
20
+ def get_code_object(path)
21
+ registry = YARD::RegistryStore.new
22
+ registry.load!(YARDOC_FILE_PATH)
23
+ registry.get(path)
24
+ end
25
+
26
+ class << self
27
+ def define_tags
28
+ YARD::Tags::Library.define_tag("Hidden status", :hidden)
29
+ YARD::Tags::Library.define_tag("Label", :label)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,86 @@
1
+ module Lookbook
2
+ module Preview
3
+ include Taggable
4
+
5
+ # Examples::FooBarComponent::Preview -> "Foo Bar"
6
+ def lookbook_label
7
+ super.presence || lookbook_path.split("/").last.titleize
8
+ end
9
+
10
+ def lookbook_type
11
+ :preview
12
+ end
13
+
14
+ def lookbook_example(example_name)
15
+ lookbook_examples.find { |m| m.name == example_name }
16
+ end
17
+
18
+ def lookbook_examples
19
+ return @lookbook_examples if @lookbook_examples.present?
20
+ examples = code_object.meths.map { |m| PreviewExample.new(m.name.to_s, self) }
21
+ examples.reject!(&:hidden?)
22
+ @lookbook_examples ||= Lookbook.config.sort_examples ? examples.sort_by(&:label) : examples
23
+ end
24
+
25
+ # Examples::FooBarComponentPreview -> "Examples::FooBar"
26
+ # Examples::FooBarComponent::Preview -> "Examples::FooBar"
27
+ def lookbook_name
28
+ name.chomp("ComponentPreview").chomp("Component::Preview").chomp("::")
29
+ end
30
+
31
+ # Examples::FooBarComponentPreview -> "examples/foo_bar"
32
+ # Examples::FooBarComponent::Preview -> "examples/foo_bar"
33
+ def lookbook_path
34
+ lookbook_name.underscore
35
+ end
36
+
37
+ # Examples::FooBarComponentPreview -> "/Users/myname/myapp/test/components/previews/examples/foo_bar_component_preview.rb"
38
+ # Examples::FooBarComponent::Preview -> "/Users/myname/myapp/test/components/previews/examples/foo_bar/component_preview.rb"
39
+ def lookbook_full_path
40
+ base_path = Array(preview_paths).detect do |preview_path|
41
+ Dir["#{preview_path}/#{name.underscore}.rb"].first
42
+ end
43
+ Pathname.new(Dir["#{base_path}/#{name.underscore}.rb"].first)
44
+ end
45
+
46
+ def lookbook_parent_collections
47
+ File.dirname(lookbook_path).split("/")
48
+ end
49
+
50
+ def lookbook_hierarchy_depth
51
+ lookbook_path.split("/").size
52
+ end
53
+
54
+ def lookbook_id
55
+ lookbook_path.tr("_", "-")
56
+ end
57
+
58
+ class << self
59
+ def all
60
+ ViewComponent::Preview.all
61
+ end
62
+
63
+ def find(path)
64
+ all.find { |p| p.lookbook_path == path }
65
+ end
66
+
67
+ def exists?(path)
68
+ !!find(path)
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def taggable_object_path
75
+ name
76
+ end
77
+
78
+ alias_method :label, :lookbook_label
79
+ alias_method :notes, :lookbook_notes
80
+ alias_method :hidden?, :lookbook_hidden?
81
+ alias_method :type, :lookbook_type
82
+ alias_method :example, :lookbook_example
83
+ alias_method :get_examples, :lookbook_examples
84
+ alias_method :hierarchy_depth, :lookbook_hierarchy_depth
85
+ end
86
+ end
@@ -0,0 +1,17 @@
1
+ module Lookbook
2
+ module PreviewController
3
+ def render_component_to_string(preview, example_name)
4
+ prepend_application_view_paths
5
+ prepend_preview_examples_view_path
6
+ @preview = preview
7
+ @example_name = example_name
8
+ @render_args = @preview.render_args(@example_name, params: params.permit!)
9
+ template = @render_args[:template]
10
+ locals = @render_args[:locals]
11
+ opts = {}
12
+ opts[:layout] = nil
13
+ opts[:locals] = locals if locals.present?
14
+ render_to_string template, opts
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,68 @@
1
+ module Lookbook
2
+ class PreviewExample
3
+ include Taggable
4
+
5
+ attr_reader :name
6
+
7
+ def initialize(name, preview)
8
+ @name = name
9
+ @preview = preview
10
+ end
11
+
12
+ def id
13
+ path.underscore.tr("_", "-")
14
+ end
15
+
16
+ def path
17
+ "#{@preview.lookbook_path}/#{name}"
18
+ end
19
+
20
+ def label
21
+ lookbook_label.presence || name.titleize
22
+ end
23
+
24
+ def method_source
25
+ code_object.source.split("\n")[1..-2].join("\n").strip_heredoc
26
+ end
27
+
28
+ def source_lang
29
+ Lookbook::Lang.find(:ruby)
30
+ end
31
+
32
+ def template_source(template_path)
33
+ File.read(full_template_path(template_path))
34
+ end
35
+
36
+ def template_lang(template_path)
37
+ Lookbook::Lang.guess(full_template_path(template_path)) || Lookbook::Lang.find(:html)
38
+ end
39
+
40
+ def type
41
+ :example
42
+ end
43
+
44
+ def filter_match_string
45
+ [*@preview.lookbook_parent_collections, @preview.label, label].join("/").gsub(/\s/, "").downcase
46
+ end
47
+
48
+ def hierarchy_depth
49
+ @preview.lookbook_hierarchy_depth + 1
50
+ end
51
+
52
+ private
53
+
54
+ def taggable_object_path
55
+ "#{@preview.name}##{name}"
56
+ end
57
+
58
+ def full_template_path(template_path)
59
+ base_path = Array(Lookbook.config.preview_paths).detect do |p|
60
+ Dir["#{p}/#{template_path}.html.*"].first
61
+ end
62
+ Pathname.new(Dir["#{base_path}/#{template_path}.html.*"].first)
63
+ end
64
+
65
+ alias_method :notes, :lookbook_notes
66
+ alias_method :hidden?, :lookbook_hidden?
67
+ end
68
+ end
@@ -0,0 +1,23 @@
1
+ module Lookbook
2
+ module Taggable
3
+ def lookbook_hidden?
4
+ if code_object.tag(:hidden)
5
+ code_object.tag(:hidden).text.strip != "false"
6
+ end
7
+ end
8
+
9
+ def lookbook_label
10
+ code_object.tag(:label)&.text
11
+ end
12
+
13
+ def lookbook_notes
14
+ code_object.docstring.to_s.strip
15
+ end
16
+
17
+ private
18
+
19
+ def code_object
20
+ @code_object ||= Lookbook::Engine.parser.get_code_object(taggable_object_path)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module Lookbook
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,15 @@
1
+ require_relative "../lookbook"
2
+
3
+ namespace :lookbook do
4
+ namespace :release do
5
+ desc "Bump the Lookbook engine version number"
6
+ task :bump_version, [:version] do |t, args|
7
+ filename = Lookbook::Engine.root.join("lib/lookbook/version.rb")
8
+ current_version = Lookbook::VERSION.to_s
9
+ new_version = args[:version].sub("v", "")
10
+ file = File.open(filename)
11
+ contents = file.read
12
+ File.write(filename, contents.gsub(current_version, new_version))
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,2361 @@
1
+ /*! tailwindcss v2.2.4 | MIT License | https://tailwindcss.com */
2
+
3
+ /*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */
4
+
5
+ /*
6
+ Document
7
+ ========
8
+ */
9
+
10
+ /**
11
+ Use a better box model (opinionated).
12
+ */
13
+
14
+ *,
15
+ ::before,
16
+ ::after {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ /**
21
+ Use a more readable tab size (opinionated).
22
+ */
23
+
24
+ html {
25
+ -moz-tab-size: 4;
26
+ -o-tab-size: 4;
27
+ tab-size: 4;
28
+ }
29
+
30
+ /**
31
+ 1. Correct the line height in all browsers.
32
+ 2. Prevent adjustments of font size after orientation changes in iOS.
33
+ */
34
+
35
+ html {
36
+ line-height: 1.15;
37
+ /* 1 */
38
+ -webkit-text-size-adjust: 100%;
39
+ /* 2 */
40
+ }
41
+
42
+ /*
43
+ Sections
44
+ ========
45
+ */
46
+
47
+ /**
48
+ Remove the margin in all browsers.
49
+ */
50
+
51
+ body {
52
+ margin: 0;
53
+ }
54
+
55
+ /**
56
+ Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
57
+ */
58
+
59
+ body {
60
+ font-family:
61
+ system-ui,
62
+ -apple-system, /* Firefox supports this but not yet `system-ui` */
63
+ 'Segoe UI',
64
+ Roboto,
65
+ Helvetica,
66
+ Arial,
67
+ sans-serif,
68
+ 'Apple Color Emoji',
69
+ 'Segoe UI Emoji';
70
+ }
71
+
72
+ /*
73
+ Grouping content
74
+ ================
75
+ */
76
+
77
+ /**
78
+ 1. Add the correct height in Firefox.
79
+ 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
80
+ */
81
+
82
+ hr {
83
+ height: 0;
84
+ /* 1 */
85
+ color: inherit;
86
+ /* 2 */
87
+ }
88
+
89
+ /*
90
+ Text-level semantics
91
+ ====================
92
+ */
93
+
94
+ /**
95
+ Add the correct text decoration in Chrome, Edge, and Safari.
96
+ */
97
+
98
+ abbr[title] {
99
+ -webkit-text-decoration: underline dotted;
100
+ text-decoration: underline dotted;
101
+ }
102
+
103
+ /**
104
+ Add the correct font weight in Edge and Safari.
105
+ */
106
+
107
+ b,
108
+ strong {
109
+ font-weight: bolder;
110
+ }
111
+
112
+ /**
113
+ 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)
114
+ 2. Correct the odd 'em' font sizing in all browsers.
115
+ */
116
+
117
+ code,
118
+ kbd,
119
+ samp,
120
+ pre {
121
+ font-family:
122
+ ui-monospace,
123
+ SFMono-Regular,
124
+ Consolas,
125
+ 'Liberation Mono',
126
+ Menlo,
127
+ monospace;
128
+ /* 1 */
129
+ font-size: 1em;
130
+ /* 2 */
131
+ }
132
+
133
+ /**
134
+ Add the correct font size in all browsers.
135
+ */
136
+
137
+ small {
138
+ font-size: 80%;
139
+ }
140
+
141
+ /**
142
+ Prevent 'sub' and 'sup' elements from affecting the line height in all browsers.
143
+ */
144
+
145
+ sub,
146
+ sup {
147
+ font-size: 75%;
148
+ line-height: 0;
149
+ position: relative;
150
+ vertical-align: baseline;
151
+ }
152
+
153
+ sub {
154
+ bottom: -0.25em;
155
+ }
156
+
157
+ sup {
158
+ top: -0.5em;
159
+ }
160
+
161
+ /*
162
+ Tabular data
163
+ ============
164
+ */
165
+
166
+ /**
167
+ 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)
168
+ 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)
169
+ */
170
+
171
+ table {
172
+ text-indent: 0;
173
+ /* 1 */
174
+ border-color: inherit;
175
+ /* 2 */
176
+ }
177
+
178
+ /*
179
+ Forms
180
+ =====
181
+ */
182
+
183
+ /**
184
+ 1. Change the font styles in all browsers.
185
+ 2. Remove the margin in Firefox and Safari.
186
+ */
187
+
188
+ button,
189
+ input,
190
+ optgroup,
191
+ select,
192
+ textarea {
193
+ font-family: inherit;
194
+ /* 1 */
195
+ font-size: 100%;
196
+ /* 1 */
197
+ line-height: 1.15;
198
+ /* 1 */
199
+ margin: 0;
200
+ /* 2 */
201
+ }
202
+
203
+ /**
204
+ Remove the inheritance of text transform in Edge and Firefox.
205
+ 1. Remove the inheritance of text transform in Firefox.
206
+ */
207
+
208
+ button,
209
+ select {
210
+ /* 1 */
211
+ text-transform: none;
212
+ }
213
+
214
+ /**
215
+ Correct the inability to style clickable types in iOS and Safari.
216
+ */
217
+
218
+ button,
219
+ [type='button'],
220
+ [type='reset'],
221
+ [type='submit'] {
222
+ -webkit-appearance: button;
223
+ }
224
+
225
+ /**
226
+ Remove the inner border and padding in Firefox.
227
+ */
228
+
229
+ ::-moz-focus-inner {
230
+ border-style: none;
231
+ padding: 0;
232
+ }
233
+
234
+ /**
235
+ Restore the focus styles unset by the previous rule.
236
+ */
237
+
238
+ :-moz-focusring {
239
+ outline: 1px dotted ButtonText;
240
+ }
241
+
242
+ /**
243
+ Remove the additional ':invalid' styles in Firefox.
244
+ See: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737
245
+ */
246
+
247
+ :-moz-ui-invalid {
248
+ box-shadow: none;
249
+ }
250
+
251
+ /**
252
+ Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.
253
+ */
254
+
255
+ legend {
256
+ padding: 0;
257
+ }
258
+
259
+ /**
260
+ Add the correct vertical alignment in Chrome and Firefox.
261
+ */
262
+
263
+ progress {
264
+ vertical-align: baseline;
265
+ }
266
+
267
+ /**
268
+ Correct the cursor style of increment and decrement buttons in Safari.
269
+ */
270
+
271
+ ::-webkit-inner-spin-button,
272
+ ::-webkit-outer-spin-button {
273
+ height: auto;
274
+ }
275
+
276
+ /**
277
+ 1. Correct the odd appearance in Chrome and Safari.
278
+ 2. Correct the outline style in Safari.
279
+ */
280
+
281
+ [type='search'] {
282
+ -webkit-appearance: textfield;
283
+ /* 1 */
284
+ outline-offset: -2px;
285
+ /* 2 */
286
+ }
287
+
288
+ /**
289
+ Remove the inner padding in Chrome and Safari on macOS.
290
+ */
291
+
292
+ ::-webkit-search-decoration {
293
+ -webkit-appearance: none;
294
+ }
295
+
296
+ /**
297
+ 1. Correct the inability to style clickable types in iOS and Safari.
298
+ 2. Change font properties to 'inherit' in Safari.
299
+ */
300
+
301
+ ::-webkit-file-upload-button {
302
+ -webkit-appearance: button;
303
+ /* 1 */
304
+ font: inherit;
305
+ /* 2 */
306
+ }
307
+
308
+ /*
309
+ Interactive
310
+ ===========
311
+ */
312
+
313
+ /*
314
+ Add the correct display in Chrome and Safari.
315
+ */
316
+
317
+ summary {
318
+ display: list-item;
319
+ }
320
+
321
+ /**
322
+ * Manually forked from SUIT CSS Base: https://github.com/suitcss/base
323
+ * A thin layer on top of normalize.css that provides a starting point more
324
+ * suitable for web applications.
325
+ */
326
+
327
+ /**
328
+ * Removes the default spacing and border for appropriate elements.
329
+ */
330
+
331
+ blockquote,
332
+ dl,
333
+ dd,
334
+ h1,
335
+ h2,
336
+ h3,
337
+ h4,
338
+ h5,
339
+ h6,
340
+ hr,
341
+ figure,
342
+ p,
343
+ pre {
344
+ margin: 0;
345
+ }
346
+
347
+ button {
348
+ background-color: transparent;
349
+ background-image: none;
350
+ }
351
+
352
+ fieldset {
353
+ margin: 0;
354
+ padding: 0;
355
+ }
356
+
357
+ ol,
358
+ ul {
359
+ list-style: none;
360
+ margin: 0;
361
+ padding: 0;
362
+ }
363
+
364
+ /**
365
+ * Tailwind custom reset styles
366
+ */
367
+
368
+ /**
369
+ * 1. Use the user's configured `sans` font-family (with Tailwind's default
370
+ * sans-serif font stack as a fallback) as a sane default.
371
+ * 2. Use Tailwind's default "normal" line-height so the user isn't forced
372
+ * to override it to ensure consistency even when using the default theme.
373
+ */
374
+
375
+ html {
376
+ font-family: "Nunito Sans", -apple-system, ".SFNSText-Regular", "San Francisco", BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
377
+ /* 1 */
378
+ line-height: 1.5;
379
+ /* 2 */
380
+ }
381
+
382
+ /**
383
+ * Inherit font-family and line-height from `html` so users can set them as
384
+ * a class directly on the `html` element.
385
+ */
386
+
387
+ body {
388
+ font-family: inherit;
389
+ line-height: inherit;
390
+ }
391
+
392
+ /**
393
+ * 1. Prevent padding and border from affecting element width.
394
+ *
395
+ * We used to set this in the html element and inherit from
396
+ * the parent element for everything else. This caused issues
397
+ * in shadow-dom-enhanced elements like <details> where the content
398
+ * is wrapped by a div with box-sizing set to `content-box`.
399
+ *
400
+ * https://github.com/mozdevs/cssremedy/issues/4
401
+ *
402
+ *
403
+ * 2. Allow adding a border to an element by just adding a border-width.
404
+ *
405
+ * By default, the way the browser specifies that an element should have no
406
+ * border is by setting it's border-style to `none` in the user-agent
407
+ * stylesheet.
408
+ *
409
+ * In order to easily add borders to elements by just setting the `border-width`
410
+ * property, we change the default border-style for all elements to `solid`, and
411
+ * use border-width to hide them instead. This way our `border` utilities only
412
+ * need to set the `border-width` property instead of the entire `border`
413
+ * shorthand, making our border utilities much more straightforward to compose.
414
+ *
415
+ * https://github.com/tailwindcss/tailwindcss/pull/116
416
+ */
417
+
418
+ *,
419
+ ::before,
420
+ ::after {
421
+ box-sizing: border-box;
422
+ /* 1 */
423
+ border-width: 0;
424
+ /* 2 */
425
+ border-style: solid;
426
+ /* 2 */
427
+ border-color: currentColor;
428
+ /* 2 */
429
+ }
430
+
431
+ /*
432
+ * Ensure horizontal rules are visible by default
433
+ */
434
+
435
+ hr {
436
+ border-top-width: 1px;
437
+ }
438
+
439
+ /**
440
+ * Undo the `border-style: none` reset that Normalize applies to images so that
441
+ * our `border-{width}` utilities have the expected effect.
442
+ *
443
+ * The Normalize reset is unnecessary for us since we default the border-width
444
+ * to 0 on all elements.
445
+ *
446
+ * https://github.com/tailwindcss/tailwindcss/issues/362
447
+ */
448
+
449
+ img {
450
+ border-style: solid;
451
+ }
452
+
453
+ textarea {
454
+ resize: vertical;
455
+ }
456
+
457
+ input::-moz-placeholder, textarea::-moz-placeholder {
458
+ opacity: 1;
459
+ color: #9ca3af;
460
+ }
461
+
462
+ input:-ms-input-placeholder, textarea:-ms-input-placeholder {
463
+ opacity: 1;
464
+ color: #9ca3af;
465
+ }
466
+
467
+ input::placeholder,
468
+ textarea::placeholder {
469
+ opacity: 1;
470
+ color: #9ca3af;
471
+ }
472
+
473
+ button,
474
+ [role="button"] {
475
+ cursor: pointer;
476
+ }
477
+
478
+ table {
479
+ border-collapse: collapse;
480
+ }
481
+
482
+ h1,
483
+ h2,
484
+ h3,
485
+ h4,
486
+ h5,
487
+ h6 {
488
+ font-size: inherit;
489
+ font-weight: inherit;
490
+ }
491
+
492
+ /**
493
+ * Reset links to optimize for opt-in styling instead of
494
+ * opt-out.
495
+ */
496
+
497
+ a {
498
+ color: inherit;
499
+ text-decoration: inherit;
500
+ }
501
+
502
+ /**
503
+ * Reset form element properties that are easy to forget to
504
+ * style explicitly so you don't inadvertently introduce
505
+ * styles that deviate from your design system. These styles
506
+ * supplement a partial reset that is already applied by
507
+ * normalize.css.
508
+ */
509
+
510
+ button,
511
+ input,
512
+ optgroup,
513
+ select,
514
+ textarea {
515
+ padding: 0;
516
+ line-height: inherit;
517
+ color: inherit;
518
+ }
519
+
520
+ /**
521
+ * Use the configured 'mono' font family for elements that
522
+ * are expected to be rendered with a monospace font, falling
523
+ * back to the system monospace stack if there is no configured
524
+ * 'mono' font family.
525
+ */
526
+
527
+ pre,
528
+ code,
529
+ kbd,
530
+ samp {
531
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
532
+ }
533
+
534
+ /**
535
+ * 1. Make replaced elements `display: block` by default as that's
536
+ * the behavior you want almost all of the time. Inspired by
537
+ * CSS Remedy, with `svg` added as well.
538
+ *
539
+ * https://github.com/mozdevs/cssremedy/issues/14
540
+ *
541
+ * 2. Add `vertical-align: middle` to align replaced elements more
542
+ * sensibly by default when overriding `display` by adding a
543
+ * utility like `inline`.
544
+ *
545
+ * This can trigger a poorly considered linting error in some
546
+ * tools but is included by design.
547
+ *
548
+ * https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210
549
+ */
550
+
551
+ img,
552
+ svg,
553
+ video,
554
+ canvas,
555
+ audio,
556
+ iframe,
557
+ embed,
558
+ object {
559
+ display: block;
560
+ /* 1 */
561
+ vertical-align: middle;
562
+ /* 2 */
563
+ }
564
+
565
+ /**
566
+ * Constrain images and videos to the parent width and preserve
567
+ * their intrinsic aspect ratio.
568
+ *
569
+ * https://github.com/mozdevs/cssremedy/issues/14
570
+ */
571
+
572
+ img,
573
+ video {
574
+ max-width: 100%;
575
+ height: auto;
576
+ }
577
+
578
+ *, ::before, ::after {
579
+ --tw-translate-x: 0;
580
+ --tw-translate-y: 0;
581
+ --tw-rotate: 0;
582
+ --tw-skew-x: 0;
583
+ --tw-skew-y: 0;
584
+ --tw-scale-x: 1;
585
+ --tw-scale-y: 1;
586
+ --tw-transform: translateX(var(--tw-translate-x)) translateY(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));
587
+ --tw-border-opacity: 1;
588
+ border-color: rgba(229, 231, 235, var(--tw-border-opacity));
589
+ --tw-shadow: 0 0 #0000;
590
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
591
+ --tw-ring-offset-width: 0px;
592
+ --tw-ring-offset-color: #fff;
593
+ --tw-ring-color: rgba(59, 130, 246, 0.5);
594
+ --tw-ring-offset-shadow: 0 0 #0000;
595
+ --tw-ring-shadow: 0 0 #0000;
596
+ --tw-blur: var(--tw-empty,/*!*/ /*!*/);
597
+ --tw-brightness: var(--tw-empty,/*!*/ /*!*/);
598
+ --tw-contrast: var(--tw-empty,/*!*/ /*!*/);
599
+ --tw-grayscale: var(--tw-empty,/*!*/ /*!*/);
600
+ --tw-hue-rotate: var(--tw-empty,/*!*/ /*!*/);
601
+ --tw-invert: var(--tw-empty,/*!*/ /*!*/);
602
+ --tw-saturate: var(--tw-empty,/*!*/ /*!*/);
603
+ --tw-sepia: var(--tw-empty,/*!*/ /*!*/);
604
+ --tw-drop-shadow: var(--tw-empty,/*!*/ /*!*/);
605
+ --tw-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);
606
+ --tw-backdrop-blur: var(--tw-empty,/*!*/ /*!*/);
607
+ --tw-backdrop-brightness: var(--tw-empty,/*!*/ /*!*/);
608
+ --tw-backdrop-contrast: var(--tw-empty,/*!*/ /*!*/);
609
+ --tw-backdrop-grayscale: var(--tw-empty,/*!*/ /*!*/);
610
+ --tw-backdrop-hue-rotate: var(--tw-empty,/*!*/ /*!*/);
611
+ --tw-backdrop-invert: var(--tw-empty,/*!*/ /*!*/);
612
+ --tw-backdrop-opacity: var(--tw-empty,/*!*/ /*!*/);
613
+ --tw-backdrop-saturate: var(--tw-empty,/*!*/ /*!*/);
614
+ --tw-backdrop-sepia: var(--tw-empty,/*!*/ /*!*/);
615
+ --tw-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
616
+ }
617
+
618
+ [type='text'],[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select {
619
+ -webkit-appearance: none;
620
+ -moz-appearance: none;
621
+ appearance: none;
622
+ background-color: #fff;
623
+ border-color: #6b7280;
624
+ border-width: 1px;
625
+ border-radius: 0px;
626
+ padding-top: 0.5rem;
627
+ padding-right: 0.75rem;
628
+ padding-bottom: 0.5rem;
629
+ padding-left: 0.75rem;
630
+ font-size: 1rem;
631
+ line-height: 1.5rem;
632
+ }
633
+
634
+ [type='text']:focus, [type='email']:focus, [type='url']:focus, [type='password']:focus, [type='number']:focus, [type='date']:focus, [type='datetime-local']:focus, [type='month']:focus, [type='search']:focus, [type='tel']:focus, [type='time']:focus, [type='week']:focus, [multiple]:focus, textarea:focus, select:focus {
635
+ outline: 2px solid transparent;
636
+ outline-offset: 2px;
637
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
638
+ --tw-ring-offset-width: 0px;
639
+ --tw-ring-offset-color: #fff;
640
+ --tw-ring-color: #2563eb;
641
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
642
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
643
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
644
+ border-color: #2563eb;
645
+ }
646
+
647
+ input::-moz-placeholder, textarea::-moz-placeholder {
648
+ color: #6b7280;
649
+ opacity: 1;
650
+ }
651
+
652
+ input:-ms-input-placeholder, textarea:-ms-input-placeholder {
653
+ color: #6b7280;
654
+ opacity: 1;
655
+ }
656
+
657
+ input::placeholder,textarea::placeholder {
658
+ color: #6b7280;
659
+ opacity: 1;
660
+ }
661
+
662
+ ::-webkit-datetime-edit-fields-wrapper {
663
+ padding: 0;
664
+ }
665
+
666
+ ::-webkit-date-and-time-value {
667
+ min-height: 1.5em;
668
+ }
669
+
670
+ select {
671
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
672
+ background-position: right 0.5rem center;
673
+ background-repeat: no-repeat;
674
+ background-size: 1.5em 1.5em;
675
+ padding-right: 2.5rem;
676
+ -webkit-print-color-adjust: exact;
677
+ color-adjust: exact;
678
+ }
679
+
680
+ [multiple] {
681
+ background-image: initial;
682
+ background-position: initial;
683
+ background-repeat: unset;
684
+ background-size: initial;
685
+ padding-right: 0.75rem;
686
+ -webkit-print-color-adjust: unset;
687
+ color-adjust: unset;
688
+ }
689
+
690
+ [type='checkbox'],[type='radio'] {
691
+ -webkit-appearance: none;
692
+ -moz-appearance: none;
693
+ appearance: none;
694
+ padding: 0;
695
+ -webkit-print-color-adjust: exact;
696
+ color-adjust: exact;
697
+ display: inline-block;
698
+ vertical-align: middle;
699
+ background-origin: border-box;
700
+ -webkit-user-select: none;
701
+ -moz-user-select: none;
702
+ -ms-user-select: none;
703
+ user-select: none;
704
+ flex-shrink: 0;
705
+ height: 1rem;
706
+ width: 1rem;
707
+ color: #2563eb;
708
+ background-color: #fff;
709
+ border-color: #6b7280;
710
+ border-width: 1px;
711
+ }
712
+
713
+ [type='checkbox'] {
714
+ border-radius: 0px;
715
+ }
716
+
717
+ [type='radio'] {
718
+ border-radius: 100%;
719
+ }
720
+
721
+ [type='checkbox']:focus,[type='radio']:focus {
722
+ outline: 2px solid transparent;
723
+ outline-offset: 2px;
724
+ --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);
725
+ --tw-ring-offset-width: 2px;
726
+ --tw-ring-offset-color: #fff;
727
+ --tw-ring-color: #2563eb;
728
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
729
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
730
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
731
+ }
732
+
733
+ [type='checkbox']:checked,[type='radio']:checked {
734
+ border-color: transparent;
735
+ background-color: currentColor;
736
+ background-size: 100% 100%;
737
+ background-position: center;
738
+ background-repeat: no-repeat;
739
+ }
740
+
741
+ [type='checkbox']:checked {
742
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
743
+ }
744
+
745
+ [type='radio']:checked {
746
+ background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e");
747
+ }
748
+
749
+ [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus {
750
+ border-color: transparent;
751
+ background-color: currentColor;
752
+ }
753
+
754
+ [type='checkbox']:indeterminate {
755
+ background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");
756
+ border-color: transparent;
757
+ background-color: currentColor;
758
+ background-size: 100% 100%;
759
+ background-position: center;
760
+ background-repeat: no-repeat;
761
+ }
762
+
763
+ [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus {
764
+ border-color: transparent;
765
+ background-color: currentColor;
766
+ }
767
+
768
+ [type='file'] {
769
+ background: unset;
770
+ border-color: inherit;
771
+ border-width: 0;
772
+ border-radius: 0;
773
+ padding: 0;
774
+ font-size: unset;
775
+ line-height: inherit;
776
+ }
777
+
778
+ [type='file']:focus {
779
+ outline: 1px auto -webkit-focus-ring-color;
780
+ }
781
+
782
+ html {
783
+ scroll-behavior: smooth;
784
+ }
785
+
786
+ @media screen and (prefers-reduced-motion: reduce) {
787
+ html {
788
+ scroll-behavior: auto;
789
+ }
790
+ }
791
+
792
+ [x-cloak] {
793
+ display: none !important;
794
+ }
795
+
796
+ pre[class*="language-"] {
797
+ padding: 0 !important;
798
+ margin: 0 !important;
799
+ }
800
+
801
+ .feather {
802
+ width: 24px;
803
+ height: 24px;
804
+ stroke: currentColor;
805
+ stroke-width: 2;
806
+ stroke-linecap: round;
807
+ stroke-linejoin: round;
808
+ fill: none;
809
+ }
810
+
811
+ .prose {
812
+ color: #374151;
813
+ max-width: 65ch;
814
+ }
815
+
816
+ .prose [class~="lead"] {
817
+ color: #4b5563;
818
+ font-size: 1.25em;
819
+ line-height: 1.6;
820
+ margin-top: 1.2em;
821
+ margin-bottom: 1.2em;
822
+ }
823
+
824
+ .prose a {
825
+ color: #111827;
826
+ text-decoration: underline;
827
+ font-weight: 500;
828
+ }
829
+
830
+ .prose strong {
831
+ color: #111827;
832
+ font-weight: 600;
833
+ }
834
+
835
+ .prose ol[type="A"] {
836
+ --list-counter-style: upper-alpha;
837
+ }
838
+
839
+ .prose ol[type="a"] {
840
+ --list-counter-style: lower-alpha;
841
+ }
842
+
843
+ .prose ol[type="A" s] {
844
+ --list-counter-style: upper-alpha;
845
+ }
846
+
847
+ .prose ol[type="a" s] {
848
+ --list-counter-style: lower-alpha;
849
+ }
850
+
851
+ .prose ol[type="I"] {
852
+ --list-counter-style: upper-roman;
853
+ }
854
+
855
+ .prose ol[type="i"] {
856
+ --list-counter-style: lower-roman;
857
+ }
858
+
859
+ .prose ol[type="I" s] {
860
+ --list-counter-style: upper-roman;
861
+ }
862
+
863
+ .prose ol[type="i" s] {
864
+ --list-counter-style: lower-roman;
865
+ }
866
+
867
+ .prose ol[type="1"] {
868
+ --list-counter-style: decimal;
869
+ }
870
+
871
+ .prose ol > li {
872
+ position: relative;
873
+ padding-left: 1.75em;
874
+ }
875
+
876
+ .prose ol > li::before {
877
+ content: counter(list-item, var(--list-counter-style, decimal)) ".";
878
+ position: absolute;
879
+ font-weight: 400;
880
+ color: #6b7280;
881
+ left: 0;
882
+ }
883
+
884
+ .prose ul > li {
885
+ position: relative;
886
+ padding-left: 1.75em;
887
+ }
888
+
889
+ .prose ul > li::before {
890
+ content: "";
891
+ position: absolute;
892
+ background-color: #d1d5db;
893
+ border-radius: 50%;
894
+ width: 0.375em;
895
+ height: 0.375em;
896
+ top: calc(0.875em - 0.1875em);
897
+ left: 0.25em;
898
+ }
899
+
900
+ .prose hr {
901
+ border-color: #e5e7eb;
902
+ border-top-width: 1px;
903
+ margin-top: 3em;
904
+ margin-bottom: 3em;
905
+ }
906
+
907
+ .prose blockquote {
908
+ font-weight: 500;
909
+ font-style: italic;
910
+ color: #111827;
911
+ border-left-width: 0.25rem;
912
+ border-left-color: #e5e7eb;
913
+ quotes: "\201C""\201D""\2018""\2019";
914
+ margin-top: 1.6em;
915
+ margin-bottom: 1.6em;
916
+ padding-left: 1em;
917
+ }
918
+
919
+ .prose blockquote p:first-of-type::before {
920
+ content: open-quote;
921
+ }
922
+
923
+ .prose blockquote p:last-of-type::after {
924
+ content: close-quote;
925
+ }
926
+
927
+ .prose h1 {
928
+ color: #111827;
929
+ font-weight: 800;
930
+ font-size: 2.25em;
931
+ margin-top: 0;
932
+ margin-bottom: 0.8888889em;
933
+ line-height: 1.1111111;
934
+ }
935
+
936
+ .prose h2 {
937
+ color: #111827;
938
+ font-weight: 700;
939
+ font-size: 1.5em;
940
+ margin-top: 2em;
941
+ margin-bottom: 1em;
942
+ line-height: 1.3333333;
943
+ }
944
+
945
+ .prose h3 {
946
+ color: #111827;
947
+ font-weight: 600;
948
+ font-size: 1.25em;
949
+ margin-top: 1.6em;
950
+ margin-bottom: 0.6em;
951
+ line-height: 1.6;
952
+ }
953
+
954
+ .prose h4 {
955
+ color: #111827;
956
+ font-weight: 600;
957
+ margin-top: 1.5em;
958
+ margin-bottom: 0.5em;
959
+ line-height: 1.5;
960
+ }
961
+
962
+ .prose figure figcaption {
963
+ color: #6b7280;
964
+ font-size: 0.875em;
965
+ line-height: 1.4285714;
966
+ margin-top: 0.8571429em;
967
+ }
968
+
969
+ .prose code {
970
+ color: #111827;
971
+ font-weight: 600;
972
+ font-size: 0.875em;
973
+ }
974
+
975
+ .prose code::before {
976
+ content: "`";
977
+ }
978
+
979
+ .prose code::after {
980
+ content: "`";
981
+ }
982
+
983
+ .prose a code {
984
+ color: #111827;
985
+ }
986
+
987
+ .prose pre {
988
+ color: #e5e7eb;
989
+ background-color: #1f2937;
990
+ overflow-x: auto;
991
+ font-size: 0.875em;
992
+ line-height: 1.7142857;
993
+ margin-top: 1.7142857em;
994
+ margin-bottom: 1.7142857em;
995
+ border-radius: 0.375rem;
996
+ padding-top: 0.8571429em;
997
+ padding-right: 1.1428571em;
998
+ padding-bottom: 0.8571429em;
999
+ padding-left: 1.1428571em;
1000
+ }
1001
+
1002
+ .prose pre code {
1003
+ background-color: transparent;
1004
+ border-width: 0;
1005
+ border-radius: 0;
1006
+ padding: 0;
1007
+ font-weight: 400;
1008
+ color: inherit;
1009
+ font-size: inherit;
1010
+ font-family: inherit;
1011
+ line-height: inherit;
1012
+ }
1013
+
1014
+ .prose pre code::before {
1015
+ content: none;
1016
+ }
1017
+
1018
+ .prose pre code::after {
1019
+ content: none;
1020
+ }
1021
+
1022
+ .prose table {
1023
+ width: 100%;
1024
+ table-layout: auto;
1025
+ text-align: left;
1026
+ margin-top: 2em;
1027
+ margin-bottom: 2em;
1028
+ font-size: 0.875em;
1029
+ line-height: 1.7142857;
1030
+ }
1031
+
1032
+ .prose thead {
1033
+ color: #111827;
1034
+ font-weight: 600;
1035
+ border-bottom-width: 1px;
1036
+ border-bottom-color: #d1d5db;
1037
+ }
1038
+
1039
+ .prose thead th {
1040
+ vertical-align: bottom;
1041
+ padding-right: 0.5714286em;
1042
+ padding-bottom: 0.5714286em;
1043
+ padding-left: 0.5714286em;
1044
+ }
1045
+
1046
+ .prose tbody tr {
1047
+ border-bottom-width: 1px;
1048
+ border-bottom-color: #e5e7eb;
1049
+ }
1050
+
1051
+ .prose tbody tr:last-child {
1052
+ border-bottom-width: 0;
1053
+ }
1054
+
1055
+ .prose tbody td {
1056
+ vertical-align: top;
1057
+ padding-top: 0.5714286em;
1058
+ padding-right: 0.5714286em;
1059
+ padding-bottom: 0.5714286em;
1060
+ padding-left: 0.5714286em;
1061
+ }
1062
+
1063
+ .prose {
1064
+ font-size: 1rem;
1065
+ line-height: 1.75;
1066
+ }
1067
+
1068
+ .prose p {
1069
+ margin-top: 1.25em;
1070
+ margin-bottom: 1.25em;
1071
+ }
1072
+
1073
+ .prose img {
1074
+ margin-top: 2em;
1075
+ margin-bottom: 2em;
1076
+ }
1077
+
1078
+ .prose video {
1079
+ margin-top: 2em;
1080
+ margin-bottom: 2em;
1081
+ }
1082
+
1083
+ .prose figure {
1084
+ margin-top: 2em;
1085
+ margin-bottom: 2em;
1086
+ }
1087
+
1088
+ .prose figure > * {
1089
+ margin-top: 0;
1090
+ margin-bottom: 0;
1091
+ }
1092
+
1093
+ .prose h2 code {
1094
+ font-size: 0.875em;
1095
+ }
1096
+
1097
+ .prose h3 code {
1098
+ font-size: 0.9em;
1099
+ }
1100
+
1101
+ .prose ol {
1102
+ margin-top: 1.25em;
1103
+ margin-bottom: 1.25em;
1104
+ }
1105
+
1106
+ .prose ul {
1107
+ margin-top: 1.25em;
1108
+ margin-bottom: 1.25em;
1109
+ }
1110
+
1111
+ .prose li {
1112
+ margin-top: 0.5em;
1113
+ margin-bottom: 0.5em;
1114
+ }
1115
+
1116
+ .prose > ul > li p {
1117
+ margin-top: 0.75em;
1118
+ margin-bottom: 0.75em;
1119
+ }
1120
+
1121
+ .prose > ul > li > *:first-child {
1122
+ margin-top: 1.25em;
1123
+ }
1124
+
1125
+ .prose > ul > li > *:last-child {
1126
+ margin-bottom: 1.25em;
1127
+ }
1128
+
1129
+ .prose > ol > li > *:first-child {
1130
+ margin-top: 1.25em;
1131
+ }
1132
+
1133
+ .prose > ol > li > *:last-child {
1134
+ margin-bottom: 1.25em;
1135
+ }
1136
+
1137
+ .prose ul ul, .prose ul ol, .prose ol ul, .prose ol ol {
1138
+ margin-top: 0.75em;
1139
+ margin-bottom: 0.75em;
1140
+ }
1141
+
1142
+ .prose hr + * {
1143
+ margin-top: 0;
1144
+ }
1145
+
1146
+ .prose h2 + * {
1147
+ margin-top: 0;
1148
+ }
1149
+
1150
+ .prose h3 + * {
1151
+ margin-top: 0;
1152
+ }
1153
+
1154
+ .prose h4 + * {
1155
+ margin-top: 0;
1156
+ }
1157
+
1158
+ .prose thead th:first-child {
1159
+ padding-left: 0;
1160
+ }
1161
+
1162
+ .prose thead th:last-child {
1163
+ padding-right: 0;
1164
+ }
1165
+
1166
+ .prose tbody td:first-child {
1167
+ padding-left: 0;
1168
+ }
1169
+
1170
+ .prose tbody td:last-child {
1171
+ padding-right: 0;
1172
+ }
1173
+
1174
+ .prose > :first-child {
1175
+ margin-top: 0;
1176
+ }
1177
+
1178
+ .prose > :last-child {
1179
+ margin-bottom: 0;
1180
+ }
1181
+
1182
+ .prose-sm {
1183
+ font-size: 0.875rem;
1184
+ line-height: 1.7142857;
1185
+ }
1186
+
1187
+ .prose-sm p {
1188
+ margin-top: 1.1428571em;
1189
+ margin-bottom: 1.1428571em;
1190
+ }
1191
+
1192
+ .prose-sm [class~="lead"] {
1193
+ font-size: 1.2857143em;
1194
+ line-height: 1.5555556;
1195
+ margin-top: 0.8888889em;
1196
+ margin-bottom: 0.8888889em;
1197
+ }
1198
+
1199
+ .prose-sm blockquote {
1200
+ margin-top: 1.3333333em;
1201
+ margin-bottom: 1.3333333em;
1202
+ padding-left: 1.1111111em;
1203
+ }
1204
+
1205
+ .prose-sm h1 {
1206
+ font-size: 2.1428571em;
1207
+ margin-top: 0;
1208
+ margin-bottom: 0.8em;
1209
+ line-height: 1.2;
1210
+ }
1211
+
1212
+ .prose-sm h2 {
1213
+ font-size: 1.4285714em;
1214
+ margin-top: 1.6em;
1215
+ margin-bottom: 0.8em;
1216
+ line-height: 1.4;
1217
+ }
1218
+
1219
+ .prose-sm h3 {
1220
+ font-size: 1.2857143em;
1221
+ margin-top: 1.5555556em;
1222
+ margin-bottom: 0.4444444em;
1223
+ line-height: 1.5555556;
1224
+ }
1225
+
1226
+ .prose-sm h4 {
1227
+ margin-top: 1.4285714em;
1228
+ margin-bottom: 0.5714286em;
1229
+ line-height: 1.4285714;
1230
+ }
1231
+
1232
+ .prose-sm img {
1233
+ margin-top: 1.7142857em;
1234
+ margin-bottom: 1.7142857em;
1235
+ }
1236
+
1237
+ .prose-sm video {
1238
+ margin-top: 1.7142857em;
1239
+ margin-bottom: 1.7142857em;
1240
+ }
1241
+
1242
+ .prose-sm figure {
1243
+ margin-top: 1.7142857em;
1244
+ margin-bottom: 1.7142857em;
1245
+ }
1246
+
1247
+ .prose-sm figure > * {
1248
+ margin-top: 0;
1249
+ margin-bottom: 0;
1250
+ }
1251
+
1252
+ .prose-sm figure figcaption {
1253
+ font-size: 0.8571429em;
1254
+ line-height: 1.3333333;
1255
+ margin-top: 0.6666667em;
1256
+ }
1257
+
1258
+ .prose-sm code {
1259
+ font-size: 0.8571429em;
1260
+ }
1261
+
1262
+ .prose-sm h2 code {
1263
+ font-size: 0.9em;
1264
+ }
1265
+
1266
+ .prose-sm h3 code {
1267
+ font-size: 0.8888889em;
1268
+ }
1269
+
1270
+ .prose-sm pre {
1271
+ font-size: 0.8571429em;
1272
+ line-height: 1.6666667;
1273
+ margin-top: 1.6666667em;
1274
+ margin-bottom: 1.6666667em;
1275
+ border-radius: 0.25rem;
1276
+ padding-top: 0.6666667em;
1277
+ padding-right: 1em;
1278
+ padding-bottom: 0.6666667em;
1279
+ padding-left: 1em;
1280
+ }
1281
+
1282
+ .prose-sm ol {
1283
+ margin-top: 1.1428571em;
1284
+ margin-bottom: 1.1428571em;
1285
+ }
1286
+
1287
+ .prose-sm ul {
1288
+ margin-top: 1.1428571em;
1289
+ margin-bottom: 1.1428571em;
1290
+ }
1291
+
1292
+ .prose-sm li {
1293
+ margin-top: 0.2857143em;
1294
+ margin-bottom: 0.2857143em;
1295
+ }
1296
+
1297
+ .prose-sm ol > li {
1298
+ padding-left: 1.5714286em;
1299
+ }
1300
+
1301
+ .prose-sm ol > li::before {
1302
+ left: 0;
1303
+ }
1304
+
1305
+ .prose-sm ul > li {
1306
+ padding-left: 1.5714286em;
1307
+ }
1308
+
1309
+ .prose-sm ul > li::before {
1310
+ height: 0.3571429em;
1311
+ width: 0.3571429em;
1312
+ top: calc(0.8571429em - 0.1785714em);
1313
+ left: 0.2142857em;
1314
+ }
1315
+
1316
+ .prose-sm > ul > li p {
1317
+ margin-top: 0.5714286em;
1318
+ margin-bottom: 0.5714286em;
1319
+ }
1320
+
1321
+ .prose-sm > ul > li > *:first-child {
1322
+ margin-top: 1.1428571em;
1323
+ }
1324
+
1325
+ .prose-sm > ul > li > *:last-child {
1326
+ margin-bottom: 1.1428571em;
1327
+ }
1328
+
1329
+ .prose-sm > ol > li > *:first-child {
1330
+ margin-top: 1.1428571em;
1331
+ }
1332
+
1333
+ .prose-sm > ol > li > *:last-child {
1334
+ margin-bottom: 1.1428571em;
1335
+ }
1336
+
1337
+ .prose-sm ul ul, .prose-sm ul ol, .prose-sm ol ul, .prose-sm ol ol {
1338
+ margin-top: 0.5714286em;
1339
+ margin-bottom: 0.5714286em;
1340
+ }
1341
+
1342
+ .prose-sm hr {
1343
+ margin-top: 2.8571429em;
1344
+ margin-bottom: 2.8571429em;
1345
+ }
1346
+
1347
+ .prose-sm hr + * {
1348
+ margin-top: 0;
1349
+ }
1350
+
1351
+ .prose-sm h2 + * {
1352
+ margin-top: 0;
1353
+ }
1354
+
1355
+ .prose-sm h3 + * {
1356
+ margin-top: 0;
1357
+ }
1358
+
1359
+ .prose-sm h4 + * {
1360
+ margin-top: 0;
1361
+ }
1362
+
1363
+ .prose-sm table {
1364
+ font-size: 0.8571429em;
1365
+ line-height: 1.5;
1366
+ }
1367
+
1368
+ .prose-sm thead th {
1369
+ padding-right: 1em;
1370
+ padding-bottom: 0.6666667em;
1371
+ padding-left: 1em;
1372
+ }
1373
+
1374
+ .prose-sm thead th:first-child {
1375
+ padding-left: 0;
1376
+ }
1377
+
1378
+ .prose-sm thead th:last-child {
1379
+ padding-right: 0;
1380
+ }
1381
+
1382
+ .prose-sm tbody td {
1383
+ padding-top: 0.6666667em;
1384
+ padding-right: 1em;
1385
+ padding-bottom: 0.6666667em;
1386
+ padding-left: 1em;
1387
+ }
1388
+
1389
+ .prose-sm tbody td:first-child {
1390
+ padding-left: 0;
1391
+ }
1392
+
1393
+ .prose-sm tbody td:last-child {
1394
+ padding-right: 0;
1395
+ }
1396
+
1397
+ .prose-sm > :first-child {
1398
+ margin-top: 0;
1399
+ }
1400
+
1401
+ .prose-sm > :last-child {
1402
+ margin-bottom: 0;
1403
+ }
1404
+
1405
+ .pointer-events-none {
1406
+ pointer-events: none;
1407
+ }
1408
+
1409
+ .absolute {
1410
+ position: absolute;
1411
+ }
1412
+
1413
+ .relative {
1414
+ position: relative;
1415
+ }
1416
+
1417
+ .inset-0 {
1418
+ top: 0px;
1419
+ right: 0px;
1420
+ bottom: 0px;
1421
+ left: 0px;
1422
+ }
1423
+
1424
+ .inset-y-0 {
1425
+ top: 0px;
1426
+ bottom: 0px;
1427
+ }
1428
+
1429
+ .left-0 {
1430
+ left: 0px;
1431
+ }
1432
+
1433
+ .right-0 {
1434
+ right: 0px;
1435
+ }
1436
+
1437
+ .top-0 {
1438
+ top: 0px;
1439
+ }
1440
+
1441
+ .bottom-0 {
1442
+ bottom: 0px;
1443
+ }
1444
+
1445
+ .top-1\/2 {
1446
+ top: 50%;
1447
+ }
1448
+
1449
+ .right-2 {
1450
+ right: 0.5rem;
1451
+ }
1452
+
1453
+ .z-10 {
1454
+ z-index: 10;
1455
+ }
1456
+
1457
+ .mx-auto {
1458
+ margin-left: auto;
1459
+ margin-right: auto;
1460
+ }
1461
+
1462
+ .-mx-px {
1463
+ margin-left: -1px;
1464
+ margin-right: -1px;
1465
+ }
1466
+
1467
+ .mt-4 {
1468
+ margin-top: 1rem;
1469
+ }
1470
+
1471
+ .mt-3 {
1472
+ margin-top: 0.75rem;
1473
+ }
1474
+
1475
+ .mt-2 {
1476
+ margin-top: 0.5rem;
1477
+ }
1478
+
1479
+ .ml-2 {
1480
+ margin-left: 0.5rem;
1481
+ }
1482
+
1483
+ .ml-auto {
1484
+ margin-left: auto;
1485
+ }
1486
+
1487
+ .-mb-px {
1488
+ margin-bottom: -1px;
1489
+ }
1490
+
1491
+ .mr-1 {
1492
+ margin-right: 0.25rem;
1493
+ }
1494
+
1495
+ .mr-1\.5 {
1496
+ margin-right: 0.375rem;
1497
+ }
1498
+
1499
+ .mb-1 {
1500
+ margin-bottom: 0.25rem;
1501
+ }
1502
+
1503
+ .block {
1504
+ display: block;
1505
+ }
1506
+
1507
+ .flex {
1508
+ display: flex;
1509
+ }
1510
+
1511
+ .grid {
1512
+ display: grid;
1513
+ }
1514
+
1515
+ .hidden {
1516
+ display: none;
1517
+ }
1518
+
1519
+ .h-screen {
1520
+ height: 100vh;
1521
+ }
1522
+
1523
+ .h-10 {
1524
+ height: 2.5rem;
1525
+ }
1526
+
1527
+ .h-full {
1528
+ height: 100%;
1529
+ }
1530
+
1531
+ .h-3 {
1532
+ height: 0.75rem;
1533
+ }
1534
+
1535
+ .h-\[11px\] {
1536
+ height: 11px;
1537
+ }
1538
+
1539
+ .h-4 {
1540
+ height: 1rem;
1541
+ }
1542
+
1543
+ .h-3\.5 {
1544
+ height: 0.875rem;
1545
+ }
1546
+
1547
+ .w-full {
1548
+ width: 100%;
1549
+ }
1550
+
1551
+ .w-10 {
1552
+ width: 2.5rem;
1553
+ }
1554
+
1555
+ .w-3 {
1556
+ width: 0.75rem;
1557
+ }
1558
+
1559
+ .w-screen {
1560
+ width: 100vw;
1561
+ }
1562
+
1563
+ .w-\[9px\] {
1564
+ width: 9px;
1565
+ }
1566
+
1567
+ .w-4 {
1568
+ width: 1rem;
1569
+ }
1570
+
1571
+ .w-3\.5 {
1572
+ width: 0.875rem;
1573
+ }
1574
+
1575
+ .max-w-xs {
1576
+ max-width: 20rem;
1577
+ }
1578
+
1579
+ .max-w-full {
1580
+ max-width: 100%;
1581
+ }
1582
+
1583
+ .flex-none {
1584
+ flex: none;
1585
+ }
1586
+
1587
+ .flex-auto {
1588
+ flex: 1 1 auto;
1589
+ }
1590
+
1591
+ .-translate-y-1\/2 {
1592
+ --tw-translate-y: -50%;
1593
+ transform: var(--tw-transform);
1594
+ }
1595
+
1596
+ .-translate-x-1\/2 {
1597
+ --tw-translate-x: -50%;
1598
+ transform: var(--tw-transform);
1599
+ }
1600
+
1601
+ .transform {
1602
+ transform: var(--tw-transform);
1603
+ }
1604
+
1605
+ .cursor-\[row-resize\] {
1606
+ cursor: row-resize;
1607
+ }
1608
+
1609
+ .cursor-\[col-resize\] {
1610
+ cursor: col-resize;
1611
+ }
1612
+
1613
+ .cursor-\[ns-resize\] {
1614
+ cursor: ns-resize;
1615
+ }
1616
+
1617
+ .cursor-auto {
1618
+ cursor: auto;
1619
+ }
1620
+
1621
+ .cursor-pointer {
1622
+ cursor: pointer;
1623
+ }
1624
+
1625
+ .select-none {
1626
+ -webkit-user-select: none;
1627
+ -moz-user-select: none;
1628
+ -ms-user-select: none;
1629
+ user-select: none;
1630
+ }
1631
+
1632
+ .flex-col {
1633
+ flex-direction: column;
1634
+ }
1635
+
1636
+ .items-center {
1637
+ align-items: center;
1638
+ }
1639
+
1640
+ .justify-center {
1641
+ justify-content: center;
1642
+ }
1643
+
1644
+ .space-x-1 > :not([hidden]) ~ :not([hidden]) {
1645
+ --tw-space-x-reverse: 0;
1646
+ margin-right: calc(0.25rem * var(--tw-space-x-reverse));
1647
+ margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
1648
+ }
1649
+
1650
+ .space-x-8 > :not([hidden]) ~ :not([hidden]) {
1651
+ --tw-space-x-reverse: 0;
1652
+ margin-right: calc(2rem * var(--tw-space-x-reverse));
1653
+ margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));
1654
+ }
1655
+
1656
+ .overflow-auto {
1657
+ overflow: auto;
1658
+ }
1659
+
1660
+ .overflow-hidden {
1661
+ overflow: hidden;
1662
+ }
1663
+
1664
+ .truncate {
1665
+ overflow: hidden;
1666
+ text-overflow: ellipsis;
1667
+ white-space: nowrap;
1668
+ }
1669
+
1670
+ .whitespace-nowrap {
1671
+ white-space: nowrap;
1672
+ }
1673
+
1674
+ .rounded-bl-md {
1675
+ border-bottom-left-radius: 0.375rem;
1676
+ }
1677
+
1678
+ .border-0 {
1679
+ border-width: 0px;
1680
+ }
1681
+
1682
+ .border-b {
1683
+ border-bottom-width: 1px;
1684
+ }
1685
+
1686
+ .border-t {
1687
+ border-top-width: 1px;
1688
+ }
1689
+
1690
+ .border-r {
1691
+ border-right-width: 1px;
1692
+ }
1693
+
1694
+ .border-l {
1695
+ border-left-width: 1px;
1696
+ }
1697
+
1698
+ .border-b-2 {
1699
+ border-bottom-width: 2px;
1700
+ }
1701
+
1702
+ .border-gray-300 {
1703
+ --tw-border-opacity: 1;
1704
+ border-color: rgba(209, 213, 219, var(--tw-border-opacity));
1705
+ }
1706
+
1707
+ .border-gray-200 {
1708
+ --tw-border-opacity: 1;
1709
+ border-color: rgba(229, 231, 235, var(--tw-border-opacity));
1710
+ }
1711
+
1712
+ .border-indigo-400 {
1713
+ --tw-border-opacity: 1;
1714
+ border-color: rgba(129, 140, 248, var(--tw-border-opacity));
1715
+ }
1716
+
1717
+ .border-transparent {
1718
+ border-color: transparent;
1719
+ }
1720
+
1721
+ .bg-white {
1722
+ --tw-bg-opacity: 1;
1723
+ background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
1724
+ }
1725
+
1726
+ .bg-gray-50 {
1727
+ --tw-bg-opacity: 1;
1728
+ background-color: rgba(249, 250, 251, var(--tw-bg-opacity));
1729
+ }
1730
+
1731
+ .bg-transparent {
1732
+ background-color: transparent;
1733
+ }
1734
+
1735
+ .bg-gray-100 {
1736
+ --tw-bg-opacity: 1;
1737
+ background-color: rgba(243, 244, 246, var(--tw-bg-opacity));
1738
+ }
1739
+
1740
+ .\!bg-indigo-100 {
1741
+ --tw-bg-opacity: 1 !important;
1742
+ background-color: rgba(224, 231, 255, var(--tw-bg-opacity)) !important;
1743
+ }
1744
+
1745
+ .p-4 {
1746
+ padding: 1rem;
1747
+ }
1748
+
1749
+ .p-1\.5 {
1750
+ padding: 0.375rem;
1751
+ }
1752
+
1753
+ .p-1 {
1754
+ padding: 0.25rem;
1755
+ }
1756
+
1757
+ .py-2 {
1758
+ padding-top: 0.5rem;
1759
+ padding-bottom: 0.5rem;
1760
+ }
1761
+
1762
+ .px-4 {
1763
+ padding-left: 1rem;
1764
+ padding-right: 1rem;
1765
+ }
1766
+
1767
+ .px-1 {
1768
+ padding-left: 0.25rem;
1769
+ padding-right: 0.25rem;
1770
+ }
1771
+
1772
+ .py-1 {
1773
+ padding-top: 0.25rem;
1774
+ padding-bottom: 0.25rem;
1775
+ }
1776
+
1777
+ .py-\[4px\] {
1778
+ padding-top: 4px;
1779
+ padding-bottom: 4px;
1780
+ }
1781
+
1782
+ .py-\[3px\] {
1783
+ padding-top: 3px;
1784
+ padding-bottom: 3px;
1785
+ }
1786
+
1787
+ .pr-4 {
1788
+ padding-right: 1rem;
1789
+ }
1790
+
1791
+ .pr-3 {
1792
+ padding-right: 0.75rem;
1793
+ }
1794
+
1795
+ .text-left {
1796
+ text-align: left;
1797
+ }
1798
+
1799
+ .text-center {
1800
+ text-align: center;
1801
+ }
1802
+
1803
+ .font-monospace {
1804
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
1805
+ }
1806
+
1807
+ .font-sans {
1808
+ font-family: "Nunito Sans", -apple-system, ".SFNSText-Regular", "San Francisco", BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
1809
+ }
1810
+
1811
+ .text-base {
1812
+ font-size: 1rem;
1813
+ line-height: 1.5rem;
1814
+ }
1815
+
1816
+ .text-sm {
1817
+ font-size: 0.875rem;
1818
+ line-height: 1.25rem;
1819
+ }
1820
+
1821
+ .text-xs {
1822
+ font-size: 0.75rem;
1823
+ line-height: 1rem;
1824
+ }
1825
+
1826
+ .font-bold {
1827
+ font-weight: 700;
1828
+ }
1829
+
1830
+ .italic {
1831
+ font-style: italic;
1832
+ }
1833
+
1834
+ .text-gray-300 {
1835
+ --tw-text-opacity: 1;
1836
+ color: rgba(209, 213, 219, var(--tw-text-opacity));
1837
+ }
1838
+
1839
+ .text-gray-400 {
1840
+ --tw-text-opacity: 1;
1841
+ color: rgba(156, 163, 175, var(--tw-text-opacity));
1842
+ }
1843
+
1844
+ .text-red-300 {
1845
+ --tw-text-opacity: 1;
1846
+ color: rgba(252, 165, 165, var(--tw-text-opacity));
1847
+ }
1848
+
1849
+ .text-gray-700 {
1850
+ --tw-text-opacity: 1;
1851
+ color: rgba(55, 65, 81, var(--tw-text-opacity));
1852
+ }
1853
+
1854
+ .text-gray-500 {
1855
+ --tw-text-opacity: 1;
1856
+ color: rgba(107, 114, 128, var(--tw-text-opacity));
1857
+ }
1858
+
1859
+ .text-gray-800 {
1860
+ --tw-text-opacity: 1;
1861
+ color: rgba(31, 41, 55, var(--tw-text-opacity));
1862
+ }
1863
+
1864
+ .text-gray-600 {
1865
+ --tw-text-opacity: 1;
1866
+ color: rgba(75, 85, 99, var(--tw-text-opacity));
1867
+ }
1868
+
1869
+ .\!text-gray-300 {
1870
+ --tw-text-opacity: 1 !important;
1871
+ color: rgba(209, 213, 219, var(--tw-text-opacity)) !important;
1872
+ }
1873
+
1874
+ .text-indigo-500 {
1875
+ --tw-text-opacity: 1;
1876
+ color: rgba(99, 102, 241, var(--tw-text-opacity));
1877
+ }
1878
+
1879
+ .text-gray-900 {
1880
+ --tw-text-opacity: 1;
1881
+ color: rgba(17, 24, 39, var(--tw-text-opacity));
1882
+ }
1883
+
1884
+ .underline {
1885
+ text-decoration: underline;
1886
+ }
1887
+
1888
+ .antialiased {
1889
+ -webkit-font-smoothing: antialiased;
1890
+ -moz-osx-font-smoothing: grayscale;
1891
+ }
1892
+
1893
+ .opacity-0 {
1894
+ opacity: 0;
1895
+ }
1896
+
1897
+ .opacity-50 {
1898
+ opacity: 0.5;
1899
+ }
1900
+
1901
+ .outline-none {
1902
+ outline: 2px solid transparent;
1903
+ outline-offset: 2px;
1904
+ }
1905
+
1906
+ .filter {
1907
+ filter: var(--tw-filter);
1908
+ }
1909
+
1910
+ .transition {
1911
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
1912
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
1913
+ transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
1914
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
1915
+ transition-duration: 150ms;
1916
+ }
1917
+
1918
+ .tippy-box[data-animation=fade][data-state=hidden]{
1919
+ opacity:0
1920
+ }
1921
+
1922
+ [data-tippy-root]{
1923
+ max-width:calc(100vw - 10px)
1924
+ }
1925
+
1926
+ .tippy-box{
1927
+ position:relative;
1928
+ background-color:#333;
1929
+ color:#fff;
1930
+ border-radius:4px;
1931
+ font-size:14px;
1932
+ line-height:1.4;
1933
+ outline:0;
1934
+ transition-property:transform,visibility,opacity
1935
+ }
1936
+
1937
+ .tippy-box[data-placement^=top]>.tippy-arrow{
1938
+ bottom:0
1939
+ }
1940
+
1941
+ .tippy-box[data-placement^=top]>.tippy-arrow:before{
1942
+ bottom:-7px;
1943
+ left:0;
1944
+ border-width:8px 8px 0;
1945
+ border-top-color:initial;
1946
+ transform-origin:center top
1947
+ }
1948
+
1949
+ .tippy-box[data-placement^=bottom]>.tippy-arrow{
1950
+ top:0
1951
+ }
1952
+
1953
+ .tippy-box[data-placement^=bottom]>.tippy-arrow:before{
1954
+ top:-7px;
1955
+ left:0;
1956
+ border-width:0 8px 8px;
1957
+ border-bottom-color:initial;
1958
+ transform-origin:center bottom
1959
+ }
1960
+
1961
+ .tippy-box[data-placement^=left]>.tippy-arrow{
1962
+ right:0
1963
+ }
1964
+
1965
+ .tippy-box[data-placement^=left]>.tippy-arrow:before{
1966
+ border-width:8px 0 8px 8px;
1967
+ border-left-color:initial;
1968
+ right:-7px;
1969
+ transform-origin:center left
1970
+ }
1971
+
1972
+ .tippy-box[data-placement^=right]>.tippy-arrow{
1973
+ left:0
1974
+ }
1975
+
1976
+ .tippy-box[data-placement^=right]>.tippy-arrow:before{
1977
+ left:-7px;
1978
+ border-width:8px 8px 8px 0;
1979
+ border-right-color:initial;
1980
+ transform-origin:center right
1981
+ }
1982
+
1983
+ .tippy-box[data-inertia][data-state=visible]{
1984
+ transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)
1985
+ }
1986
+
1987
+ .tippy-arrow{
1988
+ width:16px;
1989
+ height:16px;
1990
+ color:#333
1991
+ }
1992
+
1993
+ .tippy-arrow:before{
1994
+ content:"";
1995
+ position:absolute;
1996
+ border-color:transparent;
1997
+ border-style:solid
1998
+ }
1999
+
2000
+ .tippy-content{
2001
+ position:relative;
2002
+ padding:5px 9px;
2003
+ z-index:1
2004
+ }
2005
+
2006
+ /*
2007
+ * GitHub style for Pygments
2008
+ * Courtesy of GitHub.com
2009
+ */
2010
+
2011
+ .highlight .hll {
2012
+ background-color: #f8f8f8;
2013
+ border: 1px solid #ccc;
2014
+ padding: 6px 10px;
2015
+ border-radius: 3px;
2016
+ }
2017
+
2018
+ .highlight .c {
2019
+ color: #999988;
2020
+ font-style: italic;
2021
+ }
2022
+
2023
+ .highlight .err {
2024
+ color: #a61717;
2025
+ background-color: #e3d2d2;
2026
+ }
2027
+
2028
+ .highlight .k {
2029
+ font-weight: bold;
2030
+ }
2031
+
2032
+ .highlight .o {
2033
+ font-weight: bold;
2034
+ }
2035
+
2036
+ .highlight .cm {
2037
+ color: #999988;
2038
+ font-style: italic;
2039
+ }
2040
+
2041
+ .highlight .cp {
2042
+ color: #999999;
2043
+ font-weight: bold;
2044
+ }
2045
+
2046
+ .highlight .c1 {
2047
+ color: #999988;
2048
+ font-style: italic;
2049
+ }
2050
+
2051
+ .highlight .cs {
2052
+ color: #999999;
2053
+ font-weight: bold;
2054
+ font-style: italic;
2055
+ }
2056
+
2057
+ .highlight .gd {
2058
+ color: #000000;
2059
+ background-color: #ffdddd;
2060
+ }
2061
+
2062
+ .highlight .gd .x {
2063
+ color: #000000;
2064
+ background-color: #ffaaaa;
2065
+ }
2066
+
2067
+ .highlight .ge {
2068
+ font-style: italic;
2069
+ }
2070
+
2071
+ .highlight .gr {
2072
+ color: #aa0000;
2073
+ }
2074
+
2075
+ .highlight .gh {
2076
+ color: #999999;
2077
+ }
2078
+
2079
+ .highlight .gi {
2080
+ color: #000000;
2081
+ background-color: #ddffdd;
2082
+ }
2083
+
2084
+ .highlight .gi .x {
2085
+ color: #000000;
2086
+ background-color: #aaffaa;
2087
+ }
2088
+
2089
+ .highlight .go {
2090
+ color: #888888;
2091
+ }
2092
+
2093
+ .highlight .gp {
2094
+ color: #555555;
2095
+ }
2096
+
2097
+ .highlight .gs {
2098
+ font-weight: bold;
2099
+ }
2100
+
2101
+ .highlight .gu {
2102
+ color: #800080;
2103
+ font-weight: bold;
2104
+ }
2105
+
2106
+ .highlight .gt {
2107
+ color: #aa0000;
2108
+ }
2109
+
2110
+ .highlight .kc {
2111
+ font-weight: bold;
2112
+ }
2113
+
2114
+ .highlight .kd {
2115
+ font-weight: bold;
2116
+ }
2117
+
2118
+ .highlight .kn {
2119
+ font-weight: bold;
2120
+ }
2121
+
2122
+ .highlight .kp {
2123
+ font-weight: bold;
2124
+ }
2125
+
2126
+ .highlight .kr {
2127
+ font-weight: bold;
2128
+ }
2129
+
2130
+ .highlight .kt {
2131
+ color: #445588;
2132
+ font-weight: bold;
2133
+ }
2134
+
2135
+ .highlight .m {
2136
+ color: #009999;
2137
+ }
2138
+
2139
+ .highlight .s {
2140
+ color: #dd1144;
2141
+ }
2142
+
2143
+ .highlight .n {
2144
+ color: #333333;
2145
+ }
2146
+
2147
+ .highlight .na {
2148
+ color: teal;
2149
+ }
2150
+
2151
+ .highlight .nb {
2152
+ color: #0086b3;
2153
+ }
2154
+
2155
+ .highlight .nc {
2156
+ color: #445588;
2157
+ font-weight: bold;
2158
+ }
2159
+
2160
+ .highlight .no {
2161
+ color: teal;
2162
+ }
2163
+
2164
+ .highlight .ni {
2165
+ color: purple;
2166
+ }
2167
+
2168
+ .highlight .ne {
2169
+ color: #990000;
2170
+ font-weight: bold;
2171
+ }
2172
+
2173
+ .highlight .nf {
2174
+ color: #990000;
2175
+ font-weight: bold;
2176
+ }
2177
+
2178
+ .highlight .nn {
2179
+ color: #555555;
2180
+ }
2181
+
2182
+ .highlight .nt {
2183
+ color: navy;
2184
+ }
2185
+
2186
+ .highlight .nv {
2187
+ color: teal;
2188
+ }
2189
+
2190
+ .highlight .ow {
2191
+ font-weight: bold;
2192
+ }
2193
+
2194
+ .highlight .w {
2195
+ color: #bbbbbb;
2196
+ }
2197
+
2198
+ .highlight .mf {
2199
+ color: #009999;
2200
+ }
2201
+
2202
+ .highlight .mh {
2203
+ color: #009999;
2204
+ }
2205
+
2206
+ .highlight .mi {
2207
+ color: #009999;
2208
+ }
2209
+
2210
+ .highlight .mo {
2211
+ color: #009999;
2212
+ }
2213
+
2214
+ .highlight .sb {
2215
+ color: #dd1144;
2216
+ }
2217
+
2218
+ .highlight .sc {
2219
+ color: #dd1144;
2220
+ }
2221
+
2222
+ .highlight .sd {
2223
+ color: #dd1144;
2224
+ }
2225
+
2226
+ .highlight .s2 {
2227
+ color: #dd1144;
2228
+ }
2229
+
2230
+ .highlight .se {
2231
+ color: #dd1144;
2232
+ }
2233
+
2234
+ .highlight .sh {
2235
+ color: #dd1144;
2236
+ }
2237
+
2238
+ .highlight .si {
2239
+ color: #dd1144;
2240
+ }
2241
+
2242
+ .highlight .sx {
2243
+ color: #dd1144;
2244
+ }
2245
+
2246
+ .highlight .sr {
2247
+ color: #009926;
2248
+ }
2249
+
2250
+ .highlight .s1 {
2251
+ color: #dd1144;
2252
+ }
2253
+
2254
+ .highlight .ss {
2255
+ color: #990073;
2256
+ }
2257
+
2258
+ .highlight .bp {
2259
+ color: #999999;
2260
+ }
2261
+
2262
+ .highlight .vc {
2263
+ color: teal;
2264
+ }
2265
+
2266
+ .highlight .vg {
2267
+ color: teal;
2268
+ }
2269
+
2270
+ .highlight .vi {
2271
+ color: teal;
2272
+ }
2273
+
2274
+ .highlight .il {
2275
+ color: #009999;
2276
+ }
2277
+
2278
+ .highlight .gc {
2279
+ color: #999;
2280
+ background-color: #eaf2f5;
2281
+ }
2282
+
2283
+ .tippy-box[data-theme~="lookbook"] {
2284
+ --tw-bg-opacity: 1;
2285
+ background-color: rgba(99, 102, 241, var(--tw-bg-opacity));
2286
+ font-size: 0.75rem;
2287
+ line-height: 1rem;
2288
+ --tw-text-opacity: 1;
2289
+ color: rgba(255, 255, 255, var(--tw-text-opacity));
2290
+ opacity: 0.9;
2291
+ }
2292
+
2293
+ .tippy-box[data-theme~="lookbook"][data-placement^="top"] > .tippy-arrow::before {
2294
+ border-top-color: #6366f1;
2295
+ }
2296
+
2297
+ .tippy-box[data-theme~="lookbook"][data-placement^="bottom"] > .tippy-arrow::before {
2298
+ border-bottom-color: #6366f1;
2299
+ }
2300
+
2301
+ .tippy-box[data-theme~="lookbook"][data-placement^="left"] > .tippy-arrow::before {
2302
+ border-left-color: #6366f1;
2303
+ }
2304
+
2305
+ .tippy-box[data-theme~="lookbook"][data-placement^="right"] > .tippy-arrow::before {
2306
+ border-right-color: #6366f1;
2307
+ }
2308
+
2309
+ .hover\:border-gray-300:hover {
2310
+ --tw-border-opacity: 1;
2311
+ border-color: rgba(209, 213, 219, var(--tw-border-opacity));
2312
+ }
2313
+
2314
+ .hover\:bg-indigo-100:hover {
2315
+ --tw-bg-opacity: 1;
2316
+ background-color: rgba(224, 231, 255, var(--tw-bg-opacity));
2317
+ }
2318
+
2319
+ .hover\:bg-gray-200:hover {
2320
+ --tw-bg-opacity: 1;
2321
+ background-color: rgba(229, 231, 235, var(--tw-bg-opacity));
2322
+ }
2323
+
2324
+ .hover\:bg-opacity-20:hover {
2325
+ --tw-bg-opacity: 0.2;
2326
+ }
2327
+
2328
+ .hover\:bg-opacity-50:hover {
2329
+ --tw-bg-opacity: 0.5;
2330
+ }
2331
+
2332
+ .hover\:text-indigo-800:hover {
2333
+ --tw-text-opacity: 1;
2334
+ color: rgba(55, 48, 163, var(--tw-text-opacity));
2335
+ }
2336
+
2337
+ .hover\:text-indigo-500:hover {
2338
+ --tw-text-opacity: 1;
2339
+ color: rgba(99, 102, 241, var(--tw-text-opacity));
2340
+ }
2341
+
2342
+ .hover\:text-gray-700:hover {
2343
+ --tw-text-opacity: 1;
2344
+ color: rgba(55, 65, 81, var(--tw-text-opacity));
2345
+ }
2346
+
2347
+ .focus\:outline-none:focus {
2348
+ outline: 2px solid transparent;
2349
+ outline-offset: 2px;
2350
+ }
2351
+
2352
+ .focus\:ring-0:focus {
2353
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2354
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2355
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2356
+ }
2357
+
2358
+ .group:hover .group-hover\:text-indigo-800 {
2359
+ --tw-text-opacity: 1;
2360
+ color: rgba(55, 48, 163, var(--tw-text-opacity));
2361
+ }