lesli_babel 1.1.2 → 1.1.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8164c242dfa1ccc58035909df600d0275e0be6727b489373c3bc3330025c349c
4
- data.tar.gz: b1f4a8d43873994e7e2cc5cd773bd4029befaa781cd9bfdb75e2dd81173e03cb
3
+ metadata.gz: 1dfcb8901a8c817c290f6d737e024958fd142137084dd18f55da32a9eb1b3d6b
4
+ data.tar.gz: fa66255f94d1bedd7ef6b5d4da81ba0798d6d3ea5fd6a23a3f1dcbc5992405c8
5
5
  SHA512:
6
- metadata.gz: 473c046acfb89d09bb13b5798d88a6c8a0190b61b45c0fe5d2260f372e8e3a41163e53b7951352edde10ce6bb0e244aaa53fbb889f931b014ddddb2afd494458
7
- data.tar.gz: 056bab6d9d69bec84892a7a85c34be10464b8e5e34bb792be6bf95bc39f62aa2dde78511f5ecd281b429c9934cac312f4552fe9ae4c81b94f91ed8ba31a025dd
6
+ metadata.gz: 54e71c64d61532009dd6dd7a4db05fe7eaafeeaed490c997e1dd781f83b78ceb253acfc3586194551760f9a1b0b3cf90eb856b76f929dc24c1c119276902f8c3
7
+ data.tar.gz: 70a3c6b4e3c97b92fbc9b670248260456948d31b2392fc5e7fe89fc1f9f3a05e46e4fe4d2414d564905b0a45906ef2746acf3099eb59c44f6ccd798524dd1de7
data/Rakefile CHANGED
@@ -5,3 +5,6 @@ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
5
5
  load "rails/tasks/engine.rake"
6
6
 
7
7
  require "bundler/gem_tasks"
8
+
9
+ desc "Run engine tests through the dummy Rails application"
10
+ task test: "app:test"
@@ -1,35 +1,382 @@
1
- @charset "UTF-8";
2
- /*
3
-
4
- Lesli
5
-
6
- Copyright (c) 2026, Lesli Technologies, S. A.
7
-
8
- This program is free software: you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation, either version 3 of the License, or
11
- (at your option) any later version.
12
-
13
- This program is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with this program. If not, see http://www.gnu.org/licenses/.
20
-
21
- Lesli · Ruby on Rails SaaS Development Framework.
22
-
23
- Made with ♥ by LesliTech
24
- Building a better future, one line of code at a time.
25
-
26
- @contact hello@lesli.tech
27
- @website https://www.lesli.tech
28
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
-
30
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
- // ·
32
- */
33
- body.lesli-babel.dashboards .box {
34
- min-width: 240px;
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties;
3
+ @layer theme, utilities;
4
+ @layer theme {
5
+ :root, :host {
6
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
7
+ monospace;
8
+ --color-sky-500: oklch(68.5% 0.169 237.323);
9
+ --color-slate-100: oklch(96.8% 0.007 247.896);
10
+ --color-slate-200: oklch(92.9% 0.013 255.508);
11
+ --color-slate-400: oklch(70.4% 0.04 256.788);
12
+ --color-slate-500: oklch(55.4% 0.046 257.417);
13
+ --color-slate-600: oklch(44.6% 0.043 257.281);
14
+ --color-slate-900: oklch(20.8% 0.042 265.755);
15
+ --color-white: #fff;
16
+ --spacing: 0.25rem;
17
+ --text-xs: 0.75rem;
18
+ --text-xs--line-height: calc(1 / 0.75);
19
+ --text-sm: 0.875rem;
20
+ --text-sm--line-height: calc(1.25 / 0.875);
21
+ --text-lg: 1.125rem;
22
+ --text-lg--line-height: calc(1.75 / 1.125);
23
+ --font-weight-medium: 500;
24
+ --font-weight-semibold: 600;
25
+ --tracking-wider: 0.05em;
26
+ --radius-lg: 0.5rem;
27
+ --radius-2xl: 1rem;
28
+ --default-transition-duration: 150ms;
29
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
30
+ }
31
+ }
32
+ @layer utilities {
33
+ .my-6 {
34
+ margin-block: calc(var(--spacing) * 6);
35
+ }
36
+ .mt-1 {
37
+ margin-top: var(--spacing);
38
+ }
39
+ .mb-3 {
40
+ margin-bottom: calc(var(--spacing) * 3);
41
+ }
42
+ .flex {
43
+ display: flex;
44
+ }
45
+ .grid {
46
+ display: grid;
47
+ }
48
+ .inline-flex {
49
+ display: inline-flex;
50
+ }
51
+ .size-5 {
52
+ width: calc(var(--spacing) * 5);
53
+ height: calc(var(--spacing) * 5);
54
+ }
55
+ .h-12 {
56
+ height: calc(var(--spacing) * 12);
57
+ }
58
+ .w-16 {
59
+ width: calc(var(--spacing) * 16);
60
+ }
61
+ .max-w-full {
62
+ max-width: 100%;
63
+ }
64
+ .shrink-0 {
65
+ flex-shrink: 0;
66
+ }
67
+ .flex-col {
68
+ flex-direction: column;
69
+ }
70
+ .items-center {
71
+ align-items: center;
72
+ }
73
+ .items-start {
74
+ align-items: flex-start;
75
+ }
76
+ .justify-center {
77
+ justify-content: center;
78
+ }
79
+ .gap-2 {
80
+ gap: calc(var(--spacing) * 2);
81
+ }
82
+ .gap-5 {
83
+ gap: calc(var(--spacing) * 5);
84
+ }
85
+ .rounded-2xl {
86
+ border-radius: var(--radius-2xl);
87
+ }
88
+ .rounded-lg {
89
+ border-radius: var(--radius-lg);
90
+ }
91
+ .border {
92
+ border-style: var(--tw-border-style);
93
+ border-width: 1px;
94
+ }
95
+ .border-0 {
96
+ border-style: var(--tw-border-style);
97
+ border-width: 0px;
98
+ }
99
+ .border-t {
100
+ border-top-style: var(--tw-border-style);
101
+ border-top-width: 1px;
102
+ }
103
+ .border-slate-200 {
104
+ border-color: var(--color-slate-200);
105
+ }
106
+ .bg-white {
107
+ background-color: var(--color-white);
108
+ }
109
+ .p-5 {
110
+ padding: calc(var(--spacing) * 5);
111
+ }
112
+ .px-3 {
113
+ padding-inline: calc(var(--spacing) * 3);
114
+ }
115
+ .px-4 {
116
+ padding-inline: calc(var(--spacing) * 4);
117
+ }
118
+ .py-2 {
119
+ padding-block: calc(var(--spacing) * 2);
120
+ }
121
+ .py-6 {
122
+ padding-block: calc(var(--spacing) * 6);
123
+ }
124
+ .pt-1 {
125
+ padding-top: var(--spacing);
126
+ }
127
+ .pb-2 {
128
+ padding-bottom: calc(var(--spacing) * 2);
129
+ }
130
+ .text-center {
131
+ text-align: center;
132
+ }
133
+ .text-left {
134
+ text-align: left;
135
+ }
136
+ .font-mono {
137
+ font-family: var(--font-mono);
138
+ }
139
+ .text-lg {
140
+ font-size: var(--text-lg);
141
+ line-height: var(--tw-leading, var(--text-lg--line-height));
142
+ }
143
+ .text-sm {
144
+ font-size: var(--text-sm);
145
+ line-height: var(--tw-leading, var(--text-sm--line-height));
146
+ }
147
+ .text-xs {
148
+ font-size: var(--text-xs);
149
+ line-height: var(--tw-leading, var(--text-xs--line-height));
150
+ }
151
+ .leading-5 {
152
+ --tw-leading: calc(var(--spacing) * 5);
153
+ line-height: calc(var(--spacing) * 5);
154
+ }
155
+ .leading-none {
156
+ --tw-leading: 1;
157
+ line-height: 1;
158
+ }
159
+ .font-medium {
160
+ --tw-font-weight: var(--font-weight-medium);
161
+ font-weight: var(--font-weight-medium);
162
+ }
163
+ .font-semibold {
164
+ --tw-font-weight: var(--font-weight-semibold);
165
+ font-weight: var(--font-weight-semibold);
166
+ }
167
+ .tracking-wider {
168
+ --tw-tracking: var(--tracking-wider);
169
+ letter-spacing: var(--tracking-wider);
170
+ }
171
+ .break-all {
172
+ word-break: break-all;
173
+ }
174
+ .text-slate-400 {
175
+ color: var(--color-slate-400);
176
+ }
177
+ .text-slate-500 {
178
+ color: var(--color-slate-500);
179
+ }
180
+ .text-slate-600 {
181
+ color: var(--color-slate-600);
182
+ }
183
+ .text-slate-900 {
184
+ color: var(--color-slate-900);
185
+ }
186
+ .uppercase {
187
+ text-transform: uppercase;
188
+ }
189
+ .tabular-nums {
190
+ --tw-numeric-spacing: tabular-nums;
191
+ font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
192
+ }
193
+ .shadow-sm {
194
+ --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
195
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
196
+ }
197
+ .transition-colors {
198
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
199
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
200
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
201
+ }
202
+ @media (hover: hover) {
203
+ .group-hover\:text-slate-600:is(:where(.group):hover *) {
204
+ color: var(--color-slate-600);
205
+ }
206
+ .hover\:bg-slate-100:hover {
207
+ background-color: var(--color-slate-100);
208
+ }
209
+ .hover\:text-slate-900:hover {
210
+ color: var(--color-slate-900);
211
+ }
212
+ }
213
+ .focus-visible\:ring-2:focus-visible {
214
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
215
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
216
+ }
217
+ .focus-visible\:ring-sky-500\/40:focus-visible {
218
+ --tw-ring-color: color-mix(in srgb, oklch(68.5% 0.169 237.323) 40%, transparent);
219
+ @supports (color: color-mix(in lab, red, red)) {
220
+ --tw-ring-color: color-mix(in oklab, var(--color-sky-500) 40%, transparent);
221
+ }
222
+ }
223
+ .focus-visible\:outline-none:focus-visible {
224
+ --tw-outline-style: none;
225
+ outline-style: none;
226
+ }
227
+ @media (width >= 40rem) {
228
+ .sm\:grid-cols-2 {
229
+ grid-template-columns: repeat(2, minmax(0, 1fr));
230
+ }
231
+ .sm\:gap-6 {
232
+ gap: calc(var(--spacing) * 6);
233
+ }
234
+ .sm\:p-6 {
235
+ padding: calc(var(--spacing) * 6);
236
+ }
237
+ .sm\:py-8 {
238
+ padding-block: calc(var(--spacing) * 8);
239
+ }
240
+ }
241
+ @media (width >= 64rem) {
242
+ .lg\:grid-cols-3 {
243
+ grid-template-columns: repeat(3, minmax(0, 1fr));
244
+ }
245
+ }
246
+ @media (width >= 80rem) {
247
+ .xl\:grid-cols-4 {
248
+ grid-template-columns: repeat(4, minmax(0, 1fr));
249
+ }
250
+ }
251
+ }
252
+ @property --tw-border-style {
253
+ syntax: "*";
254
+ inherits: false;
255
+ initial-value: solid;
256
+ }
257
+ @property --tw-leading {
258
+ syntax: "*";
259
+ inherits: false;
260
+ }
261
+ @property --tw-font-weight {
262
+ syntax: "*";
263
+ inherits: false;
264
+ }
265
+ @property --tw-tracking {
266
+ syntax: "*";
267
+ inherits: false;
268
+ }
269
+ @property --tw-ordinal {
270
+ syntax: "*";
271
+ inherits: false;
272
+ }
273
+ @property --tw-slashed-zero {
274
+ syntax: "*";
275
+ inherits: false;
276
+ }
277
+ @property --tw-numeric-figure {
278
+ syntax: "*";
279
+ inherits: false;
280
+ }
281
+ @property --tw-numeric-spacing {
282
+ syntax: "*";
283
+ inherits: false;
284
+ }
285
+ @property --tw-numeric-fraction {
286
+ syntax: "*";
287
+ inherits: false;
288
+ }
289
+ @property --tw-shadow {
290
+ syntax: "*";
291
+ inherits: false;
292
+ initial-value: 0 0 #0000;
293
+ }
294
+ @property --tw-shadow-color {
295
+ syntax: "*";
296
+ inherits: false;
297
+ }
298
+ @property --tw-shadow-alpha {
299
+ syntax: "<percentage>";
300
+ inherits: false;
301
+ initial-value: 100%;
302
+ }
303
+ @property --tw-inset-shadow {
304
+ syntax: "*";
305
+ inherits: false;
306
+ initial-value: 0 0 #0000;
307
+ }
308
+ @property --tw-inset-shadow-color {
309
+ syntax: "*";
310
+ inherits: false;
311
+ }
312
+ @property --tw-inset-shadow-alpha {
313
+ syntax: "<percentage>";
314
+ inherits: false;
315
+ initial-value: 100%;
316
+ }
317
+ @property --tw-ring-color {
318
+ syntax: "*";
319
+ inherits: false;
320
+ }
321
+ @property --tw-ring-shadow {
322
+ syntax: "*";
323
+ inherits: false;
324
+ initial-value: 0 0 #0000;
325
+ }
326
+ @property --tw-inset-ring-color {
327
+ syntax: "*";
328
+ inherits: false;
329
+ }
330
+ @property --tw-inset-ring-shadow {
331
+ syntax: "*";
332
+ inherits: false;
333
+ initial-value: 0 0 #0000;
334
+ }
335
+ @property --tw-ring-inset {
336
+ syntax: "*";
337
+ inherits: false;
338
+ }
339
+ @property --tw-ring-offset-width {
340
+ syntax: "<length>";
341
+ inherits: false;
342
+ initial-value: 0px;
343
+ }
344
+ @property --tw-ring-offset-color {
345
+ syntax: "*";
346
+ inherits: false;
347
+ initial-value: #fff;
348
+ }
349
+ @property --tw-ring-offset-shadow {
350
+ syntax: "*";
351
+ inherits: false;
352
+ initial-value: 0 0 #0000;
353
+ }
354
+ @layer properties {
355
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
356
+ *, ::before, ::after, ::backdrop {
357
+ --tw-border-style: solid;
358
+ --tw-leading: initial;
359
+ --tw-font-weight: initial;
360
+ --tw-tracking: initial;
361
+ --tw-ordinal: initial;
362
+ --tw-slashed-zero: initial;
363
+ --tw-numeric-figure: initial;
364
+ --tw-numeric-spacing: initial;
365
+ --tw-numeric-fraction: initial;
366
+ --tw-shadow: 0 0 #0000;
367
+ --tw-shadow-color: initial;
368
+ --tw-shadow-alpha: 100%;
369
+ --tw-inset-shadow: 0 0 #0000;
370
+ --tw-inset-shadow-color: initial;
371
+ --tw-inset-shadow-alpha: 100%;
372
+ --tw-ring-color: initial;
373
+ --tw-ring-shadow: 0 0 #0000;
374
+ --tw-inset-ring-color: initial;
375
+ --tw-inset-ring-shadow: 0 0 #0000;
376
+ --tw-ring-inset: initial;
377
+ --tw-ring-offset-width: 0px;
378
+ --tw-ring-offset-color: #fff;
379
+ --tw-ring-offset-shadow: 0 0 #0000;
380
+ }
381
+ }
35
382
  }
@@ -12,11 +12,14 @@ module LesliBabel
12
12
  # total translations by language
13
13
  total_strings_translations = []
14
14
 
15
- Lesli.config.babel.dig(:locales).each do |locale|
15
+ Lesli.config.babel.dig(:locales).each do |locale_code, locale_name|
16
16
  total_strings_translations.push({
17
- code: locale[0],
18
- name: locale[1],
19
- total: label_service.builder.reselect(:id).where("#{locale[0]} is not null").where("#{locale[0]} != ''").count
17
+ code: locale_code,
18
+ name: locale_name,
19
+ total: label_service.builder
20
+ .reselect(:id)
21
+ .where.not(locale_code => [nil, ""])
22
+ .count
20
23
  })
21
24
  end
22
25
 
@@ -35,10 +35,6 @@ module LesliBabel
35
35
  isolate_namespace LesliBabel
36
36
 
37
37
  initializer :lesli_babel do |app|
38
-
39
- # register assets manifest
40
- config.assets.precompile += %w[lesli_babel_manifest.js]
41
-
42
38
  # set locales (from initializer)
43
39
  config.i18n.default_locale = Lesli.config.babel.dig(:locales).keys.first || :en
44
40
  config.i18n.available_locales = Lesli.config.babel.dig(:locales).keys || [:en]
@@ -1,4 +1,4 @@
1
1
  module LesliBabel
2
- VERSION = "1.1.2"
3
- BUILD = "1791607001"
2
+ VERSION = "1.1.3"
3
+ BUILD = "1792716699"
4
4
  end
data/readme.md CHANGED
@@ -8,8 +8,8 @@
8
8
  <br />
9
9
 
10
10
  <div align="center">
11
- <a target="_blank" href="https://github.com/LesliTech/LesliBabel/actions/workflows/lesli-ci.yaml">
12
- <img alt="LesliBabel test status" src="https://img.shields.io/github/actions/workflow/status/LesliTech/LesliBabel/lesli-ci.yaml?branch=master&style=for-the-badge&logo=github&label=tests">
11
+ <a target="_blank" href="https://github.com/LesliTech/LesliBabel/actions/workflows/lesli-ci-engine.yaml">
12
+ <img alt="LesliBabel test status" src="https://img.shields.io/github/actions/workflow/status/LesliTech/LesliBabel/lesli-ci-engine.yaml?branch=master&style=for-the-badge&logo=github&label=tests">
13
13
  </a>
14
14
  <a target="_blank" href="https://rubygems.org/gems/lesli_babel">
15
15
  <img alt="Gem Version" src="https://img.shields.io/gem/v/lesli_babel?style=for-the-badge&logo=ruby">
@@ -133,9 +133,9 @@ bin/rails server
133
133
  LesliBabel uses LesliView for shared interface components and Tailwind CSS for engine-specific presentation. Tailwind source files and generated Rails assets are kept separate:
134
134
 
135
135
  ```text
136
- source/tailwind/application.tailwind.css
136
+ source/tailwind/application.css
137
137
  ↓ build
138
- app/assets/stylesheets/lesli_babel/application.tailwind.css
138
+ app/assets/stylesheets/lesli_babel/application.css
139
139
  ```
140
140
 
141
141
  From a complete Lesli development workspace, compile the assets through the shared LesliAssets builder:
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lesli_babel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Lesli Development Team
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-10-23 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: lesli
@@ -32,11 +33,9 @@ extensions: []
32
33
  extra_rdoc_files: []
33
34
  files:
34
35
  - Rakefile
35
- - app/assets/config/lesli_babel_manifest.js
36
36
  - app/assets/images/lesli_babel/babel-logo.svg
37
37
  - app/assets/javascripts/lesli_babel/application.js
38
38
  - app/assets/stylesheets/lesli_babel/application.css
39
- - app/assets/stylesheets/lesli_babel/application.tailwind.css
40
39
  - app/controllers/lesli_babel/application_controller.rb
41
40
  - app/controllers/lesli_babel/buckets_controller.rb
42
41
  - app/controllers/lesli_babel/dashboards_controller.rb
@@ -85,6 +84,7 @@ metadata:
85
84
  source_code_uri: https://github.com/LesliTech/LesliBabel
86
85
  bug_tracker_uri: https://github.com/LesliTech/LesliBabel/issues
87
86
  documentation_uri: https://www.lesli.dev/engines/babel/
87
+ post_install_message:
88
88
  rdoc_options: []
89
89
  require_paths:
90
90
  - lib
@@ -99,7 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubygems_version: 3.7.1
102
+ rubygems_version: 3.5.16
103
+ signing_key:
103
104
  specification_version: 4
104
105
  summary: Translation Management System for The Lesli Framework
105
106
  test_files: []
@@ -1,7 +0,0 @@
1
-
2
- //= link_tree ../images/lesli_babel .png
3
- //= link_tree ../images/lesli_babel .jpg
4
- //= link_tree ../images/lesli_babel .svg
5
-
6
- //= link lesli_babel/application.css
7
- //= link lesli_babel/application.js
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-sky-500:oklch(68.5% .169 237.323);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-900:oklch(20.8% .042 265.755);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wider:.05em;--radius-lg:.5rem;--radius-2xl:1rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer utilities{.my-6{margin-block:calc(var(--spacing) * 6)}.mt-1{margin-top:var(--spacing)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.h-12{height:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.max-w-full{max-width:100%}.shrink-0{flex-shrink:0}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-5{gap:calc(var(--spacing) * 5)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-slate-200{border-color:var(--color-slate-200)}.bg-white{background-color:var(--color-white)}.p-5{padding:calc(var(--spacing) * 5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-1{padding-top:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-900{color:var(--color-slate-900)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.group-hover\:text-slate-600:is(:where(.group):hover *){color:var(--color-slate-600)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-sky-500\/40:focus-visible{--tw-ring-color:#00a5ef66}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-sky-500\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-sky-500) 40%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:gap-6{gap:calc(var(--spacing) * 6)}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}}@media (min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}