lookbook 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }