@castlemilk/omega 0.1.3 → 0.1.5

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 (37) hide show
  1. package/dist/cli.js +71 -15
  2. package/dist/server.js +418 -0
  3. package/dist/web/App.d.ts +3 -0
  4. package/dist/web/App.d.ts.map +1 -0
  5. package/dist/web/App.js +39 -0
  6. package/dist/web/App.js.map +1 -0
  7. package/dist/web/assets/index-BD8kY1aj.css +1 -0
  8. package/dist/web/assets/index-Dkm6k3Ip.js +40 -0
  9. package/dist/web/components/ProjectSidebar.d.ts +18 -0
  10. package/dist/web/components/ProjectSidebar.d.ts.map +1 -0
  11. package/dist/web/components/ProjectSidebar.js +16 -0
  12. package/dist/web/components/ProjectSidebar.js.map +1 -0
  13. package/dist/web/components/ProviderSettings.d.ts +16 -0
  14. package/dist/web/components/ProviderSettings.d.ts.map +1 -0
  15. package/dist/web/components/ProviderSettings.js +41 -0
  16. package/dist/web/components/ProviderSettings.js.map +1 -0
  17. package/dist/web/components/RouterPanel.d.ts +2 -0
  18. package/dist/web/components/RouterPanel.d.ts.map +1 -0
  19. package/dist/web/components/RouterPanel.js +31 -0
  20. package/dist/web/components/RouterPanel.js.map +1 -0
  21. package/dist/web/components/TaskBoard.d.ts +20 -0
  22. package/dist/web/components/TaskBoard.d.ts.map +1 -0
  23. package/dist/web/components/TaskBoard.js +60 -0
  24. package/dist/web/components/TaskBoard.js.map +1 -0
  25. package/dist/web/dist/assets/index-BD8kY1aj.css +1 -0
  26. package/dist/web/dist/assets/index-Dkm6k3Ip.js +40 -0
  27. package/dist/web/dist/index.html +13 -0
  28. package/dist/web/index.html +13 -0
  29. package/dist/web/lib/api.d.ts +30 -0
  30. package/dist/web/lib/api.d.ts.map +1 -0
  31. package/dist/web/lib/api.js +27 -0
  32. package/dist/web/lib/api.js.map +1 -0
  33. package/dist/web/main.d.ts +2 -0
  34. package/dist/web/main.d.ts.map +1 -0
  35. package/dist/web/main.js +7 -0
  36. package/dist/web/main.js.map +1 -0
  37. package/package.json +10 -4
@@ -0,0 +1,31 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { api } from '../lib/api.js';
4
+ export function RouterPanel() {
5
+ const [form, setForm] = useState({ title: '', complexity: 'simple', tags: '' });
6
+ const [result, setResult] = useState(null);
7
+ const [error, setError] = useState('');
8
+ const [loading, setLoading] = useState(false);
9
+ async function handleSubmit(e) {
10
+ e.preventDefault();
11
+ setLoading(true);
12
+ setError('');
13
+ setResult(null);
14
+ try {
15
+ const data = await api.selectProvider({
16
+ title: form.title,
17
+ complexity: form.complexity,
18
+ tags: form.tags.split(',').map((t) => t.trim()).filter(Boolean),
19
+ });
20
+ setResult(data);
21
+ }
22
+ catch (err) {
23
+ setError(err instanceof Error ? err.message : String(err));
24
+ }
25
+ finally {
26
+ setLoading(false);
27
+ }
28
+ }
29
+ return (_jsxs("div", { className: "p-4", children: [_jsx("h3", { className: "font-semibold text-sm mb-3", children: "Route preview" }), _jsxs("form", { onSubmit: handleSubmit, className: "space-y-2", children: [_jsx("input", { className: "w-full border rounded px-2 py-1 text-xs", placeholder: "Task title", value: form.title, onChange: (e) => setForm({ ...form, title: e.target.value }), required: true }), _jsxs("select", { className: "w-full border rounded px-2 py-1 text-xs", value: form.complexity, onChange: (e) => setForm({ ...form, complexity: e.target.value }), children: [_jsx("option", { value: "simple", children: "Simple" }), _jsx("option", { value: "medium", children: "Medium" }), _jsx("option", { value: "complex", children: "Complex" })] }), _jsx("input", { className: "w-full border rounded px-2 py-1 text-xs", placeholder: "Tags (comma separated)", value: form.tags, onChange: (e) => setForm({ ...form, tags: e.target.value }) }), _jsx("button", { type: "submit", disabled: loading, className: "w-full px-2 py-1 bg-purple-600 text-white rounded text-xs hover:bg-purple-700 disabled:opacity-50", children: loading ? 'Routing…' : 'Select provider' })] }), result && (_jsxs("div", { className: "mt-3 p-2 bg-purple-50 rounded text-xs", children: [_jsx("div", { className: "font-medium text-purple-800", children: "Selected" }), _jsxs("div", { children: [result.provider, " / ", result.model] })] })), error && _jsx("div", { className: "mt-3 text-xs text-red-600", children: error })] }));
30
+ }
31
+ //# sourceMappingURL=RouterPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RouterPanel.js","sourceRoot":"","sources":["../../src/components/RouterPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface Task {
2
+ id: string;
3
+ projectId: string;
4
+ title: string;
5
+ description?: string;
6
+ status: string;
7
+ complexity: string;
8
+ tags?: string;
9
+ provider?: string | null;
10
+ model?: string | null;
11
+ result?: string | null;
12
+ error?: string | null;
13
+ createdAt: string;
14
+ }
15
+ interface Props {
16
+ projectId?: string;
17
+ }
18
+ export declare function TaskBoard({ projectId }: Props): import("react").JSX.Element;
19
+ export {};
20
+ //# sourceMappingURL=TaskBoard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskBoard.d.ts","sourceRoot":"","sources":["../../src/components/TaskBoard.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,KAAK;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,+BA4J7C"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { api } from '../lib/api.js';
4
+ const statuses = ['todo', 'in_progress', 'done', 'failed'];
5
+ export function TaskBoard({ projectId }) {
6
+ const [tasks, setTasks] = useState([]);
7
+ const [loading, setLoading] = useState(false);
8
+ const [form, setForm] = useState({
9
+ title: '',
10
+ description: '',
11
+ complexity: 'simple',
12
+ tags: '',
13
+ });
14
+ async function load() {
15
+ if (!projectId)
16
+ return;
17
+ setLoading(true);
18
+ const data = await api.getTasks(projectId);
19
+ setTasks(data);
20
+ setLoading(false);
21
+ }
22
+ useEffect(() => {
23
+ load();
24
+ }, [projectId]);
25
+ async function handleCreate(e) {
26
+ e.preventDefault();
27
+ if (!projectId)
28
+ return;
29
+ await api.createTask({
30
+ projectId,
31
+ title: form.title,
32
+ description: form.description,
33
+ complexity: form.complexity,
34
+ tags: form.tags.split(',').map((t) => t.trim()).filter(Boolean),
35
+ });
36
+ setForm({ title: '', description: '', complexity: 'simple', tags: '' });
37
+ await load();
38
+ }
39
+ async function handleRun(id) {
40
+ await api.runTask(id);
41
+ await load();
42
+ }
43
+ function tagsList(t) {
44
+ if (!t.tags)
45
+ return [];
46
+ try {
47
+ return JSON.parse(t.tags);
48
+ }
49
+ catch {
50
+ return [];
51
+ }
52
+ }
53
+ if (!projectId) {
54
+ return (_jsx("div", { className: "flex-1 flex items-center justify-center text-gray-400", children: "Select a project to view tasks" }));
55
+ }
56
+ return (_jsxs("main", { className: "flex-1 flex flex-col h-screen overflow-hidden", children: [_jsx("header", { className: "px-6 py-4 border-b border-gray-200 bg-white", children: _jsx("h2", { className: "text-xl font-semibold", children: "Tasks" }) }), _jsx("div", { className: "p-4 bg-gray-50 border-b border-gray-200", children: _jsxs("form", { onSubmit: handleCreate, className: "flex flex-wrap gap-2 items-end", children: [_jsx("input", { className: "border rounded px-3 py-1.5 text-sm flex-1 min-w-[200px]", placeholder: "Task title", value: form.title, onChange: (e) => setForm({ ...form, title: e.target.value }), required: true }), _jsx("input", { className: "border rounded px-3 py-1.5 text-sm flex-1 min-w-[200px]", placeholder: "Description", value: form.description, onChange: (e) => setForm({ ...form, description: e.target.value }) }), _jsxs("select", { className: "border rounded px-3 py-1.5 text-sm", value: form.complexity, onChange: (e) => setForm({ ...form, complexity: e.target.value }), children: [_jsx("option", { value: "simple", children: "Simple" }), _jsx("option", { value: "medium", children: "Medium" }), _jsx("option", { value: "complex", children: "Complex" })] }), _jsx("input", { className: "border rounded px-3 py-1.5 text-sm w-32", placeholder: "Tags", value: form.tags, onChange: (e) => setForm({ ...form, tags: e.target.value }) }), _jsx("button", { type: "submit", className: "px-4 py-1.5 bg-blue-600 text-white rounded text-sm hover:bg-blue-700", children: "Add task" })] }) }), _jsx("div", { className: "flex-1 overflow-x-auto p-4", children: loading ? (_jsx("div", { className: "text-sm text-gray-500", children: "Loading tasks\u2026" })) : (_jsx("div", { className: "grid grid-cols-4 gap-4 min-w-[800px]", children: statuses.map((status) => (_jsxs("div", { className: "bg-gray-100 rounded-lg p-3", children: [_jsx("h3", { className: "text-xs font-bold uppercase tracking-wide text-gray-500 mb-3", children: status.replace('_', ' ') }), _jsx("div", { className: "space-y-2", children: tasks
57
+ .filter((t) => t.status === status)
58
+ .map((t) => (_jsxs("div", { className: "bg-white rounded-md p-3 shadow-sm text-sm", children: [_jsx("div", { className: "font-medium mb-1", children: t.title }), t.description && (_jsx("div", { className: "text-gray-500 text-xs mb-2 line-clamp-2", children: t.description })), _jsxs("div", { className: "flex flex-wrap gap-1 mb-2", children: [_jsx("span", { className: "px-1.5 py-0.5 bg-gray-200 rounded text-xs", children: t.complexity }), tagsList(t).map((tag) => (_jsx("span", { className: "px-1.5 py-0.5 bg-blue-100 text-blue-700 rounded text-xs", children: tag }, tag)))] }), t.provider && (_jsxs("div", { className: "text-xs text-gray-400 mb-2", children: [t.provider, "/", t.model] })), t.error && _jsx("div", { className: "text-xs text-red-600 mb-2", children: t.error }), t.result && (_jsx("div", { className: "text-xs text-gray-700 bg-gray-50 p-2 rounded mb-2 max-h-32 overflow-auto", children: t.result })), status !== 'in_progress' && (_jsx("button", { onClick: () => handleRun(t.id), className: "w-full px-2 py-1 bg-green-600 text-white rounded text-xs hover:bg-green-700", children: "Run" }))] }, t.id))) })] }, status))) })) })] }));
59
+ }
60
+ //# sourceMappingURL=TaskBoard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskBoard.js","sourceRoot":"","sources":["../../src/components/TaskBoard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mt-3{margin-top:.75rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.flex{display:flex}.grid{display:grid}.h-screen{height:100vh}.max-h-32{max-height:8rem}.w-32{width:8rem}.w-72{width:18rem}.w-80{width:20rem}.w-full{width:100%}.w-screen{width:100vw}.min-w-\[200px\]{min-width:200px}.min-w-\[800px\]{min-width:800px}.flex-1{flex:1 1 0%}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-red-100{--tw-border-opacity: 1;border-color:rgb(254 226 226 / var(--tw-border-opacity, 1))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-purple-50{--tw-bg-opacity: 1;background-color:rgb(250 245 255 / var(--tw-bg-opacity, 1))}.bg-purple-600{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.text-left{text-align:left}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tracking-wide{letter-spacing:.025em}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),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)}body{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-green-700:hover{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity, 1))}.hover\:bg-purple-700:hover{--tw-bg-opacity: 1;background-color:rgb(126 34 206 / var(--tw-bg-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.disabled\:opacity-50:disabled{opacity:.5}