@useorgx/openclaw-plugin 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +16 -1
  2. package/dashboard/dist/assets/index-BrAP-X_H.css +1 -0
  3. package/dashboard/dist/assets/index-cOk6qwh-.js +56 -0
  4. package/dashboard/dist/assets/orgx-logo-QSE5QWy4.png +0 -0
  5. package/dashboard/dist/brand/anthropic-mark.svg +10 -0
  6. package/dashboard/dist/brand/control-tower.png +0 -0
  7. package/dashboard/dist/brand/design-codex.png +0 -0
  8. package/dashboard/dist/brand/engineering-autopilot.png +0 -0
  9. package/dashboard/dist/brand/launch-captain.png +0 -0
  10. package/dashboard/dist/brand/openai-mark.svg +10 -0
  11. package/dashboard/dist/brand/openclaw-mark.svg +11 -0
  12. package/dashboard/dist/brand/orgx-logo.png +0 -0
  13. package/dashboard/dist/brand/pipeline-intelligence.png +0 -0
  14. package/dashboard/dist/brand/product-orchestrator.png +0 -0
  15. package/dashboard/dist/index.html +2 -2
  16. package/dist/api.d.ts +51 -1
  17. package/dist/api.d.ts.map +1 -1
  18. package/dist/api.js +105 -15
  19. package/dist/api.js.map +1 -1
  20. package/dist/auth-store.d.ts +20 -0
  21. package/dist/auth-store.d.ts.map +1 -0
  22. package/dist/auth-store.js +128 -0
  23. package/dist/auth-store.js.map +1 -0
  24. package/dist/dashboard-api.d.ts +2 -7
  25. package/dist/dashboard-api.d.ts.map +1 -1
  26. package/dist/dashboard-api.js +2 -4
  27. package/dist/dashboard-api.js.map +1 -1
  28. package/dist/http-handler.d.ts +32 -3
  29. package/dist/http-handler.d.ts.map +1 -1
  30. package/dist/http-handler.js +1849 -35
  31. package/dist/http-handler.js.map +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1453 -44
  34. package/dist/index.js.map +1 -1
  35. package/dist/local-openclaw.d.ts +87 -0
  36. package/dist/local-openclaw.d.ts.map +1 -0
  37. package/dist/local-openclaw.js +774 -0
  38. package/dist/local-openclaw.js.map +1 -0
  39. package/dist/openclaw.plugin.json +76 -0
  40. package/dist/outbox.d.ts +20 -0
  41. package/dist/outbox.d.ts.map +1 -0
  42. package/dist/outbox.js +86 -0
  43. package/dist/outbox.js.map +1 -0
  44. package/dist/types.d.ts +165 -0
  45. package/dist/types.d.ts.map +1 -1
  46. package/openclaw.plugin.json +1 -0
  47. package/package.json +4 -2
  48. package/skills/orgx/SKILL.md +180 -0
  49. package/dashboard/dist/assets/index-B_ag4FNd.css +0 -1
  50. package/dashboard/dist/assets/index-CNJpL8Wo.js +0 -40
@@ -0,0 +1,180 @@
1
+ ---
2
+ name: orgx
3
+ description: Use when managing work with OrgX — reporting progress, requesting decisions, registering artifacts, syncing memory, checking quality gates, or viewing org status. Activates for phrases like "report progress", "request approval", "create initiative", "check orgx", "sync with orgx", "register artifact".
4
+ version: 3.0.0
5
+ user-invocable: true
6
+ tags:
7
+ - orchestration
8
+ - multi-agent
9
+ - productivity
10
+ - reporting
11
+ ---
12
+
13
+ # OrgX Integration
14
+
15
+ Connect to OrgX for multi-agent orchestration, decision workflows, initiative tracking, model routing, quality gates, and structured work reporting.
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # Install the plugin
21
+ openclaw plugins install @useorgx/openclaw-plugin
22
+
23
+ # Or via npx
24
+ npx @useorgx/openclaw-plugin
25
+ ```
26
+
27
+ After installing, pair with OrgX via the live dashboard at `http://127.0.0.1:18789/orgx/live` or set `ORGX_API_KEY` in your environment.
28
+
29
+ ## MCP Tools Reference
30
+
31
+ ### Work Reporting (primary contract)
32
+
33
+ Use the **two-tool reporting contract** for launch reporting:
34
+
35
+ **`orgx_emit_activity`** — Append-only telemetry (frequent updates).
36
+ ```
37
+ orgx_emit_activity({
38
+ initiative_id: "aa6d16dc-d450-417f-8a17-fd89bd597195",
39
+ message: "Implemented auth middleware and validated redirects",
40
+ phase: "execution", // intent | execution | blocked | review | handoff | completed
41
+ progress_pct: 60, // optional 0-100
42
+ next_step: "Add integration tests" // optional
43
+ })
44
+ ```
45
+
46
+ **`orgx_apply_changeset`** — Transactional state mutations (batched, idempotent).
47
+ ```
48
+ orgx_apply_changeset({
49
+ initiative_id: "aa6d16dc-d450-417f-8a17-fd89bd597195",
50
+ idempotency_key: "run_abc_turn_7_commit_1",
51
+ operations: [
52
+ { op: "task.update", task_id: "task_uuid", status: "in_progress" },
53
+ { op: "decision.create", title: "Use SSE for live updates", urgency: "medium" }
54
+ ]
55
+ })
56
+ ```
57
+
58
+ Backward-compatible aliases:
59
+ - `orgx_report_progress` delegates to `orgx_emit_activity`
60
+ - `orgx_request_decision` delegates to `orgx_apply_changeset` (`decision.create`)
61
+
62
+ **`orgx_register_artifact`** — Register a deliverable (PR, document, config, etc.).
63
+ ```
64
+ orgx_register_artifact({
65
+ name: "PR #107: Fix Vercel build size",
66
+ artifact_type: "pr", // pr | commit | document | config | report | design | other
67
+ description: "Reduced function size by pruning recursive assets",
68
+ url: "https://github.com/org/repo/pull/107" // (optional)
69
+ })
70
+ ```
71
+
72
+ ### Org Status & Sync
73
+
74
+ **`orgx_status`** — View active initiatives, agent states, pending decisions, tasks.
75
+
76
+ **`orgx_sync`** — Push local memory/daily log to OrgX, receive org context back.
77
+ ```
78
+ orgx_sync({
79
+ memory: "Contents of MEMORY.md",
80
+ dailyLog: "Today's session summary"
81
+ })
82
+ ```
83
+
84
+ ### Quality & Spawning
85
+
86
+ **`orgx_spawn_check`** — Check quality gate + get model routing before spawning a sub-agent.
87
+ ```
88
+ orgx_spawn_check({ domain: "engineering", taskId: "..." })
89
+ // Returns: { allowed: true, modelTier: "sonnet", checks: {...} }
90
+ ```
91
+
92
+ **`orgx_quality_score`** — Record quality score (1-5) for completed work.
93
+ ```
94
+ orgx_quality_score({
95
+ taskId: "...",
96
+ domain: "engineering",
97
+ score: 4,
98
+ notes: "Clean implementation, good test coverage"
99
+ })
100
+ ```
101
+
102
+ ### Entity Management
103
+
104
+ **`orgx_create_entity`** — Create an initiative, workstream, task, decision, milestone, artifact, or blocker.
105
+
106
+ **`orgx_update_entity`** — Update status/fields on any entity.
107
+
108
+ **`orgx_list_entities`** — Query entities by type and status.
109
+
110
+ ### Run Control
111
+
112
+ **`orgx_delegation_preflight`** — Score scope quality and estimate ETA/cost before execution.
113
+
114
+ **`orgx_run_action`** — Pause, resume, cancel, or rollback a run.
115
+
116
+ **`orgx_checkpoints_list`** / **`orgx_checkpoint_restore`** — List and restore run checkpoints.
117
+
118
+ ## Reporting Protocol
119
+
120
+ When working on a task or initiative, follow the two-tool reporting contract. This keeps state deterministic and idempotent.
121
+
122
+ ### On task start
123
+ Call `orgx_emit_activity` with `phase: "intent"` and a brief summary of what you're about to do.
124
+
125
+ ### At meaningful progress points
126
+ Call `orgx_emit_activity` at natural checkpoints: after finishing research, after implementation passes, after tests pass, etc. Include `progress_pct` when possible.
127
+
128
+ ### When you need a human decision
129
+ Call `orgx_apply_changeset` with a `decision.create` operation including clear context/options. Set `blocking: true` when work must pause. Set urgency appropriately:
130
+ - **low** — Can wait hours/days
131
+ - **medium** — Should be decided today
132
+ - **high** — Blocking progress, needs attention soon
133
+ - **urgent** — Critical path, needs immediate attention
134
+
135
+ ### When you produce a deliverable
136
+ Call `orgx_register_artifact` for anything the team should see: PRs, documents, config changes, reports, design files. Include a URL when available.
137
+
138
+ ### On task completion
139
+ 1. Call `orgx_emit_activity` with `phase: "completed"` and `progress_pct: 100`
140
+ 2. Call `orgx_apply_changeset` to mark task/milestone completion or record final decisions
141
+ 3. Call `orgx_quality_score` to self-assess your work (1-5 scale)
142
+
143
+ ### On blockers
144
+ Call `orgx_emit_activity` with `phase: "blocked"` and describe the blocker. If human intervention is needed, use `orgx_apply_changeset` with a `decision.create` op.
145
+
146
+ ## Model Routing
147
+
148
+ OrgX classifies tasks for model selection:
149
+
150
+ | Task Type | Tier | Model |
151
+ |---|---|---|
152
+ | Architecture, strategy, decisions, RFCs | **opus** | `anthropic/claude-opus-4-6` |
153
+ | Implementation, code, features, docs | **sonnet** | `anthropic/claude-sonnet-4` |
154
+ | Status checks, formatting, templates | **local** | `ollama/qwen2.5-coder:32b` |
155
+
156
+ Always call `orgx_spawn_check` before spawning sub-agents to get the right model tier.
157
+
158
+ ## Live Dashboard
159
+
160
+ The plugin serves a live dashboard at `http://127.0.0.1:18789/orgx/live` showing:
161
+ - **Activity Timeline** — Real-time feed of agent work with threaded session views
162
+ - **Agents/Chats** — Active sessions grouped by agent
163
+ - **Decisions** — Pending approvals with inline approve/reject
164
+ - **Initiatives** — Active workstreams and progress
165
+
166
+ ## Entity API
167
+
168
+ For direct API access:
169
+ ```
170
+ GET /api/entities?type={type}&status={status}&limit={n}
171
+ POST /api/entities
172
+ PATCH /api/entities
173
+ POST /api/entities/{type}/{id}/{action}
174
+ ```
175
+
176
+ Entity types: `initiative`, `workstream`, `task`, `decision`, `milestone`, `artifact`, `agent`, `blocker`
177
+
178
+ ## MCP Server (mcp.useorgx.com)
179
+
180
+ For environments that support MCP servers directly (Claude Desktop, Cursor, etc.), connect to `mcp.useorgx.com` for the full suite of 26+ OrgX tools including initiative management, decision workflows, and agent orchestration.
@@ -1 +0,0 @@
1
- @import"https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap";*,: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:Geist,system-ui,-apple-system,sans-serif;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:JetBrains Mono,ui-monospace,SFMono-Regular,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}body{font-family:Geist,system-ui,-apple-system,sans-serif;background:radial-gradient(1200px 700px at 12% -20%,rgba(191,255,0,.14),transparent 58%),radial-gradient(1000px 700px at 90% -20%,rgba(20,184,166,.14),transparent 64%),radial-gradient(900px 600px at 50% 120%,rgba(124,124,255,.1),transparent 62%),var(--orgx-bg);color:var(--orgx-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent}h1,h2,h3,h4,.font-display{font-family:Geist,system-ui,-apple-system,sans-serif;letter-spacing:-.015em}code,.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,monospace}button:focus-visible,a:focus-visible,input:focus-visible{outline:none;box-shadow:0 0 0 2px #bfff0073}.glass-panel{-webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%);background:linear-gradient(145deg,#ffffff08,#ffffff04),var(--orgx-surface);border:1px solid var(--orgx-border)}.soft-shadow{box-shadow:0 12px 34px #00000059,inset 0 1px #ffffff05}.hover-lift{transition:transform .22s cubic-bezier(.16,1,.3,1),box-shadow .22s ease,border-color .22s ease}.hover-lift:hover{transform:translateY(-2px);box-shadow:0 18px 42px #0006,0 0 0 1px #bfff0014}.fade-in-up{animation:fadeInUp .36s cubic-bezier(.16,1,.3,1) both}.chip{border:1px solid var(--orgx-border);background:#ffffff0a;color:#f2f7ffcc;border-radius:999px;padding:3px 10px;font-size:11px;line-height:1;font-weight:500}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.-bottom-0\.5{bottom:-.125rem}.-right-0\.5{right:-.125rem}.left-1\/2{left:50%}.left-3{left:.75rem}.right-0{right:0}.top-0{top:0}.top-1\/2{top:50%}.top-4{top:1rem}.z-10{z-index:10}.z-30{z-index:30}.z-50{z-index:50}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3\.5{height:.875rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-full{height:100%}.h-px{height:1px}.max-h-0{max-height:0px}.max-h-\[28vh\]{max-height:28vh}.max-h-\[360px\]{max-height:360px}.max-h-\[38vh\]{max-height:38vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[85vh\]{max-height:85vh}.min-h-0{min-height:0px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-3\.5{width:.875rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-1\/2{--tw-translate-x: 50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(-.25rem * var(--tw-space-x-reverse));margin-left:calc(-.25rem * calc(1 - var(--tw-space-x-reverse)))}.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-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * 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))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-red-500\/35{border-color:#ef444459}.border-white\/20{border-color:#fff3}.border-white\/\[0\.04\]{border-color:#ffffff0a}.border-white\/\[0\.06\]{border-color:#ffffff0f}.border-white\/\[0\.08\]{border-color:#ffffff14}.border-white\/\[0\.12\]{border-color:#ffffff1f}.border-white\/\[0\.1\]{border-color:#ffffff1a}.bg-\[\#080808\]{--tw-bg-opacity: 1;background-color:rgb(8 8 8 / var(--tw-bg-opacity, 1))}.bg-black\/30{background-color:#0000004d}.bg-black\/75{background-color:#000000bf}.bg-red-500\/10{background-color:#ef44441a}.bg-white\/20{background-color:#fff3}.bg-white\/\[0\.02\]{background-color:#ffffff05}.bg-white\/\[0\.03\]{background-color:#ffffff08}.bg-white\/\[0\.05\]{background-color:#ffffff0d}.bg-white\/\[0\.06\]{background-color:#ffffff0f}.bg-white\/\[0\.08\]{background-color:#ffffff14}.bg-white\/\[0\.09\]{background-color:#ffffff17}.bg-white\/\[0\.12\]{background-color:#ffffff1f}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from: transparent var(--tw-gradient-from-position);--tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-white\/35{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .35) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pl-9{padding-left:2.25rem}.pr-3{padding-right:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Geist,system-ui,-apple-system,sans-serif}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[18px\]{font-size:18px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-sm{font-size:.875rem;line-height:1.25rem}.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}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.1em\]{letter-spacing:.1em}.tracking-wider{letter-spacing:.05em}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-red-200{--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/20{color:#fff3}.text-white\/25{color:#ffffff40}.text-white\/30{color:#ffffff4d}.text-white\/35{color:#ffffff59}.text-white\/40{color:#fff6}.text-white\/45{color:#ffffff73}.text-white\/50{color:#ffffff80}.text-white\/55{color:#ffffff8c}.text-white\/60{color:#fff9}.text-white\/65{color:#ffffffa6}.text-white\/70{color:#ffffffb3}.text-white\/75{color:#ffffffbf}.text-white\/80{color:#fffc}.text-white\/85{color:#ffffffd9}.text-white\/90{color:#ffffffe6}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.shadow-\[0_10px_30px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow: 0 10px 30px rgba(0,0,0,.35);--tw-shadow-colored: 0 10px 30px 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)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-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)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-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{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}:root{color-scheme:dark;--orgx-bg: #02040a;--orgx-surface: #08090d;--orgx-surface-elevated: #0c0e14;--orgx-border: rgba(255, 255, 255, .08);--orgx-border-strong: rgba(255, 255, 255, .12);--orgx-text: #f2f7ff;--orgx-text-muted: #8f9ab7;--orgx-lime: #bfff00;--orgx-teal: #14b8a6;--orgx-cyan: #0ad4c4}*{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.16) transparent}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#ffffff29;border-radius:999px}@keyframes fadeInUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes pulseSoft{0%,to{opacity:.5}50%{opacity:1}}@keyframes floatSlow{0%{transform:translateZ(0)}50%{transform:translate3d(0,-12px,0)}to{transform:translateZ(0)}}.ambient-orb{position:absolute;border-radius:999px;filter:blur(52px);opacity:.45;animation:floatSlow 12s ease-in-out infinite}.ambient-orb.orb-lime{background:radial-gradient(circle,rgba(191,255,0,.3),transparent 62%)}.ambient-orb.orb-teal{background:radial-gradient(circle,rgba(20,184,166,.26),transparent 62%)}.ambient-orb.orb-iris{background:radial-gradient(circle,rgba(124,124,255,.22),transparent 62%)}.grain-overlay{pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' viewBox='0 0 160 160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.82' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='0.14'/%3E%3C/svg%3E");mix-blend-mode:soft-light;opacity:.45}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.placeholder\:text-white\/35::-moz-placeholder{color:#ffffff59}.placeholder\:text-white\/35::placeholder{color:#ffffff59}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}.hover\:bg-white\/\[0\.05\]:hover{background-color:#ffffff0d}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}.hover\:bg-white\/\[0\.07\]:hover{background-color:#ffffff12}.hover\:bg-white\/\[0\.08\]:hover{background-color:#ffffff14}.hover\:bg-white\/\[0\.16\]:hover{background-color:#ffffff29}.hover\:bg-white\/\[0\.1\]:hover{background-color:#ffffff1a}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:text-white\/60:hover{color:#fff9}.hover\:text-white\/80:hover{color:#fffc}.focus\:border-white\/20:focus{border-color:#fff3}.focus\:bg-white\/\[0\.05\]:focus{background-color:#ffffff0d}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-white\/30:focus{--tw-ring-color: rgb(255 255 255 / .3)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:text-white\/50{color:#ffffff80}.group:hover .group-hover\:text-white\/80{color:#fffc}.group:hover .group-hover\:opacity-100{opacity:1}@media(min-width:640px){.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.sm\:gap-4{gap:1rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}}@media(min-width:1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:col-span-6{grid-column:span 6 / span 6}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}}