@cwim/kanban 1.0.0 → 1.1.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.
- package/dashboard/dist/assets/index-BjmAGTF2.js +18 -0
- package/dashboard/dist/assets/index-CfRsoq4J.css +1 -0
- package/dashboard/dist/index.html +2 -2
- package/dist/cli/commands.js +47 -8
- package/dist/cli/commands.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +61 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +58 -9
- package/dist/server/http.js.map +1 -1
- package/dist/storage/store.d.ts +14 -11
- package/dist/storage/store.d.ts.map +1 -1
- package/dist/storage/store.js +135 -61
- package/dist/storage/store.js.map +1 -1
- package/package.json +1 -1
- package/dashboard/dist/assets/index-DJjqRfkX.css +0 -1
- package/dashboard/dist/assets/index-Hgs2aA9B.js +0 -18
package/dist/storage/store.js
CHANGED
|
@@ -2,7 +2,8 @@ import { promises as fs, existsSync, mkdirSync } from 'fs';
|
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
const KANBAN_DIR = path.join(os.homedir(), '.kanban');
|
|
5
|
-
const
|
|
5
|
+
const SESSIONS_DIR = path.join(KANBAN_DIR, 'sessions');
|
|
6
|
+
const ACTIVE_SESSION_FILE = path.join(KANBAN_DIR, 'active-session.json');
|
|
6
7
|
const CLAUDE_PROJECTS_DIR = path.join(os.homedir(), '.claude', 'projects');
|
|
7
8
|
function getDefaultData() {
|
|
8
9
|
return {
|
|
@@ -11,38 +12,42 @@ function getDefaultData() {
|
|
|
11
12
|
tasks: [],
|
|
12
13
|
};
|
|
13
14
|
}
|
|
14
|
-
function ensureDir() {
|
|
15
|
-
if (!existsSync(
|
|
16
|
-
mkdirSync(
|
|
15
|
+
function ensureDir(dir) {
|
|
16
|
+
if (!existsSync(dir)) {
|
|
17
|
+
mkdirSync(dir, { recursive: true });
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
if (!existsSync(DATA_FILE)) {
|
|
22
|
-
await writeData(getDefaultData());
|
|
23
|
-
}
|
|
20
|
+
function getSessionDir(sessionName) {
|
|
21
|
+
return path.join(SESSIONS_DIR, sessionName);
|
|
24
22
|
}
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
function getSessionDataFile(sessionName) {
|
|
24
|
+
return path.join(getSessionDir(sessionName), 'tasks.json');
|
|
25
|
+
}
|
|
26
|
+
export async function getActiveSession() {
|
|
27
27
|
try {
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if (!existsSync(ACTIVE_SESSION_FILE))
|
|
29
|
+
return undefined;
|
|
30
|
+
const raw = await fs.readFile(ACTIVE_SESSION_FILE, 'utf-8');
|
|
31
|
+
const active = JSON.parse(raw);
|
|
32
|
+
return active.name;
|
|
30
33
|
}
|
|
31
34
|
catch {
|
|
32
|
-
|
|
33
|
-
await writeData(defaultData);
|
|
34
|
-
return defaultData;
|
|
35
|
+
return undefined;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
|
-
async function
|
|
38
|
-
ensureDir();
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
export async function setActiveSession(sessionName) {
|
|
39
|
+
ensureDir(KANBAN_DIR);
|
|
40
|
+
const active = {
|
|
41
|
+
name: sessionName,
|
|
42
|
+
setAt: new Date().toISOString(),
|
|
43
|
+
};
|
|
44
|
+
await fs.writeFile(ACTIVE_SESSION_FILE, JSON.stringify(active, null, 2), 'utf-8');
|
|
41
45
|
}
|
|
42
|
-
|
|
46
|
+
// Session detection
|
|
47
|
+
export async function detectSessions() {
|
|
43
48
|
try {
|
|
44
49
|
if (!existsSync(CLAUDE_PROJECTS_DIR))
|
|
45
|
-
return
|
|
50
|
+
return [];
|
|
46
51
|
const entries = await fs.readdir(CLAUDE_PROJECTS_DIR, { withFileTypes: true });
|
|
47
52
|
const sessions = entries
|
|
48
53
|
.filter((e) => e.isDirectory())
|
|
@@ -52,37 +57,96 @@ export async function detectSession() {
|
|
|
52
57
|
detectedAt: new Date().toISOString(),
|
|
53
58
|
}));
|
|
54
59
|
if (sessions.length === 0)
|
|
55
|
-
return
|
|
56
|
-
//
|
|
60
|
+
return [];
|
|
61
|
+
// Sort by most recently modified
|
|
57
62
|
const stats = await Promise.all(sessions.map(async (s) => {
|
|
58
63
|
const stat = await fs.stat(s.path);
|
|
59
64
|
return { ...s, mtime: stat.mtime };
|
|
60
65
|
}));
|
|
61
66
|
stats.sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
};
|
|
67
|
+
return stats.map((s) => ({
|
|
68
|
+
name: s.name,
|
|
69
|
+
path: s.path,
|
|
70
|
+
detectedAt: s.detectedAt,
|
|
71
|
+
}));
|
|
68
72
|
}
|
|
69
73
|
catch {
|
|
70
|
-
return
|
|
74
|
+
return [];
|
|
71
75
|
}
|
|
72
76
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
export async function detectLatestSession() {
|
|
78
|
+
const sessions = await detectSessions();
|
|
79
|
+
return sessions[0];
|
|
80
|
+
}
|
|
81
|
+
export async function listAllSessions() {
|
|
82
|
+
const detected = await detectSessions();
|
|
83
|
+
const detectedNames = new Set(detected.map((s) => s.name));
|
|
84
|
+
// Also include any stored sessions that might not be currently detected
|
|
85
|
+
// (e.g., old projects that were removed from .claude/projects)
|
|
86
|
+
const storedSessions = [];
|
|
87
|
+
if (existsSync(SESSIONS_DIR)) {
|
|
88
|
+
const entries = await fs.readdir(SESSIONS_DIR, { withFileTypes: true });
|
|
89
|
+
for (const entry of entries) {
|
|
90
|
+
if (entry.isDirectory() && !detectedNames.has(entry.name) && entry.name !== 'independent') {
|
|
91
|
+
storedSessions.push({
|
|
92
|
+
name: entry.name,
|
|
93
|
+
path: getSessionDir(entry.name),
|
|
94
|
+
detectedAt: new Date().toISOString(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Always include independent mode
|
|
100
|
+
const allSessions = [
|
|
101
|
+
...detected,
|
|
102
|
+
...storedSessions,
|
|
103
|
+
{
|
|
104
|
+
name: 'independent',
|
|
105
|
+
path: getSessionDir('independent'),
|
|
106
|
+
detectedAt: new Date().toISOString(),
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
return allSessions;
|
|
110
|
+
}
|
|
111
|
+
// Get or initialize the current session name
|
|
112
|
+
export async function getCurrentSessionName() {
|
|
113
|
+
const active = await getActiveSession();
|
|
114
|
+
if (active)
|
|
115
|
+
return active;
|
|
116
|
+
// Auto-detect and set
|
|
117
|
+
const latest = await detectLatestSession();
|
|
118
|
+
if (latest) {
|
|
119
|
+
await setActiveSession(latest.name);
|
|
120
|
+
return latest.name;
|
|
121
|
+
}
|
|
122
|
+
// Fallback to independent
|
|
123
|
+
await setActiveSession('independent');
|
|
124
|
+
return 'independent';
|
|
125
|
+
}
|
|
126
|
+
// Per-session data operations
|
|
127
|
+
async function readSessionData(sessionName) {
|
|
128
|
+
const dataFile = getSessionDataFile(sessionName);
|
|
129
|
+
ensureDir(getSessionDir(sessionName));
|
|
130
|
+
try {
|
|
131
|
+
const raw = await fs.readFile(dataFile, 'utf-8');
|
|
132
|
+
return JSON.parse(raw);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
const defaultData = getDefaultData();
|
|
136
|
+
await writeSessionData(sessionName, defaultData);
|
|
137
|
+
return defaultData;
|
|
77
138
|
}
|
|
78
|
-
return cachedSession ?? undefined;
|
|
79
139
|
}
|
|
80
|
-
|
|
81
|
-
|
|
140
|
+
async function writeSessionData(sessionName, data) {
|
|
141
|
+
const dataFile = getSessionDataFile(sessionName);
|
|
142
|
+
ensureDir(getSessionDir(sessionName));
|
|
143
|
+
data.updatedAt = new Date().toISOString();
|
|
144
|
+
await fs.writeFile(dataFile, JSON.stringify(data, null, 2), 'utf-8');
|
|
82
145
|
}
|
|
83
|
-
// Task CRUD
|
|
84
|
-
export async function listTasks(filter) {
|
|
85
|
-
const
|
|
146
|
+
// Task CRUD (session-aware)
|
|
147
|
+
export async function listTasks(sessionName, filter) {
|
|
148
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
149
|
+
const data = await readSessionData(targetSession);
|
|
86
150
|
let tasks = data.tasks;
|
|
87
151
|
if (filter?.status) {
|
|
88
152
|
tasks = tasks.filter((t) => t.status === filter.status);
|
|
@@ -92,13 +156,14 @@ export async function listTasks(filter) {
|
|
|
92
156
|
}
|
|
93
157
|
return tasks;
|
|
94
158
|
}
|
|
95
|
-
export async function getTask(id) {
|
|
96
|
-
const
|
|
159
|
+
export async function getTask(id, sessionName) {
|
|
160
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
161
|
+
const data = await readSessionData(targetSession);
|
|
97
162
|
return data.tasks.find((t) => t.id === id);
|
|
98
163
|
}
|
|
99
|
-
export async function createTask(input) {
|
|
100
|
-
const
|
|
101
|
-
const
|
|
164
|
+
export async function createTask(input, sessionName) {
|
|
165
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
166
|
+
const data = await readSessionData(targetSession);
|
|
102
167
|
const task = {
|
|
103
168
|
id: generateId(),
|
|
104
169
|
title: input.title,
|
|
@@ -110,12 +175,12 @@ export async function createTask(input) {
|
|
|
110
175
|
updatedAt: new Date().toISOString(),
|
|
111
176
|
};
|
|
112
177
|
data.tasks.push(task);
|
|
113
|
-
|
|
114
|
-
await writeData(data);
|
|
178
|
+
await writeSessionData(targetSession, data);
|
|
115
179
|
return task;
|
|
116
180
|
}
|
|
117
|
-
export async function updateTask(id, input) {
|
|
118
|
-
const
|
|
181
|
+
export async function updateTask(id, input, sessionName) {
|
|
182
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
183
|
+
const data = await readSessionData(targetSession);
|
|
119
184
|
const idx = data.tasks.findIndex((t) => t.id === id);
|
|
120
185
|
if (idx === -1)
|
|
121
186
|
return undefined;
|
|
@@ -129,29 +194,38 @@ export async function updateTask(id, input) {
|
|
|
129
194
|
if (input.tags !== undefined)
|
|
130
195
|
task.tags = input.tags;
|
|
131
196
|
task.updatedAt = new Date().toISOString();
|
|
132
|
-
await
|
|
197
|
+
await writeSessionData(targetSession, data);
|
|
133
198
|
return task;
|
|
134
199
|
}
|
|
135
|
-
export async function moveTask(id, status) {
|
|
136
|
-
return updateTask(id, { status });
|
|
200
|
+
export async function moveTask(id, status, sessionName) {
|
|
201
|
+
return updateTask(id, { status }, sessionName);
|
|
137
202
|
}
|
|
138
|
-
export async function deleteTask(id) {
|
|
139
|
-
const
|
|
203
|
+
export async function deleteTask(id, sessionName) {
|
|
204
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
205
|
+
const data = await readSessionData(targetSession);
|
|
140
206
|
const initialLen = data.tasks.length;
|
|
141
207
|
data.tasks = data.tasks.filter((t) => t.id !== id);
|
|
142
208
|
if (data.tasks.length === initialLen)
|
|
143
209
|
return false;
|
|
144
|
-
await
|
|
210
|
+
await writeSessionData(targetSession, data);
|
|
145
211
|
return true;
|
|
146
212
|
}
|
|
147
|
-
export async function getAllData() {
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
213
|
+
export async function getAllData(sessionName) {
|
|
214
|
+
const targetSession = sessionName ?? await getCurrentSessionName();
|
|
215
|
+
const data = await readSessionData(targetSession);
|
|
216
|
+
// Attach session info
|
|
217
|
+
const sessions = await listAllSessions();
|
|
218
|
+
const sessionInfo = sessions.find((s) => s.name === targetSession);
|
|
219
|
+
if (sessionInfo) {
|
|
220
|
+
data.session = sessionInfo;
|
|
152
221
|
}
|
|
153
222
|
return data;
|
|
154
223
|
}
|
|
224
|
+
// Legacy init (creates dirs if needed)
|
|
225
|
+
export async function initStorage() {
|
|
226
|
+
ensureDir(KANBAN_DIR);
|
|
227
|
+
ensureDir(SESSIONS_DIR);
|
|
228
|
+
}
|
|
155
229
|
function generateId() {
|
|
156
230
|
const ts = Date.now().toString(36);
|
|
157
231
|
const rand = Math.random().toString(36).substring(2, 6);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/storage/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAGzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACtD,MAAM,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/storage/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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}*{--tw-border-opacity: 1;border-color:rgb(42 42 58 / var(--tw-border-opacity, 1))}body{--tw-bg-opacity: 1;background-color:rgb(10 10 15 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(232 232 240 / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#2a2a3a;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#3d3d5c}.\!visible{visibility:visible!important}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.bottom-3{bottom:.75rem}.bottom-6{bottom:1.5rem}.left-1\/2{left:50%}.right-4{right:1rem}.z-50{z-index:50}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-auto{margin-left:auto}.mt-4{margin-top:1rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.h-11{height:2.75rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.min-h-0{min-height:0px}.w-2{width:.5rem}.w-5{width:1.25rem}.w-full{width:100%}.min-w-\[300px\]{min-width:300px}.min-w-max{min-width:-moz-max-content;min-width:max-content}.flex-1{flex:1 1 0%}.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))}.cursor-default{cursor:default}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.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-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded{border-radius:.25rem}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-\[3px\]{border-left-width:3px}.border-\[\#2A2A3A\]{--tw-border-opacity: 1;border-color:rgb(42 42 58 / var(--tw-border-opacity, 1))}.border-\[\#2A2A3A\]\/50{border-color:#2a2a3a80}.border-\[\#3D3D5C\]{--tw-border-opacity: 1;border-color:rgb(61 61 92 / var(--tw-border-opacity, 1))}.bg-\[\#0A0A0F\]{--tw-bg-opacity: 1;background-color:rgb(10 10 15 / var(--tw-bg-opacity, 1))}.bg-\[\#10B981\]{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-\[\#111118\]{--tw-bg-opacity: 1;background-color:rgb(17 17 24 / var(--tw-bg-opacity, 1))}.bg-\[\#1E1E2A\]{--tw-bg-opacity: 1;background-color:rgb(30 30 42 / var(--tw-bg-opacity, 1))}.bg-\[\#27273A\]{--tw-bg-opacity: 1;background-color:rgb(39 39 58 / var(--tw-bg-opacity, 1))}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.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-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\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-center{text-align:center}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.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}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-\[0\.05em\]{letter-spacing:.05em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-\[\#22D3EE\]{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-\[\#555570\]{--tw-text-opacity: 1;color:rgb(85 85 112 / var(--tw-text-opacity, 1))}.text-\[\#8A8AA3\]{--tw-text-opacity: 1;color:rgb(138 138 163 / var(--tw-text-opacity, 1))}.text-\[\#E8E8F0\]{--tw-text-opacity: 1;color:rgb(232 232 240 / var(--tw-text-opacity, 1))}.text-\[\#EF4444\]{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.opacity-20{opacity:.2}.shadow-\[0_1px_3px_rgba\(0\,0\,0\,0\.3\)\,0_0_0_1px_rgba\(255\,255\,255\,0\.03\)\]{--tw-shadow: 0 1px 3px rgba(0,0,0,.3),0 0 0 1px rgba(255,255,255,.03);--tw-shadow-colored: 0 1px 3px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.04\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.04);--tw-shadow-colored: inset 0 1px 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)}.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}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.duration-200{animation-duration:.2s}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}@keyframes cardEnter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.animate-card-enter{animation:cardEnter .3s cubic-bezier(.16,1,.3,1) forwards}@keyframes columnFlash{0%{border-left-width:3px;box-shadow:none}30%{border-left-width:6px}to{border-left-width:3px;box-shadow:none}}.animate-column-flash-todo{animation:columnFlash .6s ease-out;border-left-color:#f59e0b;box-shadow:0 0 8px #f59e0b66}.animate-column-flash-inprogress{animation:columnFlash .6s ease-out;border-left-color:#3b82f6;box-shadow:0 0 8px #3b82f666}.animate-column-flash-done{animation:columnFlash .6s ease-out;border-left-color:#10b981;box-shadow:0 0 8px #10b98166}.animate-column-flash-blocked{animation:columnFlash .6s ease-out;border-left-color:#ef4444;box-shadow:0 0 8px #ef444466}@keyframes toastIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes toastOut{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(20px)}}.animate-toast-in{animation:toastIn .3s cubic-bezier(.16,1,.3,1) forwards}@keyframes pulseRing{0%{transform:scale(1);opacity:.6}to{transform:scale(2.5);opacity:0}}.animate-pulse-ring{animation:pulseRing 2s ease-out infinite}@keyframes emptyFade{0%{opacity:0}to{opacity:1}}.animate-empty-fade{animation:emptyFade .2s ease forwards}.hover\:bg-\[\#1A1A24\]:hover{--tw-bg-opacity: 1;background-color:rgb(26 26 36 / var(--tw-bg-opacity, 1))}.hover\:bg-\[\#27273A\]:hover{--tw-bg-opacity: 1;background-color:rgb(39 39 58 / var(--tw-bg-opacity, 1))}.hover\:shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.4\)\,0_0_0_1px_rgba\(255\,255\,255\,0\.05\)\]:hover{--tw-shadow: 0 4px 12px rgba(0,0,0,.4),0 0 0 1px rgba(255,255,255,.05);--tw-shadow-colored: 0 4px 12px var(--tw-shadow-color), 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}
|