@herdctl/web 0.0.1 → 0.1.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/dist/client/assets/index-Cyochp2F.css +1 -0
  4. package/dist/client/assets/index-mp9jz5eD.js +373 -0
  5. package/dist/client/favicon.ico +0 -0
  6. package/dist/client/favicon.svg +1 -0
  7. package/dist/client/herdctl-logo.svg +29 -0
  8. package/dist/client/index.html +21 -0
  9. package/dist/server/__tests__/routes.test.d.ts +8 -0
  10. package/dist/server/__tests__/routes.test.d.ts.map +1 -0
  11. package/dist/server/__tests__/routes.test.js +535 -0
  12. package/dist/server/__tests__/routes.test.js.map +1 -0
  13. package/dist/server/__tests__/ws-handler.test.d.ts +7 -0
  14. package/dist/server/__tests__/ws-handler.test.d.ts.map +1 -0
  15. package/dist/server/__tests__/ws-handler.test.js +380 -0
  16. package/dist/server/__tests__/ws-handler.test.js.map +1 -0
  17. package/dist/server/chat/index.d.ts +5 -0
  18. package/dist/server/chat/index.d.ts.map +1 -0
  19. package/dist/server/chat/index.js +5 -0
  20. package/dist/server/chat/index.js.map +1 -0
  21. package/dist/server/chat/web-chat-manager.d.ts +158 -0
  22. package/dist/server/chat/web-chat-manager.d.ts.map +1 -0
  23. package/dist/server/chat/web-chat-manager.js +437 -0
  24. package/dist/server/chat/web-chat-manager.js.map +1 -0
  25. package/dist/server/index.d.ts +144 -0
  26. package/dist/server/index.d.ts.map +1 -0
  27. package/dist/server/index.js +341 -0
  28. package/dist/server/index.js.map +1 -0
  29. package/dist/server/routes/agents.d.ts +15 -0
  30. package/dist/server/routes/agents.d.ts.map +1 -0
  31. package/dist/server/routes/agents.js +66 -0
  32. package/dist/server/routes/agents.js.map +1 -0
  33. package/dist/server/routes/chat.d.ts +18 -0
  34. package/dist/server/routes/chat.d.ts.map +1 -0
  35. package/dist/server/routes/chat.js +191 -0
  36. package/dist/server/routes/chat.js.map +1 -0
  37. package/dist/server/routes/fleet.d.ts +15 -0
  38. package/dist/server/routes/fleet.d.ts.map +1 -0
  39. package/dist/server/routes/fleet.js +36 -0
  40. package/dist/server/routes/fleet.js.map +1 -0
  41. package/dist/server/routes/jobs.d.ts +17 -0
  42. package/dist/server/routes/jobs.d.ts.map +1 -0
  43. package/dist/server/routes/jobs.js +188 -0
  44. package/dist/server/routes/jobs.js.map +1 -0
  45. package/dist/server/routes/schedules.d.ts +16 -0
  46. package/dist/server/routes/schedules.d.ts.map +1 -0
  47. package/dist/server/routes/schedules.js +126 -0
  48. package/dist/server/routes/schedules.js.map +1 -0
  49. package/dist/server/ws/fleet-bridge.d.ts +80 -0
  50. package/dist/server/ws/fleet-bridge.d.ts.map +1 -0
  51. package/dist/server/ws/fleet-bridge.js +184 -0
  52. package/dist/server/ws/fleet-bridge.js.map +1 -0
  53. package/dist/server/ws/handler.d.ts +93 -0
  54. package/dist/server/ws/handler.d.ts.map +1 -0
  55. package/dist/server/ws/handler.js +270 -0
  56. package/dist/server/ws/handler.js.map +1 -0
  57. package/dist/server/ws/index.d.ts +8 -0
  58. package/dist/server/ws/index.d.ts.map +1 -0
  59. package/dist/server/ws/index.js +8 -0
  60. package/dist/server/ws/index.js.map +1 -0
  61. package/dist/server/ws/types.d.ts +215 -0
  62. package/dist/server/ws/types.d.ts.map +1 -0
  63. package/dist/server/ws/types.js +67 -0
  64. package/dist/server/ws/types.js.map +1 -0
  65. package/package.json +77 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Egghead Research
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,146 @@
1
+ # @herdctl/web
2
+
3
+ > Web dashboard for herdctl fleet management
4
+
5
+ [![npm version](https://img.shields.io/npm/v/@herdctl/web.svg)](https://www.npmjs.com/package/@herdctl/web)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
7
+
8
+ **Documentation**: [herdctl.dev](https://herdctl.dev)
9
+
10
+ ## Overview
11
+
12
+ `@herdctl/web` provides a real-time web dashboard for monitoring and managing your [herdctl](https://herdctl.dev) agent fleet. View agent status, trigger and manage jobs, chat with agents, and control schedules - all from your browser with live updates via WebSocket.
13
+
14
+ Herdctl is an open-source system for running fleets of autonomous AI agents powered by Claude Code. This package is part of the herdctl monorepo.
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install @herdctl/web
20
+ ```
21
+
22
+ > **Note**: The dashboard is typically started automatically via the `herdctl` CLI. Direct installation is only needed for programmatic use.
23
+
24
+ ## Quick Start
25
+
26
+ ### Via CLI (Recommended)
27
+
28
+ ```bash
29
+ # Start your fleet with the web dashboard enabled
30
+ herdctl start --web
31
+
32
+ # Or specify a custom port
33
+ herdctl start --web --web-port 3200
34
+ ```
35
+
36
+ ### Via Configuration
37
+
38
+ Add web dashboard settings to your `herdctl.yaml`:
39
+
40
+ ```yaml
41
+ fleet:
42
+ name: my-fleet
43
+ web:
44
+ enabled: true
45
+ port: 3100 # Default port
46
+ host: "0.0.0.0" # Default host
47
+ ```
48
+
49
+ Then start your fleet normally:
50
+
51
+ ```bash
52
+ herdctl start
53
+ ```
54
+
55
+ ### Programmatic Usage
56
+
57
+ ```typescript
58
+ import { FleetManager } from "@herdctl/core";
59
+ import { WebManager } from "@herdctl/web";
60
+
61
+ const fleet = new FleetManager({ configPath: "./herdctl.yaml" });
62
+ await fleet.initialize();
63
+
64
+ const web = new WebManager(fleet, {
65
+ port: 3100,
66
+ host: "0.0.0.0",
67
+ stateDir: ".herdctl",
68
+ });
69
+
70
+ await web.initialize();
71
+ await web.start();
72
+ // Dashboard available at http://localhost:3100
73
+ ```
74
+
75
+ ## Features
76
+
77
+ ### Fleet Dashboard
78
+ - Real-time fleet status with uptime, agent counts, and job statistics
79
+ - Agent cards showing current status, schedule count, and recent activity
80
+ - Recent jobs feed with status indicators
81
+
82
+ ### Agent Detail Pages
83
+ - Agent configuration and metadata
84
+ - Job history with pagination and filtering
85
+ - Live output streaming from running jobs
86
+ - DiceBear-generated avatars for each agent
87
+
88
+ ### Chat with Agents
89
+ - Interactive conversations with any agent
90
+ - Session management with conversation history
91
+ - Streaming responses via WebSocket
92
+ - Create, resume, and delete chat sessions
93
+
94
+ ### Schedule Management
95
+ - View all schedules across agents
96
+ - Enable and disable schedules
97
+ - Manually trigger schedules
98
+ - See last run and next run times
99
+
100
+ ### Job Control
101
+ - Trigger jobs manually with custom prompts
102
+ - Cancel running jobs
103
+ - Fork existing jobs with optional prompt overrides
104
+ - Copy CLI commands for any job
105
+
106
+ ### Real-Time Updates
107
+ - WebSocket connection for live fleet events
108
+ - Job status changes broadcast instantly
109
+ - Agent output streaming to subscribed clients
110
+ - Connection status indicator with auto-reconnect
111
+
112
+ ## REST API
113
+
114
+ The dashboard exposes a REST API for programmatic access:
115
+
116
+ | Endpoint | Description |
117
+ |----------|-------------|
118
+ | `GET /api/fleet/status` | Fleet status snapshot |
119
+ | `GET /api/agents` | List all agents |
120
+ | `GET /api/agents/:name` | Agent detail |
121
+ | `POST /api/agents/:name/trigger` | Trigger a job |
122
+ | `GET /api/jobs` | List jobs (with pagination/filtering) |
123
+ | `POST /api/jobs/:id/cancel` | Cancel a job |
124
+ | `POST /api/jobs/:id/fork` | Fork a job |
125
+ | `GET /api/schedules` | List all schedules |
126
+ | `POST /api/schedules/:agent/:schedule/enable` | Enable a schedule |
127
+ | `POST /api/schedules/:agent/:schedule/disable` | Disable a schedule |
128
+
129
+ ## Documentation
130
+
131
+ For complete setup instructions, visit [herdctl.dev](https://herdctl.dev):
132
+
133
+ - [Web Dashboard Guide](https://herdctl.dev/integrations/web-dashboard/)
134
+ - [Fleet Configuration](https://herdctl.dev/configuration/fleet-config/)
135
+
136
+ ## Related Packages
137
+
138
+ - [`herdctl`](https://www.npmjs.com/package/herdctl) - CLI for running agent fleets
139
+ - [`@herdctl/core`](https://www.npmjs.com/package/@herdctl/core) - Core library for programmatic use
140
+ - [`@herdctl/chat`](https://www.npmjs.com/package/@herdctl/chat) - Shared chat infrastructure (used internally)
141
+ - [`@herdctl/discord`](https://www.npmjs.com/package/@herdctl/discord) - Discord connector
142
+ - [`@herdctl/slack`](https://www.npmjs.com/package/@herdctl/slack) - Slack connector
143
+
144
+ ## License
145
+
146
+ MIT
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */@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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking: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;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:"IBM Plex Sans",system-ui,-apple-system,sans-serif;--font-serif:"Lora",Georgia,"Times New Roman",serif;--font-mono:"IBM Plex Mono","SF Mono","Cascadia Code","Fira Code",Menlo,monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--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-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--radius-md:.375rem;--radius-lg:.5rem;--radius-2xl:1rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-herd-bg:#f7f8fa;--color-herd-fg:#1c1b18;--color-herd-card:#fff;--color-herd-sidebar:#1e2330;--color-herd-border:#0000001a;--color-herd-input-bg:#fff;--color-herd-hover:#0000000d;--color-herd-active:#00000014;--color-herd-muted:#6b7280;--color-herd-primary:#326ce5;--color-herd-primary-hover:#2856b8;--color-herd-primary-muted:#326ce51a;--color-herd-user-bubble:#e2e4e9;--color-herd-code-bg:#1e1e1e;--color-herd-code-fg:#d4d4d4;--color-herd-status-running:#2d7d46;--color-herd-status-idle:#6b7280;--color-herd-status-error:#c53030;--color-herd-status-pending:#b7791f;--color-herd-sidebar-fg:#e2e4e9;--color-herd-sidebar-muted:#8b92a0;--color-herd-sidebar-border:#ffffff14;--color-herd-sidebar-hover:#ffffff0f;--color-herd-sidebar-active:#ffffff1a;--color-herd-discord:#5865f2;--color-herd-slack:#611f69;--animate-fade-slide-in:fadeSlideIn .15s ease-out}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;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");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.bottom-4{bottom:calc(var(--spacing)*4)}.left-0{left:calc(var(--spacing)*0)}.left-3{left:calc(var(--spacing)*3)}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.my-3{margin-block:calc(var(--spacing)*3)}.my-4{margin-block:calc(var(--spacing)*4)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-auto{margin-top:auto}.mr-1{margin-right:calc(var(--spacing)*1)}.-mb-px{margin-bottom:-1px}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-1\.5{margin-left:calc(var(--spacing)*1.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1{height:calc(var(--spacing)*1)}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-dvh{height:100dvh}.h-full{height:100%}.max-h-\[500px\]{max-height:500px}.min-h-\[32px\]{min-height:32px}.min-h-\[200px\]{min-height:200px}.w-1{width:calc(var(--spacing)*1)}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-24{width:calc(var(--spacing)*24)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-\[250px\]{width:250px}.w-\[260px\]{width:260px}.w-\[320px\]{width:320px}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[85\%\]{max-width:85%}.max-w-\[200px\]{max-width:200px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-\[360px\]{max-width:360px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[140px\]{min-width:140px}.min-w-\[180px\]{min-width:180px}.min-w-\[240px\]{min-width:240px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-90{rotate:90deg}.animate-\[fadeSlideIn_150ms_ease-out\]{animation:.15s ease-out fadeSlideIn}.animate-fade-slide-in{animation:var(--animate-fade-slide-in)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-herd-border>:not(:last-child)){border-color:var(--color-herd-border)}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-br-md{border-bottom-right-radius:var(--radius-md)}.rounded-bl-md{border-bottom-left-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[3px\]{border-style:var(--tw-border-style);border-width:3px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-herd-border{border-color:var(--color-herd-border)}.border-herd-muted{border-color:var(--color-herd-muted)}.border-herd-primary{border-color:var(--color-herd-primary)}.border-herd-primary\/20{border-color:#326ce533}@supports (color:color-mix(in lab,red,red)){.border-herd-primary\/20{border-color:color-mix(in oklab,var(--color-herd-primary)20%,transparent)}}.border-herd-sidebar-border{border-color:var(--color-herd-sidebar-border)}.border-herd-status-error\/20{border-color:#c5303033}@supports (color:color-mix(in lab,red,red)){.border-herd-status-error\/20{border-color:color-mix(in oklab,var(--color-herd-status-error)20%,transparent)}}.border-herd-status-pending\/20{border-color:#b7791f33}@supports (color:color-mix(in lab,red,red)){.border-herd-status-pending\/20{border-color:color-mix(in oklab,var(--color-herd-status-pending)20%,transparent)}}.border-herd-status-running\/20{border-color:#2d7d4633}@supports (color:color-mix(in lab,red,red)){.border-herd-status-running\/20{border-color:color-mix(in oklab,var(--color-herd-status-running)20%,transparent)}}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-herd-active{background-color:var(--color-herd-active)}.bg-herd-bg{background-color:var(--color-herd-bg)}.bg-herd-border{background-color:var(--color-herd-border)}.bg-herd-card{background-color:var(--color-herd-card)}.bg-herd-code-bg{background-color:var(--color-herd-code-bg)}.bg-herd-discord\/10{background-color:#5865f21a}@supports (color:color-mix(in lab,red,red)){.bg-herd-discord\/10{background-color:color-mix(in oklab,var(--color-herd-discord)10%,transparent)}}.bg-herd-hover{background-color:var(--color-herd-hover)}.bg-herd-input-bg{background-color:var(--color-herd-input-bg)}.bg-herd-muted{background-color:var(--color-herd-muted)}.bg-herd-primary{background-color:var(--color-herd-primary)}.bg-herd-primary-muted{background-color:var(--color-herd-primary-muted)}.bg-herd-sidebar{background-color:var(--color-herd-sidebar)}.bg-herd-sidebar-active{background-color:var(--color-herd-sidebar-active)}.bg-herd-sidebar-hover{background-color:var(--color-herd-sidebar-hover)}.bg-herd-slack\/10{background-color:#611f691a}@supports (color:color-mix(in lab,red,red)){.bg-herd-slack\/10{background-color:color-mix(in oklab,var(--color-herd-slack)10%,transparent)}}.bg-herd-status-error{background-color:var(--color-herd-status-error)}.bg-herd-status-error\/10{background-color:#c530301a}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-error\/10{background-color:color-mix(in oklab,var(--color-herd-status-error)10%,transparent)}}.bg-herd-status-error\/15{background-color:#c5303026}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-error\/15{background-color:color-mix(in oklab,var(--color-herd-status-error)15%,transparent)}}.bg-herd-status-error\/20{background-color:#c5303033}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-error\/20{background-color:color-mix(in oklab,var(--color-herd-status-error)20%,transparent)}}.bg-herd-status-idle{background-color:var(--color-herd-status-idle)}.bg-herd-status-pending{background-color:var(--color-herd-status-pending)}.bg-herd-status-pending\/15{background-color:#b7791f26}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-pending\/15{background-color:color-mix(in oklab,var(--color-herd-status-pending)15%,transparent)}}.bg-herd-status-running{background-color:var(--color-herd-status-running)}.bg-herd-status-running\/10{background-color:#2d7d461a}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-running\/10{background-color:color-mix(in oklab,var(--color-herd-status-running)10%,transparent)}}.bg-herd-status-running\/15{background-color:#2d7d4626}@supports (color:color-mix(in lab,red,red)){.bg-herd-status-running\/15{background-color:color-mix(in oklab,var(--color-herd-status-running)15%,transparent)}}.bg-herd-user-bubble{background-color:var(--color-herd-user-bubble)}.p-0\.5{padding:calc(var(--spacing)*.5)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-9{padding-left:calc(var(--spacing)*9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.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))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-herd-code-fg{color:var(--color-herd-code-fg)}.text-herd-code-fg\/60{color:#d4d4d499}@supports (color:color-mix(in lab,red,red)){.text-herd-code-fg\/60{color:color-mix(in oklab,var(--color-herd-code-fg)60%,transparent)}}.text-herd-discord{color:var(--color-herd-discord)}.text-herd-fg{color:var(--color-herd-fg)}.text-herd-muted{color:var(--color-herd-muted)}.text-herd-muted\/60{color:#6b728099}@supports (color:color-mix(in lab,red,red)){.text-herd-muted\/60{color:color-mix(in oklab,var(--color-herd-muted)60%,transparent)}}.text-herd-primary{color:var(--color-herd-primary)}.text-herd-sidebar-fg{color:var(--color-herd-sidebar-fg)}.text-herd-sidebar-fg\/80{color:#e2e4e9cc}@supports (color:color-mix(in lab,red,red)){.text-herd-sidebar-fg\/80{color:color-mix(in oklab,var(--color-herd-sidebar-fg)80%,transparent)}}.text-herd-sidebar-muted{color:var(--color-herd-sidebar-muted)}.text-herd-sidebar-muted\/50{color:#8b92a080}@supports (color:color-mix(in lab,red,red)){.text-herd-sidebar-muted\/50{color:color-mix(in oklab,var(--color-herd-sidebar-muted)50%,transparent)}}.text-herd-sidebar-muted\/60{color:#8b92a099}@supports (color:color-mix(in lab,red,red)){.text-herd-sidebar-muted\/60{color:color-mix(in oklab,var(--color-herd-sidebar-muted)60%,transparent)}}.text-herd-slack{color:var(--color-herd-slack)}.text-herd-status-error{color:var(--color-herd-status-error)}.text-herd-status-idle{color:var(--color-herd-status-idle)}.text-herd-status-pending{color:var(--color-herd-status-pending)}.text-herd-status-running{color:var(--color-herd-status-running)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-50{opacity:.5}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}.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)}.filter{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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-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,);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,)}.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))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-herd-muted::placeholder{color:var(--color-herd-muted)}.last\:mb-0:last-child{margin-bottom:calc(var(--spacing)*0)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-herd-border:hover{border-color:var(--color-herd-border)}.hover\:border-herd-primary\/30:hover{border-color:#326ce54d}@supports (color:color-mix(in lab,red,red)){.hover\:border-herd-primary\/30:hover{border-color:color-mix(in oklab,var(--color-herd-primary)30%,transparent)}}.hover\:bg-herd-active:hover{background-color:var(--color-herd-active)}.hover\:bg-herd-hover:hover{background-color:var(--color-herd-hover)}.hover\:bg-herd-primary-hover:hover{background-color:var(--color-herd-primary-hover)}.hover\:bg-herd-primary\/30:hover{background-color:#326ce54d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-herd-primary\/30:hover{background-color:color-mix(in oklab,var(--color-herd-primary)30%,transparent)}}.hover\:bg-herd-sidebar-hover:hover{background-color:var(--color-herd-sidebar-hover)}.hover\:bg-herd-status-error\/30:hover{background-color:#c530304d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-herd-status-error\/30:hover{background-color:color-mix(in oklab,var(--color-herd-status-error)30%,transparent)}}.hover\:bg-herd-status-error\/80:hover{background-color:#c53030cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-herd-status-error\/80:hover{background-color:color-mix(in oklab,var(--color-herd-status-error)80%,transparent)}}.hover\:text-herd-code-fg:hover{color:var(--color-herd-code-fg)}.hover\:text-herd-fg:hover{color:var(--color-herd-fg)}.hover\:text-herd-primary:hover{color:var(--color-herd-primary)}.hover\:text-herd-primary-hover:hover{color:var(--color-herd-primary-hover)}.hover\:text-herd-sidebar-fg:hover{color:var(--color-herd-sidebar-fg)}.hover\:text-herd-status-error:hover{color:var(--color-herd-status-error)}.hover\:text-herd-status-error\/80:hover{color:#c53030cc}@supports (color:color-mix(in lab,red,red)){.hover\:text-herd-status-error\/80:hover{color:color-mix(in oklab,var(--color-herd-status-error)80%,transparent)}}.hover\:text-herd-status-running:hover{color:var(--color-herd-status-running)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-herd-primary\/60:focus{border-color:#326ce599}@supports (color:color-mix(in lab,red,red)){.focus\:border-herd-primary\/60:focus{border-color:color-mix(in oklab,var(--color-herd-primary)60%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:h-16{height:calc(var(--spacing)*16)}.sm\:w-16{width:calc(var(--spacing)*16)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:48rem){.md\:block{display:block}.md\:hidden{display:none}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}.dark{--color-herd-bg:#1c1b18;--color-herd-fg:#e8e6e1;--color-herd-card:#252320;--color-herd-sidebar:#141516;--color-herd-border:#ffffff14;--color-herd-input-bg:#252320;--color-herd-hover:#ffffff0d;--color-herd-active:#ffffff14;--color-herd-muted:#8a877f;--color-herd-primary:#5b8def;--color-herd-primary-hover:#7aa3f5;--color-herd-primary-muted:#5b8def1f;--color-herd-user-bubble:#353330;--color-herd-code-bg:#141413;--color-herd-code-fg:#d4d4d4;--color-herd-status-running:#48bb78;--color-herd-status-idle:#8a877f;--color-herd-status-error:#fc8181;--color-herd-status-pending:#f6e05e;--color-herd-sidebar-fg:#e8e6e1;--color-herd-sidebar-muted:#8a877f;--color-herd-sidebar-border:#ffffff14;--color-herd-sidebar-hover:#ffffff0d;--color-herd-sidebar-active:#ffffff14;--color-herd-discord:#7289da;--color-herd-slack:#e01e5a}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-herd-border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-herd-muted)}*{scrollbar-width:thin;scrollbar-color:var(--color-herd-border)transparent}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}