protege 0.1.0.alpha.1

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 (255) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +24 -0
  3. data/Rakefile +12 -0
  4. data/app/assets/builds/protege.css +1128 -0
  5. data/app/assets/javascripts/protege/attachment_picker.js +163 -0
  6. data/app/assets/javascripts/protege/copy.js +80 -0
  7. data/app/assets/javascripts/protege/forms.js +28 -0
  8. data/app/assets/javascripts/protege/keys.js +212 -0
  9. data/app/assets/javascripts/protege/resize.js +149 -0
  10. data/app/assets/javascripts/protege/theme.js +25 -0
  11. data/app/assets/stylesheets/protege/application.css +15 -0
  12. data/app/assets/tailwind/application.css +137 -0
  13. data/app/controllers/concerns/protege/persona_scoped.rb +22 -0
  14. data/app/controllers/concerns/protege/thread_scoped.rb +22 -0
  15. data/app/controllers/protege/access_rules_controller.rb +72 -0
  16. data/app/controllers/protege/application_controller.rb +18 -0
  17. data/app/controllers/protege/archives_controller.rb +52 -0
  18. data/app/controllers/protege/email_domains_controller.rb +72 -0
  19. data/app/controllers/protege/home_controller.rb +15 -0
  20. data/app/controllers/protege/messages_controller.rb +46 -0
  21. data/app/controllers/protege/mta_domains_syncs_controller.rb +22 -0
  22. data/app/controllers/protege/personas_controller.rb +118 -0
  23. data/app/controllers/protege/replies_controller.rb +64 -0
  24. data/app/controllers/protege/responsibilities_controller.rb +82 -0
  25. data/app/controllers/protege/responsibility_runs_controller.rb +46 -0
  26. data/app/controllers/protege/threads_controller.rb +75 -0
  27. data/app/controllers/protege/traces/searches_controller.rb +19 -0
  28. data/app/controllers/protege/traces_controller.rb +52 -0
  29. data/app/helpers/protege/application_helper.rb +30 -0
  30. data/app/helpers/protege/components/badges_helper.rb +59 -0
  31. data/app/helpers/protege/components/buttons_helper.rb +141 -0
  32. data/app/helpers/protege/components/cards_helper.rb +48 -0
  33. data/app/helpers/protege/components/components_helper.rb +30 -0
  34. data/app/helpers/protege/components/dialogs_helper.rb +36 -0
  35. data/app/helpers/protege/components/forms_helper.rb +223 -0
  36. data/app/helpers/protege/components/hotkeys_helper.rb +60 -0
  37. data/app/helpers/protege/components/icons_helper.rb +41 -0
  38. data/app/helpers/protege/components/introspection_helper.rb +162 -0
  39. data/app/helpers/protege/components/layout_helper.rb +169 -0
  40. data/app/helpers/protege/components/menus_helper.rb +68 -0
  41. data/app/helpers/protege/components/pagination_helper.rb +100 -0
  42. data/app/helpers/protege/components/sidebar_helper.rb +211 -0
  43. data/app/helpers/protege/components/tables_helper.rb +59 -0
  44. data/app/helpers/protege/components/typography_helper.rb +64 -0
  45. data/app/helpers/protege/email_domains_helper.rb +22 -0
  46. data/app/helpers/protege/messages_helper.rb +152 -0
  47. data/app/helpers/protege/personas_helper.rb +90 -0
  48. data/app/helpers/protege/responsibilities_helper.rb +63 -0
  49. data/app/helpers/protege/threads_helper.rb +118 -0
  50. data/app/helpers/protege/trace_helper.rb +22 -0
  51. data/app/hooks/protege/event_logger_hook.rb +109 -0
  52. data/app/jobs/protege/application_job.rb +41 -0
  53. data/app/jobs/protege/console_inference_job.rb +57 -0
  54. data/app/jobs/protege/inference_job.rb +60 -0
  55. data/app/jobs/protege/mail_provisioning_job.rb +21 -0
  56. data/app/jobs/protege/responsibility_job.rb +70 -0
  57. data/app/jobs/protege/responsibility_tick_job.rb +19 -0
  58. data/app/mailboxes/protege/agent_mailbox.rb +123 -0
  59. data/app/mailers/protege/application_mailer.rb +65 -0
  60. data/app/models/concerns/protege/broadcastable_email_domain.rb +48 -0
  61. data/app/models/concerns/protege/broadcastable_message.rb +47 -0
  62. data/app/models/concerns/protege/broadcastable_persona.rb +50 -0
  63. data/app/models/concerns/protege/broadcastable_responsibility.rb +51 -0
  64. data/app/models/concerns/protege/broadcastable_thread.rb +55 -0
  65. data/app/models/concerns/protege/tool_scoped.rb +88 -0
  66. data/app/models/protege/access_rule.rb +50 -0
  67. data/app/models/protege/application_record.rb +18 -0
  68. data/app/models/protege/current.rb +23 -0
  69. data/app/models/protege/email_domain.rb +136 -0
  70. data/app/models/protege/email_thread.rb +81 -0
  71. data/app/models/protege/message.rb +401 -0
  72. data/app/models/protege/persona.rb +229 -0
  73. data/app/models/protege/responsibility.rb +98 -0
  74. data/app/models/protege/responsibility_run.rb +68 -0
  75. data/app/models/protege/tool_use.rb +115 -0
  76. data/app/models/protege/trace.rb +71 -0
  77. data/app/providers/protege/open_router_provider.rb +317 -0
  78. data/app/resolvers/README.md +255 -0
  79. data/app/resolvers/protege/load_file_resolver.rb +86 -0
  80. data/app/resolvers/protege/load_record_resolver.rb +80 -0
  81. data/app/resolvers/protege/load_text_resolver.rb +40 -0
  82. data/app/resolvers/protege/thread_history_resolver.rb +116 -0
  83. data/app/services/protege/introspection_tool_call_presentation.rb +134 -0
  84. data/app/services/protege/message_search.rb +114 -0
  85. data/app/services/protege/trace_search.rb +102 -0
  86. data/app/subscribers/protege/introspection_broadcaster.rb +324 -0
  87. data/app/tools/protege/create_file_tool.rb +109 -0
  88. data/app/tools/protege/read_attachment_tool.rb +101 -0
  89. data/app/tools/protege/search_emails_tool.rb +129 -0
  90. data/app/tools/protege/send_email_tool.rb +240 -0
  91. data/app/tools/protege/web_fetch_tool.rb +224 -0
  92. data/app/tools/protege/web_search_tool.rb +131 -0
  93. data/app/views/layouts/protege/application.html.slim +19 -0
  94. data/app/views/protege/access_rules/create.turbo_stream.slim +6 -0
  95. data/app/views/protege/email_domains/_email_domain_sidebar_item.html.slim +4 -0
  96. data/app/views/protege/email_domains/_form.html.slim +10 -0
  97. data/app/views/protege/email_domains/_sidebar.html.slim +11 -0
  98. data/app/views/protege/email_domains/index.html.slim +6 -0
  99. data/app/views/protege/email_domains/new.html.slim +7 -0
  100. data/app/views/protege/email_domains/show.html.slim +36 -0
  101. data/app/views/protege/home/show.html.slim +26 -0
  102. data/app/views/protege/messages/_message.html.slim +19 -0
  103. data/app/views/protege/messages/_sidebar.html.slim +13 -0
  104. data/app/views/protege/messages/index.html.slim +20 -0
  105. data/app/views/protege/personas/_access_rule.html.slim +7 -0
  106. data/app/views/protege/personas/_access_rule_form.html.slim +8 -0
  107. data/app/views/protege/personas/_access_rules.html.slim +19 -0
  108. data/app/views/protege/personas/_actions.html.slim +15 -0
  109. data/app/views/protege/personas/_form.html.slim +29 -0
  110. data/app/views/protege/personas/_persona_sidebar_item.html.slim +5 -0
  111. data/app/views/protege/personas/_sidebar.html.slim +11 -0
  112. data/app/views/protege/personas/edit.html.slim +7 -0
  113. data/app/views/protege/personas/index.html.slim +6 -0
  114. data/app/views/protege/personas/new.html.slim +7 -0
  115. data/app/views/protege/personas/show.html.slim +37 -0
  116. data/app/views/protege/responsibilities/_form.html.slim +21 -0
  117. data/app/views/protege/responsibilities/_responsibility_sidebar_item.html.slim +5 -0
  118. data/app/views/protege/responsibilities/_sidebar.html.slim +11 -0
  119. data/app/views/protege/responsibilities/edit.html.slim +7 -0
  120. data/app/views/protege/responsibilities/index.html.slim +6 -0
  121. data/app/views/protege/responsibilities/new.html.slim +7 -0
  122. data/app/views/protege/responsibilities/show.html.slim +22 -0
  123. data/app/views/protege/responsibility_runs/show.html.slim +13 -0
  124. data/app/views/protege/shared/_confirm_dialog.html.slim +22 -0
  125. data/app/views/protege/shared/_header.html.slim +14 -0
  126. data/app/views/protege/shared/_hotkeys.html.slim +43 -0
  127. data/app/views/protege/threads/_composer_footer.html.slim +15 -0
  128. data/app/views/protege/threads/_introspection.html.slim +7 -0
  129. data/app/views/protege/threads/_reasoning.html.slim +4 -0
  130. data/app/views/protege/threads/_reply_form.html.slim +7 -0
  131. data/app/views/protege/threads/_run_marker.html.slim +3 -0
  132. data/app/views/protege/threads/_sidebar.html.slim +15 -0
  133. data/app/views/protege/threads/_thread.html.slim +6 -0
  134. data/app/views/protege/threads/_tool_call.html.slim +8 -0
  135. data/app/views/protege/threads/index.html.slim +6 -0
  136. data/app/views/protege/threads/new.html.slim +15 -0
  137. data/app/views/protege/threads/show.html.slim +25 -0
  138. data/app/views/protege/traces/_sidebar.html.slim +15 -0
  139. data/app/views/protege/traces/index.html.slim +11 -0
  140. data/app/views/protege/traces/searches/_sidebar.html.slim +13 -0
  141. data/app/views/protege/traces/searches/show.html.slim +22 -0
  142. data/app/views/protege/traces/show.html.slim +28 -0
  143. data/config/routes.rb +33 -0
  144. data/db/migrate/20260520000001_create_protege_tables.rb +105 -0
  145. data/db/migrate/20260706120130_create_protege_traces.rb +30 -0
  146. data/db/migrate/20260707120000_replace_persona_active_with_archived_at.rb +24 -0
  147. data/db/migrate/20260708120000_add_disabled_tool_ids_to_personas.rb +22 -0
  148. data/lib/generators/protege/extension_naming.rb +38 -0
  149. data/lib/generators/protege/hook/hook_generator.rb +33 -0
  150. data/lib/generators/protege/hook/templates/hook.rb.tt +36 -0
  151. data/lib/generators/protege/install/install_generator.rb +170 -0
  152. data/lib/generators/protege/install/templates/initializer.rb.tt +84 -0
  153. data/lib/generators/protege/persona/persona_generator.rb +35 -0
  154. data/lib/generators/protege/persona/templates/persona.rb.tt +31 -0
  155. data/lib/generators/protege/postfix/postfix_generator.rb +74 -0
  156. data/lib/generators/protege/postfix/templates/deploy/mail/Dockerfile +43 -0
  157. data/lib/generators/protege/postfix/templates/deploy/mail/KeyTable +3 -0
  158. data/lib/generators/protege/postfix/templates/deploy/mail/MAIL.md +135 -0
  159. data/lib/generators/protege/postfix/templates/deploy/mail/README.md +56 -0
  160. data/lib/generators/protege/postfix/templates/deploy/mail/SigningTable +3 -0
  161. data/lib/generators/protege/postfix/templates/deploy/mail/TrustedHosts +8 -0
  162. data/lib/generators/protege/postfix/templates/deploy/mail/entrypoint.sh +118 -0
  163. data/lib/generators/protege/postfix/templates/deploy/mail/kamal-accessory.example.yml +32 -0
  164. data/lib/generators/protege/postfix/templates/deploy/mail/main.cf +68 -0
  165. data/lib/generators/protege/postfix/templates/deploy/mail/opendkim.conf +36 -0
  166. data/lib/generators/protege/postfix/templates/deploy/mail/opendmarc.conf +32 -0
  167. data/lib/generators/protege/postfix/templates/deploy/mail/opendmarc.ignore.hosts +9 -0
  168. data/lib/generators/protege/postfix/templates/deploy/mail/policyd-spf.conf +21 -0
  169. data/lib/generators/protege/postfix/templates/deploy/mail/provision.py +182 -0
  170. data/lib/generators/protege/postfix/templates/deploy/mail/relay-to-app.sh +28 -0
  171. data/lib/generators/protege/postfix/templates/github/workflows/build-mail-image.example.yml +50 -0
  172. data/lib/generators/protege/provider/provider_generator.rb +44 -0
  173. data/lib/generators/protege/provider/templates/provider.rb.tt +50 -0
  174. data/lib/generators/protege/resolver/resolver_generator.rb +34 -0
  175. data/lib/generators/protege/resolver/templates/resolver.rb.tt +31 -0
  176. data/lib/generators/protege/tool/templates/tool.rb.tt +50 -0
  177. data/lib/generators/protege/tool/tool_generator.rb +34 -0
  178. data/lib/protege/configuration.rb +171 -0
  179. data/lib/protege/engine.rb +103 -0
  180. data/lib/protege/errors/bad_request_error.rb +8 -0
  181. data/lib/protege/errors/contract_violation_error.rb +8 -0
  182. data/lib/protege/errors/error.rb +30 -0
  183. data/lib/protege/errors/generic_error.rb +7 -0
  184. data/lib/protege/errors/internal_error.rb +8 -0
  185. data/lib/protege/errors/invalid_model_error.rb +8 -0
  186. data/lib/protege/errors/invalid_tool_result_error.rb +9 -0
  187. data/lib/protege/errors/rate_limited_error.rb +8 -0
  188. data/lib/protege/errors/resolver_file_not_found_error.rb +9 -0
  189. data/lib/protege/errors/response_parse_failed_error.rb +8 -0
  190. data/lib/protege/errors/timeout_error.rb +8 -0
  191. data/lib/protege/errors/tool_not_available_error.rb +12 -0
  192. data/lib/protege/errors/tool_not_found_error.rb +9 -0
  193. data/lib/protege/errors/unauthorized_error.rb +8 -0
  194. data/lib/protege/errors/unavailable_error.rb +8 -0
  195. data/lib/protege/errors/unsupported_capability_error.rb +8 -0
  196. data/lib/protege/events/event.rb +98 -0
  197. data/lib/protege/events/inference_chunk_event.rb +17 -0
  198. data/lib/protege/events/inference_completed_event.rb +12 -0
  199. data/lib/protege/events/inference_failed_event.rb +12 -0
  200. data/lib/protege/events/inference_generated_event.rb +19 -0
  201. data/lib/protege/events/inference_max_turns_reached_event.rb +12 -0
  202. data/lib/protege/events/inference_started_event.rb +11 -0
  203. data/lib/protege/events/loop_run_completed_event.rb +11 -0
  204. data/lib/protege/events/loop_run_enqueued_event.rb +12 -0
  205. data/lib/protege/events/loop_run_failed_event.rb +12 -0
  206. data/lib/protege/events/loop_run_started_event.rb +11 -0
  207. data/lib/protege/events/tool_call_completed_event.rb +12 -0
  208. data/lib/protege/events/tool_call_failed_event.rb +12 -0
  209. data/lib/protege/events/tool_call_started_event.rb +11 -0
  210. data/lib/protege/events/tool_calls_received_event.rb +11 -0
  211. data/lib/protege/extensions/hook.rb +13 -0
  212. data/lib/protege/extensions/hook_mixin.rb +90 -0
  213. data/lib/protege/extensions/provider.rb +12 -0
  214. data/lib/protege/extensions/provider_mixin.rb +124 -0
  215. data/lib/protege/extensions/resolver.rb +12 -0
  216. data/lib/protege/extensions/resolver_mixin.rb +58 -0
  217. data/lib/protege/extensions/tool.rb +12 -0
  218. data/lib/protege/extensions/tool_mixin.rb +217 -0
  219. data/lib/protege/gateway/access_control.rb +66 -0
  220. data/lib/protege/gateway/access_policy.rb +94 -0
  221. data/lib/protege/gateway/attachment_policy.rb +115 -0
  222. data/lib/protege/gateway/mail/address.rb +145 -0
  223. data/lib/protege/gateway/mail/attachment.rb +17 -0
  224. data/lib/protege/gateway/mail/message_id.rb +104 -0
  225. data/lib/protege/gateway/mail/outbound.rb +181 -0
  226. data/lib/protege/gateway/mail/references.rb +107 -0
  227. data/lib/protege/gateway.rb +398 -0
  228. data/lib/protege/inference/provider/request.rb +110 -0
  229. data/lib/protege/inference/provider/response.rb +50 -0
  230. data/lib/protege/inference/provider/tool_call.rb +52 -0
  231. data/lib/protege/inference.rb +121 -0
  232. data/lib/protege/loop/schedule.rb +66 -0
  233. data/lib/protege/loop/scheduler.rb +42 -0
  234. data/lib/protege/loop.rb +37 -0
  235. data/lib/protege/orchestrator/context.rb +65 -0
  236. data/lib/protege/orchestrator/harness.rb +305 -0
  237. data/lib/protege/orchestrator/reply_context.rb +21 -0
  238. data/lib/protege/orchestrator/reply_harness.rb +68 -0
  239. data/lib/protege/orchestrator/resolver_chain.rb +93 -0
  240. data/lib/protege/orchestrator/responsibility_context.rb +22 -0
  241. data/lib/protege/orchestrator/responsibility_harness.rb +60 -0
  242. data/lib/protege/orchestrator.rb +37 -0
  243. data/lib/protege/subscribers/hook_dispatcher.rb +140 -0
  244. data/lib/protege/subscribers/tracing.rb +65 -0
  245. data/lib/protege/types/document_part.rb +13 -0
  246. data/lib/protege/types/image_part.rb +11 -0
  247. data/lib/protege/types/model_message.rb +40 -0
  248. data/lib/protege/types/result.rb +113 -0
  249. data/lib/protege/types/stored_file.rb +127 -0
  250. data/lib/protege/types/text_part.rb +8 -0
  251. data/lib/protege/types/tool_result.rb +16 -0
  252. data/lib/protege/version.rb +6 -0
  253. data/lib/protege.rb +47 -0
  254. data/lib/tasks/protege_tasks.rake +16 -0
  255. metadata +494 -0
@@ -0,0 +1,1128 @@
1
+ /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
2
+ @layer properties;
3
+ @layer theme, base, components, utilities;
4
+ @layer theme {
5
+ :root, :host {
6
+ --font-sans: ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',
7
+ 'Noto Color Emoji';
8
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New',
9
+ monospace;
10
+ --color-red-50: oklch(97.1% 0.013 17.38);
11
+ --color-red-200: oklch(88.5% 0.062 18.334);
12
+ --color-red-500: oklch(63.7% 0.237 25.331);
13
+ --color-red-600: oklch(57.7% 0.245 27.325);
14
+ --color-red-700: oklch(50.5% 0.213 27.518);
15
+ --color-amber-400: oklch(82.8% 0.189 84.429);
16
+ --color-amber-500: oklch(76.9% 0.188 70.08);
17
+ --color-amber-600: oklch(66.6% 0.179 58.318);
18
+ --color-amber-700: oklch(55.5% 0.163 48.998);
19
+ --color-yellow-600: oklch(68.1% 0.162 75.834);
20
+ --color-green-600: oklch(62.7% 0.194 149.214);
21
+ --color-gray-500: oklch(55.1% 0.027 264.364);
22
+ --color-gray-600: oklch(44.6% 0.03 256.802);
23
+ --color-gray-900: oklch(21% 0.034 264.665);
24
+ --spacing: 0.25rem;
25
+ --container-sm: 24rem;
26
+ --container-md: 28rem;
27
+ --container-4xl: 56rem;
28
+ --text-xs: 0.8125rem;
29
+ --text-xs--line-height: calc(1 / 0.75);
30
+ --text-sm: 0.9375rem;
31
+ --text-sm--line-height: calc(1.25 / 0.875);
32
+ --text-base: 1.0625rem;
33
+ --text-base--line-height: calc(1.5 / 1);
34
+ --text-lg: 1.25rem;
35
+ --text-lg--line-height: calc(1.75 / 1.125);
36
+ --font-weight-medium: 500;
37
+ --font-weight-semibold: 600;
38
+ --font-weight-bold: 700;
39
+ --tracking-wide: 0.025em;
40
+ --tracking-wider: 0.05em;
41
+ --leading-relaxed: 1.625;
42
+ --radius-sm: 0.25rem;
43
+ --radius-md: 0.375rem;
44
+ --radius-lg: 0.5rem;
45
+ --radius-xl: 0.75rem;
46
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
47
+ --default-transition-duration: 150ms;
48
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
49
+ --default-font-family: var(--font-sans);
50
+ --default-mono-font-family: var(--font-mono);
51
+ }
52
+ }
53
+ @layer base {
54
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
55
+ box-sizing: border-box;
56
+ margin: 0;
57
+ padding: 0;
58
+ border: 0 solid;
59
+ }
60
+ html, :host {
61
+ line-height: 1.5;
62
+ -webkit-text-size-adjust: 100%;
63
+ tab-size: 4;
64
+ font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji');
65
+ font-feature-settings: var(--default-font-feature-settings, normal);
66
+ font-variation-settings: var(--default-font-variation-settings, normal);
67
+ -webkit-tap-highlight-color: transparent;
68
+ }
69
+ hr {
70
+ height: 0;
71
+ color: inherit;
72
+ border-top-width: 1px;
73
+ }
74
+ abbr:where([title]) {
75
+ -webkit-text-decoration: underline dotted;
76
+ text-decoration: underline dotted;
77
+ }
78
+ h1, h2, h3, h4, h5, h6 {
79
+ font-size: inherit;
80
+ font-weight: inherit;
81
+ }
82
+ a {
83
+ color: inherit;
84
+ -webkit-text-decoration: inherit;
85
+ text-decoration: inherit;
86
+ }
87
+ b, strong {
88
+ font-weight: bolder;
89
+ }
90
+ code, kbd, samp, pre {
91
+ font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace);
92
+ font-feature-settings: var(--default-mono-font-feature-settings, normal);
93
+ font-variation-settings: var(--default-mono-font-variation-settings, normal);
94
+ font-size: 1em;
95
+ }
96
+ small {
97
+ font-size: 80%;
98
+ }
99
+ sub, sup {
100
+ font-size: 75%;
101
+ line-height: 0;
102
+ position: relative;
103
+ vertical-align: baseline;
104
+ }
105
+ sub {
106
+ bottom: -0.25em;
107
+ }
108
+ sup {
109
+ top: -0.5em;
110
+ }
111
+ table {
112
+ text-indent: 0;
113
+ border-color: inherit;
114
+ border-collapse: collapse;
115
+ }
116
+ :-moz-focusring {
117
+ outline: auto;
118
+ }
119
+ progress {
120
+ vertical-align: baseline;
121
+ }
122
+ summary {
123
+ display: list-item;
124
+ }
125
+ ol, ul, menu {
126
+ list-style: none;
127
+ }
128
+ img, svg, video, canvas, audio, iframe, embed, object {
129
+ display: block;
130
+ vertical-align: middle;
131
+ }
132
+ img, video {
133
+ max-width: 100%;
134
+ height: auto;
135
+ }
136
+ button, input, select, optgroup, textarea, ::file-selector-button {
137
+ font: inherit;
138
+ font-feature-settings: inherit;
139
+ font-variation-settings: inherit;
140
+ letter-spacing: inherit;
141
+ color: inherit;
142
+ border-radius: 0;
143
+ background-color: transparent;
144
+ opacity: 1;
145
+ }
146
+ :where(select:is([multiple], [size])) optgroup {
147
+ font-weight: bolder;
148
+ }
149
+ :where(select:is([multiple], [size])) optgroup option {
150
+ padding-inline-start: 20px;
151
+ }
152
+ ::file-selector-button {
153
+ margin-inline-end: 4px;
154
+ }
155
+ ::placeholder {
156
+ opacity: 1;
157
+ }
158
+ @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
159
+ ::placeholder {
160
+ color: currentcolor;
161
+ @supports (color: color-mix(in lab, red, red)) {
162
+ color: color-mix(in oklab, currentcolor 50%, transparent);
163
+ }
164
+ }
165
+ }
166
+ textarea {
167
+ resize: vertical;
168
+ }
169
+ ::-webkit-search-decoration {
170
+ -webkit-appearance: none;
171
+ }
172
+ ::-webkit-date-and-time-value {
173
+ min-height: 1lh;
174
+ text-align: inherit;
175
+ }
176
+ ::-webkit-datetime-edit {
177
+ display: inline-flex;
178
+ }
179
+ ::-webkit-datetime-edit-fields-wrapper {
180
+ padding: 0;
181
+ }
182
+ ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {
183
+ padding-block: 0;
184
+ }
185
+ ::-webkit-calendar-picker-indicator {
186
+ line-height: 1;
187
+ }
188
+ :-moz-ui-invalid {
189
+ box-shadow: none;
190
+ }
191
+ button, input:where([type='button'], [type='reset'], [type='submit']), ::file-selector-button {
192
+ appearance: button;
193
+ }
194
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
195
+ height: auto;
196
+ }
197
+ [hidden]:where(:not([hidden='until-found'])) {
198
+ display: none !important;
199
+ }
200
+ }
201
+ @layer utilities {
202
+ .collapse {
203
+ visibility: collapse;
204
+ }
205
+ .visible {
206
+ visibility: visible;
207
+ }
208
+ .absolute {
209
+ position: absolute;
210
+ }
211
+ .fixed {
212
+ position: fixed;
213
+ }
214
+ .relative {
215
+ position: relative;
216
+ }
217
+ .static {
218
+ position: static;
219
+ }
220
+ .inset-0 {
221
+ inset: 0;
222
+ }
223
+ .right-0 {
224
+ right: 0;
225
+ }
226
+ .z-10 {
227
+ z-index: 10;
228
+ }
229
+ .z-20 {
230
+ z-index: 20;
231
+ }
232
+ .container {
233
+ width: 100%;
234
+ @media (width >= 40rem) {
235
+ max-width: 40rem;
236
+ }
237
+ @media (width >= 48rem) {
238
+ max-width: 48rem;
239
+ }
240
+ @media (width >= 64rem) {
241
+ max-width: 64rem;
242
+ }
243
+ @media (width >= 80rem) {
244
+ max-width: 80rem;
245
+ }
246
+ @media (width >= 96rem) {
247
+ max-width: 96rem;
248
+ }
249
+ }
250
+ .m-auto {
251
+ margin: auto;
252
+ }
253
+ .mx-auto {
254
+ margin-inline: auto;
255
+ }
256
+ .my-3 {
257
+ margin-block: calc(var(--spacing) * 3);
258
+ }
259
+ .mt-0\.5 {
260
+ margin-top: calc(var(--spacing) * 0.5);
261
+ }
262
+ .mt-1 {
263
+ margin-top: var(--spacing);
264
+ }
265
+ .mt-2 {
266
+ margin-top: calc(var(--spacing) * 2);
267
+ }
268
+ .mt-3 {
269
+ margin-top: calc(var(--spacing) * 3);
270
+ }
271
+ .mt-6 {
272
+ margin-top: calc(var(--spacing) * 6);
273
+ }
274
+ .mt-10 {
275
+ margin-top: calc(var(--spacing) * 10);
276
+ }
277
+ .mb-1 {
278
+ margin-bottom: var(--spacing);
279
+ }
280
+ .mb-3 {
281
+ margin-bottom: calc(var(--spacing) * 3);
282
+ }
283
+ .mb-4 {
284
+ margin-bottom: calc(var(--spacing) * 4);
285
+ }
286
+ .mb-6 {
287
+ margin-bottom: calc(var(--spacing) * 6);
288
+ }
289
+ .mb-10 {
290
+ margin-bottom: calc(var(--spacing) * 10);
291
+ }
292
+ .ml-2 {
293
+ margin-left: calc(var(--spacing) * 2);
294
+ }
295
+ .block {
296
+ display: block;
297
+ }
298
+ .contents {
299
+ display: contents;
300
+ }
301
+ .flex {
302
+ display: flex;
303
+ }
304
+ .grid {
305
+ display: grid;
306
+ }
307
+ .hidden {
308
+ display: none;
309
+ }
310
+ .inline {
311
+ display: inline;
312
+ }
313
+ .inline-block {
314
+ display: inline-block;
315
+ }
316
+ .inline-flex {
317
+ display: inline-flex;
318
+ }
319
+ .table {
320
+ display: table;
321
+ }
322
+ .h-1\.5 {
323
+ height: calc(var(--spacing) * 1.5);
324
+ }
325
+ .h-3 {
326
+ height: calc(var(--spacing) * 3);
327
+ }
328
+ .h-4 {
329
+ height: calc(var(--spacing) * 4);
330
+ }
331
+ .h-5 {
332
+ height: calc(var(--spacing) * 5);
333
+ }
334
+ .h-9 {
335
+ height: calc(var(--spacing) * 9);
336
+ }
337
+ .h-10 {
338
+ height: calc(var(--spacing) * 10);
339
+ }
340
+ .h-14 {
341
+ height: calc(var(--spacing) * 14);
342
+ }
343
+ .h-full {
344
+ height: 100%;
345
+ }
346
+ .min-h-0 {
347
+ min-height: 0;
348
+ }
349
+ .min-h-\[6rem\] {
350
+ min-height: 6rem;
351
+ }
352
+ .w-1\.5 {
353
+ width: calc(var(--spacing) * 1.5);
354
+ }
355
+ .w-3 {
356
+ width: calc(var(--spacing) * 3);
357
+ }
358
+ .w-4 {
359
+ width: calc(var(--spacing) * 4);
360
+ }
361
+ .w-9 {
362
+ width: calc(var(--spacing) * 9);
363
+ }
364
+ .w-20 {
365
+ width: calc(var(--spacing) * 20);
366
+ }
367
+ .w-36 {
368
+ width: calc(var(--spacing) * 36);
369
+ }
370
+ .w-40 {
371
+ width: calc(var(--spacing) * 40);
372
+ }
373
+ .w-72 {
374
+ width: calc(var(--spacing) * 72);
375
+ }
376
+ .w-80 {
377
+ width: calc(var(--spacing) * 80);
378
+ }
379
+ .w-full {
380
+ width: 100%;
381
+ }
382
+ .max-w-4xl {
383
+ max-width: var(--container-4xl);
384
+ }
385
+ .max-w-md {
386
+ max-width: var(--container-md);
387
+ }
388
+ .max-w-sm {
389
+ max-width: var(--container-sm);
390
+ }
391
+ .min-w-0 {
392
+ min-width: 0;
393
+ }
394
+ .flex-1 {
395
+ flex: 1;
396
+ }
397
+ .flex-shrink-0 {
398
+ flex-shrink: 0;
399
+ }
400
+ .shrink-0 {
401
+ flex-shrink: 0;
402
+ }
403
+ .translate-x-1 {
404
+ --tw-translate-x: var(--spacing);
405
+ translate: var(--tw-translate-x) var(--tw-translate-y);
406
+ }
407
+ .translate-x-4 {
408
+ --tw-translate-x: calc(var(--spacing) * 4);
409
+ translate: var(--tw-translate-x) var(--tw-translate-y);
410
+ }
411
+ .animate-pulse {
412
+ animation: var(--animate-pulse);
413
+ }
414
+ .cursor-pointer {
415
+ cursor: pointer;
416
+ }
417
+ .resize {
418
+ resize: both;
419
+ }
420
+ .resize-none {
421
+ resize: none;
422
+ }
423
+ .resize-y {
424
+ resize: vertical;
425
+ }
426
+ .list-disc {
427
+ list-style-type: disc;
428
+ }
429
+ .list-none {
430
+ list-style-type: none;
431
+ }
432
+ .grid-cols-1 {
433
+ grid-template-columns: repeat(1, minmax(0, 1fr));
434
+ }
435
+ .grid-cols-2 {
436
+ grid-template-columns: repeat(2, minmax(0, 1fr));
437
+ }
438
+ .grid-cols-3 {
439
+ grid-template-columns: repeat(3, minmax(0, 1fr));
440
+ }
441
+ .flex-col {
442
+ flex-direction: column;
443
+ }
444
+ .flex-wrap {
445
+ flex-wrap: wrap;
446
+ }
447
+ .items-baseline {
448
+ align-items: baseline;
449
+ }
450
+ .items-center {
451
+ align-items: center;
452
+ }
453
+ .items-end {
454
+ align-items: flex-end;
455
+ }
456
+ .items-start {
457
+ align-items: flex-start;
458
+ }
459
+ .justify-between {
460
+ justify-content: space-between;
461
+ }
462
+ .justify-center {
463
+ justify-content: center;
464
+ }
465
+ .gap-1 {
466
+ gap: var(--spacing);
467
+ }
468
+ .gap-1\.5 {
469
+ gap: calc(var(--spacing) * 1.5);
470
+ }
471
+ .gap-2 {
472
+ gap: calc(var(--spacing) * 2);
473
+ }
474
+ .gap-3 {
475
+ gap: calc(var(--spacing) * 3);
476
+ }
477
+ .gap-4 {
478
+ gap: calc(var(--spacing) * 4);
479
+ }
480
+ .gap-6 {
481
+ gap: calc(var(--spacing) * 6);
482
+ }
483
+ .gap-8 {
484
+ gap: calc(var(--spacing) * 8);
485
+ }
486
+ .space-y-0\.5 {
487
+ :where(& > :not(:last-child)) {
488
+ --tw-space-y-reverse: 0;
489
+ margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse));
490
+ margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse)));
491
+ }
492
+ }
493
+ .space-y-1 {
494
+ :where(& > :not(:last-child)) {
495
+ --tw-space-y-reverse: 0;
496
+ margin-block-start: calc(var(--spacing) * var(--tw-space-y-reverse));
497
+ margin-block-end: calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)));
498
+ }
499
+ }
500
+ .space-y-2 {
501
+ :where(& > :not(:last-child)) {
502
+ --tw-space-y-reverse: 0;
503
+ margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
504
+ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
505
+ }
506
+ }
507
+ .space-y-3 {
508
+ :where(& > :not(:last-child)) {
509
+ --tw-space-y-reverse: 0;
510
+ margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));
511
+ margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));
512
+ }
513
+ }
514
+ .space-y-4 {
515
+ :where(& > :not(:last-child)) {
516
+ --tw-space-y-reverse: 0;
517
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
518
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
519
+ }
520
+ }
521
+ .space-y-5 {
522
+ :where(& > :not(:last-child)) {
523
+ --tw-space-y-reverse: 0;
524
+ margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));
525
+ margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)));
526
+ }
527
+ }
528
+ .truncate {
529
+ overflow: hidden;
530
+ text-overflow: ellipsis;
531
+ white-space: nowrap;
532
+ }
533
+ .overflow-hidden {
534
+ overflow: hidden;
535
+ }
536
+ .overflow-x-auto {
537
+ overflow-x: auto;
538
+ }
539
+ .overflow-y-auto {
540
+ overflow-y: auto;
541
+ }
542
+ .rounded {
543
+ border-radius: 0.25rem;
544
+ }
545
+ .rounded-full {
546
+ border-radius: calc(infinity * 1px);
547
+ }
548
+ .rounded-lg {
549
+ border-radius: var(--radius-lg);
550
+ }
551
+ .rounded-md {
552
+ border-radius: var(--radius-md);
553
+ }
554
+ .rounded-sm {
555
+ border-radius: var(--radius-sm);
556
+ }
557
+ .rounded-xl {
558
+ border-radius: var(--radius-xl);
559
+ }
560
+ .border {
561
+ border-style: var(--tw-border-style);
562
+ border-width: 1px;
563
+ }
564
+ .border-0 {
565
+ border-style: var(--tw-border-style);
566
+ border-width: 0px;
567
+ }
568
+ .border-red-200 {
569
+ border-color: var(--color-red-200);
570
+ }
571
+ .bg-amber-500 {
572
+ background-color: var(--color-amber-500);
573
+ }
574
+ .bg-gray-500 {
575
+ background-color: var(--color-gray-500);
576
+ }
577
+ .bg-green-600 {
578
+ background-color: var(--color-green-600);
579
+ }
580
+ .bg-red-50 {
581
+ background-color: var(--color-red-50);
582
+ }
583
+ .bg-red-600 {
584
+ background-color: var(--color-red-600);
585
+ }
586
+ .bg-transparent {
587
+ background-color: transparent;
588
+ }
589
+ .bg-yellow-600 {
590
+ background-color: var(--color-yellow-600);
591
+ }
592
+ .p-0 {
593
+ padding: 0;
594
+ }
595
+ .p-5 {
596
+ padding: calc(var(--spacing) * 5);
597
+ }
598
+ .p-6 {
599
+ padding: calc(var(--spacing) * 6);
600
+ }
601
+ .px-1 {
602
+ padding-inline: var(--spacing);
603
+ }
604
+ .px-1\.5 {
605
+ padding-inline: calc(var(--spacing) * 1.5);
606
+ }
607
+ .px-2\.5 {
608
+ padding-inline: calc(var(--spacing) * 2.5);
609
+ }
610
+ .px-3 {
611
+ padding-inline: calc(var(--spacing) * 3);
612
+ }
613
+ .px-4 {
614
+ padding-inline: calc(var(--spacing) * 4);
615
+ }
616
+ .px-5 {
617
+ padding-inline: calc(var(--spacing) * 5);
618
+ }
619
+ .py-0\.5 {
620
+ padding-block: calc(var(--spacing) * 0.5);
621
+ }
622
+ .py-1 {
623
+ padding-block: var(--spacing);
624
+ }
625
+ .py-1\.5 {
626
+ padding-block: calc(var(--spacing) * 1.5);
627
+ }
628
+ .py-3 {
629
+ padding-block: calc(var(--spacing) * 3);
630
+ }
631
+ .py-4 {
632
+ padding-block: calc(var(--spacing) * 4);
633
+ }
634
+ .py-6 {
635
+ padding-block: calc(var(--spacing) * 6);
636
+ }
637
+ .py-8 {
638
+ padding-block: calc(var(--spacing) * 8);
639
+ }
640
+ .pt-2 {
641
+ padding-top: calc(var(--spacing) * 2);
642
+ }
643
+ .pr-4 {
644
+ padding-right: calc(var(--spacing) * 4);
645
+ }
646
+ .pb-2 {
647
+ padding-bottom: calc(var(--spacing) * 2);
648
+ }
649
+ .pb-16 {
650
+ padding-bottom: calc(var(--spacing) * 16);
651
+ }
652
+ .pl-2 {
653
+ padding-left: calc(var(--spacing) * 2);
654
+ }
655
+ .pl-4 {
656
+ padding-left: calc(var(--spacing) * 4);
657
+ }
658
+ .text-center {
659
+ text-align: center;
660
+ }
661
+ .text-left {
662
+ text-align: left;
663
+ }
664
+ .align-middle {
665
+ vertical-align: middle;
666
+ }
667
+ .font-mono {
668
+ font-family: var(--font-mono);
669
+ }
670
+ .text-base {
671
+ font-size: var(--text-base);
672
+ line-height: var(--tw-leading, var(--text-base--line-height));
673
+ }
674
+ .text-lg {
675
+ font-size: var(--text-lg);
676
+ line-height: var(--tw-leading, var(--text-lg--line-height));
677
+ }
678
+ .text-sm {
679
+ font-size: var(--text-sm);
680
+ line-height: var(--tw-leading, var(--text-sm--line-height));
681
+ }
682
+ .text-xs {
683
+ font-size: var(--text-xs);
684
+ line-height: var(--tw-leading, var(--text-xs--line-height));
685
+ }
686
+ .leading-relaxed {
687
+ --tw-leading: var(--leading-relaxed);
688
+ line-height: var(--leading-relaxed);
689
+ }
690
+ .font-bold {
691
+ --tw-font-weight: var(--font-weight-bold);
692
+ font-weight: var(--font-weight-bold);
693
+ }
694
+ .font-medium {
695
+ --tw-font-weight: var(--font-weight-medium);
696
+ font-weight: var(--font-weight-medium);
697
+ }
698
+ .font-semibold {
699
+ --tw-font-weight: var(--font-weight-semibold);
700
+ font-weight: var(--font-weight-semibold);
701
+ }
702
+ .tracking-wide {
703
+ --tw-tracking: var(--tracking-wide);
704
+ letter-spacing: var(--tracking-wide);
705
+ }
706
+ .tracking-wider {
707
+ --tw-tracking: var(--tracking-wider);
708
+ letter-spacing: var(--tracking-wider);
709
+ }
710
+ .break-all {
711
+ word-break: break-all;
712
+ }
713
+ .whitespace-pre-wrap {
714
+ white-space: pre-wrap;
715
+ }
716
+ .text-amber-400 {
717
+ color: var(--color-amber-400);
718
+ }
719
+ .text-amber-600 {
720
+ color: var(--color-amber-600);
721
+ }
722
+ .text-gray-600 {
723
+ color: var(--color-gray-600);
724
+ }
725
+ .text-green-600 {
726
+ color: var(--color-green-600);
727
+ }
728
+ .text-red-500 {
729
+ color: var(--color-red-500);
730
+ }
731
+ .text-red-600 {
732
+ color: var(--color-red-600);
733
+ }
734
+ .text-red-700 {
735
+ color: var(--color-red-700);
736
+ }
737
+ .text-yellow-600 {
738
+ color: var(--color-yellow-600);
739
+ }
740
+ .uppercase {
741
+ text-transform: uppercase;
742
+ }
743
+ .italic {
744
+ font-style: italic;
745
+ }
746
+ .antialiased {
747
+ -webkit-font-smoothing: antialiased;
748
+ -moz-osx-font-smoothing: grayscale;
749
+ }
750
+ .shadow-lg {
751
+ --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
752
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
753
+ }
754
+ .shadow-sm {
755
+ --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));
756
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
757
+ }
758
+ .filter {
759
+ 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,);
760
+ }
761
+ .transition-colors {
762
+ transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to;
763
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
764
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
765
+ }
766
+ .transition-transform {
767
+ transition-property: transform, translate, scale, rotate;
768
+ transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
769
+ transition-duration: var(--tw-duration, var(--default-transition-duration));
770
+ }
771
+ .select-none {
772
+ -webkit-user-select: none;
773
+ user-select: none;
774
+ }
775
+ .backdrop\:bg-gray-900\/50 {
776
+ &::backdrop {
777
+ background-color: color-mix(in srgb, oklch(21% 0.034 264.665) 50%, transparent);
778
+ @supports (color: color-mix(in lab, red, red)) {
779
+ background-color: color-mix(in oklab, var(--color-gray-900) 50%, transparent);
780
+ }
781
+ }
782
+ }
783
+ .hover\:text-amber-600 {
784
+ &:hover {
785
+ @media (hover: hover) {
786
+ color: var(--color-amber-600);
787
+ }
788
+ }
789
+ }
790
+ .hover\:text-amber-700 {
791
+ &:hover {
792
+ @media (hover: hover) {
793
+ color: var(--color-amber-700);
794
+ }
795
+ }
796
+ }
797
+ .hover\:text-red-700 {
798
+ &:hover {
799
+ @media (hover: hover) {
800
+ color: var(--color-red-700);
801
+ }
802
+ }
803
+ }
804
+ .hover\:underline {
805
+ &:hover {
806
+ @media (hover: hover) {
807
+ text-decoration-line: underline;
808
+ }
809
+ }
810
+ }
811
+ .hover\:opacity-80 {
812
+ &:hover {
813
+ @media (hover: hover) {
814
+ opacity: 80%;
815
+ }
816
+ }
817
+ }
818
+ .focus\:border-amber-500 {
819
+ &:focus {
820
+ border-color: var(--color-amber-500);
821
+ }
822
+ }
823
+ .focus\:ring-1 {
824
+ &:focus {
825
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
826
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
827
+ }
828
+ }
829
+ .focus\:ring-amber-500 {
830
+ &:focus {
831
+ --tw-ring-color: var(--color-amber-500);
832
+ }
833
+ }
834
+ .focus\:outline-none {
835
+ &:focus {
836
+ --tw-outline-style: none;
837
+ outline-style: none;
838
+ }
839
+ }
840
+ }
841
+ :root {
842
+ --surface: #fff;
843
+ --surface-subtle: oklch(98.5% 0.002 247.839);
844
+ --border: oklch(92.8% 0.006 264.531);
845
+ --text: oklch(21% 0.034 264.665);
846
+ --text-muted: oklch(55.1% 0.027 264.364);
847
+ --text-faint: oklch(70.7% 0.022 261.325);
848
+ }
849
+ .dark {
850
+ --surface: oklch(13% 0.028 261.692);
851
+ --surface-subtle: oklch(21% 0.034 264.665);
852
+ --border: oklch(27.8% 0.033 256.848);
853
+ --text: oklch(96.7% 0.003 264.542);
854
+ --text-muted: oklch(70.7% 0.022 261.325);
855
+ --text-faint: oklch(44.6% 0.03 256.802);
856
+ }
857
+ body {
858
+ background-color: var(--surface);
859
+ color: var(--text);
860
+ }
861
+ .btn-outline:hover {
862
+ background-color: var(--surface-subtle) !important;
863
+ }
864
+ .btn-danger:hover {
865
+ background-color: rgba(239, 68, 68, 0.1) !important;
866
+ }
867
+ .introspection-empty:empty::before {
868
+ content: attr(data-empty);
869
+ color: var(--text-faint);
870
+ font-size: 0.75rem;
871
+ }
872
+ [data-copy] {
873
+ cursor: pointer;
874
+ cursor: copy;
875
+ }
876
+ .resize-handle {
877
+ position: absolute;
878
+ top: 0;
879
+ bottom: 0;
880
+ left: 0;
881
+ width: 9px;
882
+ z-index: 20;
883
+ cursor: col-resize;
884
+ }
885
+ .resize-handle::before {
886
+ content: "";
887
+ position: absolute;
888
+ top: 0;
889
+ bottom: 0;
890
+ left: 0;
891
+ width: 1px;
892
+ background: var(--border);
893
+ transition: width 0.12s ease, background-color 0.12s ease;
894
+ }
895
+ .resize-handle:hover::before, .resize-handle:active::before {
896
+ width: 3px;
897
+ background: var(--text-faint);
898
+ }
899
+ .resize-handle--right {
900
+ left: auto;
901
+ right: 0;
902
+ }
903
+ .resize-handle--right::before {
904
+ left: auto;
905
+ right: 0;
906
+ }
907
+ .resize-handle--top {
908
+ top: 0;
909
+ bottom: auto;
910
+ left: 0;
911
+ right: 0;
912
+ width: auto;
913
+ height: 9px;
914
+ cursor: row-resize;
915
+ }
916
+ .resize-handle--top::before {
917
+ top: 0;
918
+ bottom: auto;
919
+ left: 0;
920
+ right: 0;
921
+ width: auto;
922
+ height: 1px;
923
+ }
924
+ .resize-handle--top:hover::before, .resize-handle--top:active::before {
925
+ width: auto;
926
+ height: 3px;
927
+ }
928
+ @property --tw-translate-x {
929
+ syntax: "*";
930
+ inherits: false;
931
+ initial-value: 0;
932
+ }
933
+ @property --tw-translate-y {
934
+ syntax: "*";
935
+ inherits: false;
936
+ initial-value: 0;
937
+ }
938
+ @property --tw-translate-z {
939
+ syntax: "*";
940
+ inherits: false;
941
+ initial-value: 0;
942
+ }
943
+ @property --tw-space-y-reverse {
944
+ syntax: "*";
945
+ inherits: false;
946
+ initial-value: 0;
947
+ }
948
+ @property --tw-border-style {
949
+ syntax: "*";
950
+ inherits: false;
951
+ initial-value: solid;
952
+ }
953
+ @property --tw-leading {
954
+ syntax: "*";
955
+ inherits: false;
956
+ }
957
+ @property --tw-font-weight {
958
+ syntax: "*";
959
+ inherits: false;
960
+ }
961
+ @property --tw-tracking {
962
+ syntax: "*";
963
+ inherits: false;
964
+ }
965
+ @property --tw-shadow {
966
+ syntax: "*";
967
+ inherits: false;
968
+ initial-value: 0 0 #0000;
969
+ }
970
+ @property --tw-shadow-color {
971
+ syntax: "*";
972
+ inherits: false;
973
+ }
974
+ @property --tw-shadow-alpha {
975
+ syntax: "<percentage>";
976
+ inherits: false;
977
+ initial-value: 100%;
978
+ }
979
+ @property --tw-inset-shadow {
980
+ syntax: "*";
981
+ inherits: false;
982
+ initial-value: 0 0 #0000;
983
+ }
984
+ @property --tw-inset-shadow-color {
985
+ syntax: "*";
986
+ inherits: false;
987
+ }
988
+ @property --tw-inset-shadow-alpha {
989
+ syntax: "<percentage>";
990
+ inherits: false;
991
+ initial-value: 100%;
992
+ }
993
+ @property --tw-ring-color {
994
+ syntax: "*";
995
+ inherits: false;
996
+ }
997
+ @property --tw-ring-shadow {
998
+ syntax: "*";
999
+ inherits: false;
1000
+ initial-value: 0 0 #0000;
1001
+ }
1002
+ @property --tw-inset-ring-color {
1003
+ syntax: "*";
1004
+ inherits: false;
1005
+ }
1006
+ @property --tw-inset-ring-shadow {
1007
+ syntax: "*";
1008
+ inherits: false;
1009
+ initial-value: 0 0 #0000;
1010
+ }
1011
+ @property --tw-ring-inset {
1012
+ syntax: "*";
1013
+ inherits: false;
1014
+ }
1015
+ @property --tw-ring-offset-width {
1016
+ syntax: "<length>";
1017
+ inherits: false;
1018
+ initial-value: 0px;
1019
+ }
1020
+ @property --tw-ring-offset-color {
1021
+ syntax: "*";
1022
+ inherits: false;
1023
+ initial-value: #fff;
1024
+ }
1025
+ @property --tw-ring-offset-shadow {
1026
+ syntax: "*";
1027
+ inherits: false;
1028
+ initial-value: 0 0 #0000;
1029
+ }
1030
+ @property --tw-blur {
1031
+ syntax: "*";
1032
+ inherits: false;
1033
+ }
1034
+ @property --tw-brightness {
1035
+ syntax: "*";
1036
+ inherits: false;
1037
+ }
1038
+ @property --tw-contrast {
1039
+ syntax: "*";
1040
+ inherits: false;
1041
+ }
1042
+ @property --tw-grayscale {
1043
+ syntax: "*";
1044
+ inherits: false;
1045
+ }
1046
+ @property --tw-hue-rotate {
1047
+ syntax: "*";
1048
+ inherits: false;
1049
+ }
1050
+ @property --tw-invert {
1051
+ syntax: "*";
1052
+ inherits: false;
1053
+ }
1054
+ @property --tw-opacity {
1055
+ syntax: "*";
1056
+ inherits: false;
1057
+ }
1058
+ @property --tw-saturate {
1059
+ syntax: "*";
1060
+ inherits: false;
1061
+ }
1062
+ @property --tw-sepia {
1063
+ syntax: "*";
1064
+ inherits: false;
1065
+ }
1066
+ @property --tw-drop-shadow {
1067
+ syntax: "*";
1068
+ inherits: false;
1069
+ }
1070
+ @property --tw-drop-shadow-color {
1071
+ syntax: "*";
1072
+ inherits: false;
1073
+ }
1074
+ @property --tw-drop-shadow-alpha {
1075
+ syntax: "<percentage>";
1076
+ inherits: false;
1077
+ initial-value: 100%;
1078
+ }
1079
+ @property --tw-drop-shadow-size {
1080
+ syntax: "*";
1081
+ inherits: false;
1082
+ }
1083
+ @keyframes pulse {
1084
+ 50% {
1085
+ opacity: 0.5;
1086
+ }
1087
+ }
1088
+ @layer properties {
1089
+ @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {
1090
+ *, ::before, ::after, ::backdrop {
1091
+ --tw-translate-x: 0;
1092
+ --tw-translate-y: 0;
1093
+ --tw-translate-z: 0;
1094
+ --tw-space-y-reverse: 0;
1095
+ --tw-border-style: solid;
1096
+ --tw-leading: initial;
1097
+ --tw-font-weight: initial;
1098
+ --tw-tracking: initial;
1099
+ --tw-shadow: 0 0 #0000;
1100
+ --tw-shadow-color: initial;
1101
+ --tw-shadow-alpha: 100%;
1102
+ --tw-inset-shadow: 0 0 #0000;
1103
+ --tw-inset-shadow-color: initial;
1104
+ --tw-inset-shadow-alpha: 100%;
1105
+ --tw-ring-color: initial;
1106
+ --tw-ring-shadow: 0 0 #0000;
1107
+ --tw-inset-ring-color: initial;
1108
+ --tw-inset-ring-shadow: 0 0 #0000;
1109
+ --tw-ring-inset: initial;
1110
+ --tw-ring-offset-width: 0px;
1111
+ --tw-ring-offset-color: #fff;
1112
+ --tw-ring-offset-shadow: 0 0 #0000;
1113
+ --tw-blur: initial;
1114
+ --tw-brightness: initial;
1115
+ --tw-contrast: initial;
1116
+ --tw-grayscale: initial;
1117
+ --tw-hue-rotate: initial;
1118
+ --tw-invert: initial;
1119
+ --tw-opacity: initial;
1120
+ --tw-saturate: initial;
1121
+ --tw-sepia: initial;
1122
+ --tw-drop-shadow: initial;
1123
+ --tw-drop-shadow-color: initial;
1124
+ --tw-drop-shadow-alpha: 100%;
1125
+ --tw-drop-shadow-size: initial;
1126
+ }
1127
+ }
1128
+ }