ezpm2gui 1.5.0 → 1.6.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/README.md CHANGED
@@ -2,6 +2,30 @@
2
2
 
3
3
  A modern web-based graphical user interface for the PM2 process manager, built with TypeScript, Tailwind CSS, and React.
4
4
 
5
+ ## Screenshots
6
+
7
+ **Process Dashboard** — live system metrics and every PM2 process at a glance:
8
+
9
+ ![Process Dashboard](ezpm2gui/screenshots/01-processes.png)
10
+
11
+ **Monitoring** — real-time CPU, memory and uptime per process:
12
+
13
+ ![Process Monitor](ezpm2gui/screenshots/02-monitoring.png)
14
+
15
+ **Deploy App** — start new PM2 processes from a structured form:
16
+
17
+ ![Deploy App](ezpm2gui/screenshots/04-deploy-app.png)
18
+
19
+ **Cron Jobs** — schedule recurring tasks without touching crontab:
20
+
21
+ ![Cron Jobs](ezpm2gui/screenshots/08-cron-jobs.png)
22
+
23
+ **Settings** — auto-saved preferences for refresh, logs, theme and security:
24
+
25
+ ![Settings](ezpm2gui/screenshots/11-settings.png)
26
+
27
+ > See the full visual walkthrough in [https://ezpm2gui.vercel.app/](https://ezpm2gui.vercel.app/) — every screen is annotated with a screenshot.
28
+
5
29
  ## Features
6
30
 
7
31
  - **Real-time process monitoring** - Keep track of all your PM2 processes in real-time
@@ -86,7 +110,7 @@ Monitor key system metrics including:
86
110
  - Load averages (1, 5, and 15 minutes)
87
111
 
88
112
  ### User Interface
89
- ezPM2GUI uses Tailwind CSS for a sleek, compact, and fully responsive interface:
113
+ EZ PM2 GUI uses Tailwind CSS for a sleek, compact, and fully responsive interface:
90
114
  - Dark and light mode support across all pages
91
115
  - Consistent color theming with smooth transitions
92
116
  - Compact layout with small fonts and reduced spacing for information density
@@ -112,7 +136,7 @@ npm install ezpm2gui
112
136
  ### As a Command Line Tool (Global Installation)
113
137
 
114
138
  ```bash
115
- # Start the ezPM2GUI web interface
139
+ # Start the EZ PM2 GUI web interface
116
140
  ezpm2gui
117
141
 
118
142
  # Start on a specific port
@@ -155,14 +179,14 @@ http://localhost:3001
155
179
 
156
180
  ## Configuration
157
181
 
158
- ezPM2GUI uses environment variables for configuration:
182
+ EZ PM2 GUI uses environment variables for configuration:
159
183
 
160
184
  - `PORT`: The port to run the server on (default: 3001)
161
185
  - `HOST`: The host to bind to (default: localhost)
162
186
 
163
187
  ## Load Balancing with PM2
164
188
 
165
- ezPM2GUI provides an easy interface to manage PM2's load balancing capabilities:
189
+ EZ PM2 GUI provides an easy interface to manage PM2's load balancing capabilities:
166
190
 
167
191
  ### Setting Up Load Balancing
168
192
 
@@ -257,34 +281,36 @@ npm run lint
257
281
 
258
282
  ## FAQ
259
283
 
260
- ### Q: How does ezPM2GUI differ from pm2-gui and PM2 Plus?
284
+ ### Q: How does EZ PM2 GUI differ from pm2-gui and PM2 Plus?
261
285
 
262
- A: ezPM2GUI is a modern, TypeScript-based alternative to pm2-gui with a more user-friendly interface and additional features. Unlike PM2 Plus, it's completely free and open-source, running locally on your server rather than in the cloud.
286
+ A: EZ PM2 GUI is a modern, TypeScript-based alternative to pm2-gui with a more user-friendly interface and additional features. Unlike PM2 Plus, it's completely free and open-source, running locally on your server rather than in the cloud.
263
287
 
264
- ### Q: Can I use ezPM2GUI with PM2 running on a different machine?
288
+ ### Q: Can I use EZ PM2 GUI with PM2 running on a different machine?
265
289
 
266
- A: Yes, you can configure ezPM2GUI to connect to a remote PM2 installation. You'll need to specify the connection details in the application settings.
290
+ A: Yes, you can configure EZ PM2 GUI to connect to a remote PM2 installation. You'll need to specify the connection details in the application settings.
267
291
 
268
292
  ### Q: How do I generate an ecosystem file from my existing processes?
269
293
 
270
294
  A: Use the `ezpm2gui-generate-ecosystem` command-line tool, or visit the Ecosystem Config section in the web UI.
271
295
 
272
- ### Q: Can ezPM2GUI handle a large number of processes?
296
+ ### Q: Can EZ PM2 GUI handle a large number of processes?
273
297
 
274
- A: Yes, ezPM2GUI is designed to handle dozens of processes efficiently. The UI is optimized to present large amounts of information in a digestible format.
298
+ A: Yes, EZ PM2 GUI is designed to handle dozens of processes efficiently. The UI is optimized to present large amounts of information in a digestible format.
275
299
 
276
- ### Q: Is ezPM2GUI secure?
300
+ ### Q: Is EZ PM2 GUI secure?
277
301
 
278
- A: By default, ezPM2GUI binds to localhost for security reasons. If you expose the interface to other machines, consider adding authentication through a reverse proxy like Nginx.
302
+ A: By default, EZ PM2 GUI binds to localhost for security reasons. If you expose the interface to other machines, consider adding authentication through a reverse proxy like Nginx.
279
303
 
280
304
  ## Related Projects
281
305
 
282
- - [PM2](https://github.com/Unitech/pm2) - The process manager that ezPM2GUI works with
306
+ - [PM2](https://github.com/Unitech/pm2) - The process manager that EZ PM2 GUI works with
283
307
  - [pm2-gui](https://github.com/Tjatse/pm2-gui) - The original inspiration for this project
284
308
 
285
309
  ## License
286
310
 
287
- ISC
311
+ GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See [LICENSE](LICENSE).
312
+
313
+ EZ PM2 GUI interfaces with [PM2](https://github.com/Unitech/pm2), which is licensed under AGPL-3.0. Because this project links PM2 as a library, it is distributed under the same license.
288
314
 
289
315
  ## Credits
290
316
 
@@ -292,4 +318,4 @@ Built by [Chandan Bhagat](https://github.com/thechandanbhagat) as a modern alter
292
318
 
293
319
  ---
294
320
 
295
- **Note**: ezPM2GUI is not officially affiliated with PM2 or PM2 Plus. It's an independent tool that interfaces with the PM2 process manager.
321
+ **Note**: EZ PM2 GUI is not officially affiliated with PM2 or PM2 Plus. It's an independent tool that interfaces with the PM2 process manager.
package/bin/ezpm2gui.js CHANGED
@@ -19,7 +19,7 @@ const server = (0, child_process_1.spawn)('node', [serverPath], { stdio: 'inheri
19
19
  // Log startup message
20
20
  console.log('\x1b[36m%s\x1b[0m', `
21
21
  ╔════════════════════════════════════╗
22
- ezPM2GUI Started
22
+ EZ PM2 GUI Started
23
23
  ╚════════════════════════════════════╝
24
24
 
25
25
  Web interface available at: \x1b[1mhttp://localhost:3101\x1b[0m
@@ -39,10 +39,10 @@ server.on('exit', (code) => {
39
39
  });
40
40
  // Handle termination signals
41
41
  process.on('SIGINT', () => {
42
- console.log('\nShutting down ezPM2GUI...');
42
+ console.log('\nShutting down EZ PM2 GUI...');
43
43
  server.kill();
44
44
  });
45
45
  process.on('SIGTERM', () => {
46
- console.log('\nShutting down ezPM2GUI...');
46
+ console.log('\nShutting down EZ PM2 GUI...');
47
47
  server.kill();
48
48
  });
package/bin/ezpm2gui.ts CHANGED
@@ -18,7 +18,7 @@ const server: ChildProcess = spawn('node', [serverPath], { stdio: 'inherit' });
18
18
  // Log startup message
19
19
  console.log('\x1b[36m%s\x1b[0m', `
20
20
  ╔════════════════════════════════════╗
21
- ezPM2GUI Started
21
+ EZ PM2 GUI Started
22
22
  ╚════════════════════════════════════╝
23
23
 
24
24
  Web interface available at: \x1b[1mhttp://localhost:3101\x1b[0m
@@ -41,11 +41,11 @@ server.on('exit', (code: number | null) => {
41
41
 
42
42
  // Handle termination signals
43
43
  process.on('SIGINT', () => {
44
- console.log('\nShutting down ezPM2GUI...');
44
+ console.log('\nShutting down EZ PM2 GUI...');
45
45
  server.kill();
46
46
  });
47
47
 
48
48
  process.on('SIGTERM', () => {
49
- console.log('\nShutting down ezPM2GUI...');
49
+ console.log('\nShutting down EZ PM2 GUI...');
50
50
  server.kill();
51
51
  });
@@ -51,7 +51,7 @@ try {
51
51
  console.log(`PM2 ecosystem file generated at: ${fullPath}`);
52
52
  console.log('\nTo start your PM2 processes with this configuration:');
53
53
  console.log(' pm2 start ecosystem.config.js');
54
- console.log('\nTo monitor your processes with ezPM2GUI:');
54
+ console.log('\nTo monitor your processes with EZ PM2 GUI:');
55
55
  console.log(' ezpm2gui');
56
56
  }
57
57
  catch (error) {
@@ -49,7 +49,7 @@ try {
49
49
  console.log(`PM2 ecosystem file generated at: ${fullPath}`);
50
50
  console.log('\nTo start your PM2 processes with this configuration:');
51
51
  console.log(' pm2 start ecosystem.config.js');
52
- console.log('\nTo monitor your processes with ezPM2GUI:');
52
+ console.log('\nTo monitor your processes with EZ PM2 GUI:');
53
53
  console.log(' ezpm2gui');
54
54
  } catch (error) {
55
55
  console.error('Error generating ecosystem file:', error);
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ interface StartOptions {
3
3
  host?: string;
4
4
  }
5
5
  /**
6
- * Start the ezPM2GUI server
6
+ * Start the EZ PM2 GUI server
7
7
  * @param options Configuration options
8
8
  * @returns The HTTP server instance
9
9
  */
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ exports.start = start;
4
4
  // src/index.ts - Main entry point for programmatic usage
5
5
  const index_1 = require("./server/index");
6
6
  /**
7
- * Start the ezPM2GUI server
7
+ * Start the EZ PM2 GUI server
8
8
  * @param options Configuration options
9
9
  * @returns The HTTP server instance
10
10
  */
@@ -22,6 +22,7 @@ const modules_1 = __importDefault(require("./routes/modules"));
22
22
  const remoteConnections_1 = __importDefault(require("./routes/remoteConnections"));
23
23
  const cronJobs_1 = __importDefault(require("./routes/cronJobs"));
24
24
  const updates_1 = __importDefault(require("./routes/updates"));
25
+ const pageAuth_1 = __importDefault(require("./routes/pageAuth"));
25
26
  const logStreaming_1 = require("./routes/logStreaming");
26
27
  const pm2_connection_1 = require("./utils/pm2-connection");
27
28
  const remote_connection_1 = require("./utils/remote-connection");
@@ -66,6 +67,7 @@ function createServer() {
66
67
  app.use('/api/remote', remoteConnections_1.default);
67
68
  app.use('/api/cron-jobs', cronJobs_1.default);
68
69
  app.use('/api/update', updates_1.default);
70
+ app.use('/api/auth', pageAuth_1.default);
69
71
  // Setup log streaming with Socket.IO
70
72
  (0, logStreaming_1.setupLogStreaming)(io); // PM2 API endpoints
71
73
  app.get('/api/processes', async (req, res) => {
@@ -0,0 +1,3 @@
1
+ import { Router } from 'express';
2
+ declare const router: Router;
3
+ export default router;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const express_1 = __importDefault(require("express"));
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ // @group Configuration : Path to the stored auth config file
11
+ const AUTH_FILE = path_1.default.join(__dirname, '../config/auth.json');
12
+ // @group Utilities : Load auth config — returns null when no password is set
13
+ function loadAuthConfig() {
14
+ try {
15
+ if (!fs_1.default.existsSync(AUTH_FILE))
16
+ return null;
17
+ const raw = fs_1.default.readFileSync(AUTH_FILE, 'utf8').trim();
18
+ if (!raw)
19
+ return null;
20
+ return JSON.parse(raw);
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ // @group Utilities : Persist auth config to disk
27
+ function saveAuthConfig(config) {
28
+ const dir = path_1.default.dirname(AUTH_FILE);
29
+ if (!fs_1.default.existsSync(dir))
30
+ fs_1.default.mkdirSync(dir, { recursive: true });
31
+ fs_1.default.writeFileSync(AUTH_FILE, JSON.stringify(config), 'utf8');
32
+ }
33
+ // @group Utilities : Hash a plaintext password with PBKDF2 + salt
34
+ function hashPassword(password, salt) {
35
+ return crypto_1.default.pbkdf2Sync(password, salt, 100000, 64, 'sha512').toString('hex');
36
+ }
37
+ // @group Router : Express router for password-protection endpoints
38
+ const router = express_1.default.Router();
39
+ // @group Endpoints : GET /api/auth/status — is a password/PIN configured?
40
+ router.get('/status', (_req, res) => {
41
+ var _a;
42
+ const config = loadAuthConfig();
43
+ res.json({
44
+ passwordSet: config !== null,
45
+ pinSet: !!(config === null || config === void 0 ? void 0 : config.pinHash),
46
+ autoLockMinutes: (_a = config === null || config === void 0 ? void 0 : config.autoLockMinutes) !== null && _a !== void 0 ? _a : 0,
47
+ });
48
+ });
49
+ // @group Endpoints : PATCH /api/auth/settings — update non-password settings (e.g. autoLockMinutes)
50
+ router.patch('/settings', (req, res) => {
51
+ var _a;
52
+ const { autoLockMinutes } = req.body;
53
+ const config = loadAuthConfig();
54
+ if (!config) {
55
+ return res.status(400).json({ success: false, error: 'No password set — configure a password first' });
56
+ }
57
+ const minutes = typeof autoLockMinutes === 'number' && autoLockMinutes >= 0 ? Math.floor(autoLockMinutes) : (_a = config.autoLockMinutes) !== null && _a !== void 0 ? _a : 0;
58
+ saveAuthConfig({ ...config, autoLockMinutes: minutes });
59
+ res.json({ success: true, autoLockMinutes: minutes });
60
+ });
61
+ // @group Endpoints : POST /api/auth/set — set or change the password
62
+ router.post('/set', (req, res) => {
63
+ var _a;
64
+ const { password, currentPassword } = req.body;
65
+ if (!password || typeof password !== 'string' || password.length < 4) {
66
+ return res.status(400).json({ success: false, error: 'Password must be at least 4 characters' });
67
+ }
68
+ const existing = loadAuthConfig();
69
+ // If a password is already set, require the current one before changing
70
+ if (existing) {
71
+ if (!currentPassword) {
72
+ return res.status(401).json({ success: false, error: 'Current password required to change password' });
73
+ }
74
+ const currentHash = hashPassword(currentPassword, existing.salt);
75
+ if (!crypto_1.default.timingSafeEqual(Buffer.from(currentHash, 'hex'), Buffer.from(existing.hash, 'hex'))) {
76
+ return res.status(401).json({ success: false, error: 'Current password is incorrect' });
77
+ }
78
+ }
79
+ const salt = crypto_1.default.randomBytes(32).toString('hex');
80
+ const hash = hashPassword(password, salt);
81
+ // Preserve PIN and autoLock settings when changing password
82
+ saveAuthConfig({
83
+ hash,
84
+ salt,
85
+ autoLockMinutes: (_a = existing === null || existing === void 0 ? void 0 : existing.autoLockMinutes) !== null && _a !== void 0 ? _a : 0,
86
+ ...((existing === null || existing === void 0 ? void 0 : existing.pinHash) ? { pinHash: existing.pinHash, pinSalt: existing.pinSalt } : {}),
87
+ });
88
+ res.json({ success: true });
89
+ });
90
+ // @group Endpoints : POST /api/auth/verify — verify a password attempt
91
+ router.post('/verify', (req, res) => {
92
+ const { password } = req.body;
93
+ if (!password || typeof password !== 'string') {
94
+ return res.status(400).json({ success: false, error: 'Password is required' });
95
+ }
96
+ const config = loadAuthConfig();
97
+ if (!config) {
98
+ // No password set — treat as unlocked
99
+ return res.json({ success: true });
100
+ }
101
+ const hash = hashPassword(password, config.salt);
102
+ const match = crypto_1.default.timingSafeEqual(Buffer.from(hash, 'hex'), Buffer.from(config.hash, 'hex'));
103
+ if (!match) {
104
+ return res.status(401).json({ success: false, error: 'Incorrect password' });
105
+ }
106
+ res.json({ success: true });
107
+ });
108
+ // @group Endpoints : DELETE /api/auth/remove — remove the password (requires current password)
109
+ router.delete('/remove', (req, res) => {
110
+ const { password } = req.body;
111
+ const config = loadAuthConfig();
112
+ if (!config) {
113
+ return res.json({ success: true }); // nothing to remove
114
+ }
115
+ if (!password || typeof password !== 'string') {
116
+ return res.status(400).json({ success: false, error: 'Current password required' });
117
+ }
118
+ const hash = hashPassword(password, config.salt);
119
+ const match = crypto_1.default.timingSafeEqual(Buffer.from(hash, 'hex'), Buffer.from(config.hash, 'hex'));
120
+ if (!match) {
121
+ return res.status(401).json({ success: false, error: 'Incorrect password' });
122
+ }
123
+ fs_1.default.unlinkSync(AUTH_FILE);
124
+ res.json({ success: true });
125
+ });
126
+ // @group Endpoints : POST /api/auth/pin/set — set or change the PIN (4-digit)
127
+ router.post('/pin/set', (req, res) => {
128
+ const { pin } = req.body;
129
+ if (!pin || !/^\d{4}$/.test(pin)) {
130
+ return res.status(400).json({ success: false, error: 'PIN must be exactly 4 digits' });
131
+ }
132
+ const config = loadAuthConfig();
133
+ if (!config) {
134
+ return res.status(400).json({ success: false, error: 'Set a password first before adding a PIN' });
135
+ }
136
+ const pinSalt = crypto_1.default.randomBytes(32).toString('hex');
137
+ const pinHash = hashPassword(pin, pinSalt);
138
+ saveAuthConfig({ ...config, pinHash, pinSalt });
139
+ res.json({ success: true });
140
+ });
141
+ // @group Endpoints : POST /api/auth/pin/verify — verify a PIN attempt
142
+ router.post('/pin/verify', (req, res) => {
143
+ const { pin } = req.body;
144
+ if (!pin || typeof pin !== 'string') {
145
+ return res.status(400).json({ success: false, error: 'PIN is required' });
146
+ }
147
+ const config = loadAuthConfig();
148
+ if (!(config === null || config === void 0 ? void 0 : config.pinHash) || !(config === null || config === void 0 ? void 0 : config.pinSalt)) {
149
+ return res.status(400).json({ success: false, error: 'No PIN configured' });
150
+ }
151
+ const hash = hashPassword(pin, config.pinSalt);
152
+ const match = crypto_1.default.timingSafeEqual(Buffer.from(hash, 'hex'), Buffer.from(config.pinHash, 'hex'));
153
+ if (!match) {
154
+ return res.status(401).json({ success: false, error: 'Incorrect PIN' });
155
+ }
156
+ res.json({ success: true });
157
+ });
158
+ // @group Endpoints : DELETE /api/auth/pin/remove — remove PIN (requires current password)
159
+ router.delete('/pin/remove', (req, res) => {
160
+ const { password } = req.body;
161
+ const config = loadAuthConfig();
162
+ if (!config) {
163
+ return res.json({ success: true }); // nothing to remove
164
+ }
165
+ if (!password || typeof password !== 'string') {
166
+ return res.status(400).json({ success: false, error: 'Current password required to remove PIN' });
167
+ }
168
+ const hash = hashPassword(password, config.salt);
169
+ const match = crypto_1.default.timingSafeEqual(Buffer.from(hash, 'hex'), Buffer.from(config.hash, 'hex'));
170
+ if (!match) {
171
+ return res.status(401).json({ success: false, error: 'Incorrect password' });
172
+ }
173
+ const { pinHash: _ph, pinSalt: _ps, ...rest } = config;
174
+ saveAuthConfig(rest);
175
+ res.json({ success: true });
176
+ });
177
+ exports.default = router;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ezpm2gui",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "main": "dist/server/index.js",
5
5
  "bin": {
6
6
  "ezpm2gui": "bin/ezpm2gui.js",
@@ -27,7 +27,7 @@
27
27
  "dashboard"
28
28
  ],
29
29
  "author": "Chandan Bhagat",
30
- "license": "ISC",
30
+ "license": "AGPL-3.0-or-later",
31
31
  "repository": {
32
32
  "type": "git",
33
33
  "url": "git+https://github.com/thechandanbhagat/ezpm2gui.git"
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "files": {
3
- "main.css": "/static/css/main.2d095544.css",
4
- "main.js": "/static/js/main.17e17668.js",
3
+ "main.css": "/static/css/main.775772ee.css",
4
+ "main.js": "/static/js/main.cbcb09c9.js",
5
5
  "index.html": "/index.html",
6
- "main.2d095544.css.map": "/static/css/main.2d095544.css.map",
7
- "main.17e17668.js.map": "/static/js/main.17e17668.js.map"
6
+ "main.775772ee.css.map": "/static/css/main.775772ee.css.map",
7
+ "main.cbcb09c9.js.map": "/static/js/main.cbcb09c9.js.map"
8
8
  },
9
9
  "entrypoints": [
10
- "static/css/main.2d095544.css",
11
- "static/js/main.17e17668.js"
10
+ "static/css/main.775772ee.css",
11
+ "static/js/main.cbcb09c9.js"
12
12
  ]
13
13
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#4a90e2"/><meta name="description" content="ezPM2GUI - A modern interface for PM2 process manager"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>EZ PM2 GUI - PM2 Process Manager</title><script defer="defer" src="/static/js/main.17e17668.js"></script><link href="/static/css/main.2d095544.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#4a90e2"/><meta name="description" content="EZ PM2 GUI - A modern interface for PM2 process manager"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>EZ PM2 GUI - PM2 Process Manager</title><script defer="defer" src="/static/js/main.cbcb09c9.js"></script><link href="/static/css/main.775772ee.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -1,6 +1,6 @@
1
1
  {
2
- "short_name": "ezPM2GUI",
3
- "name": "ezPM2GUI - Modern PM2 Interface",
2
+ "short_name": "EZ PM2 GUI",
3
+ "name": "EZ PM2 GUI - Modern PM2 Interface",
4
4
  "icons": [
5
5
  {
6
6
  "src": "favicon.ico",
@@ -0,0 +1,5 @@
1
+ @import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap);
2
+ /*
3
+ ! tailwindcss v3.4.0 | MIT License | https://tailwindcss.com
4
+ */*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,ui-sans-serif,system-ui,sans-serif;font-variation-settings:normal;line-height:1.5;tab-size:4}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}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,pre,samp{font-feature-settings:normal;font-family:JetBrains Mono,ui-monospace,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-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,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],input:where(:not([type])),select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,input:where(:not([type])):focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple],[size]:where(select:not([size="1"])){background-image:none;background-position:0 0;background-repeat:repeat;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:inherit;print-color-adjust:inherit}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--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(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}@media (forced-colors:active){[type=checkbox]:checked{-webkit-appearance:auto;appearance:auto}}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}@media (forced-colors:active){[type=radio]:checked{-webkit-appearance:auto;appearance:auto}}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}@media (forced-colors:active){[type=checkbox]:indeterminate{-webkit-appearance:auto;appearance:auto}}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:#0000 none repeat 0 0/auto auto padding-box border-box scroll;background:initial;border-color:inherit;border-radius:0;border-width:0;font-size:inherit;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*{box-sizing:border-box}html{font-size:16px;scroll-behavior:smooth}body{font-feature-settings:"rlig" 1,"calt" 1,"kern" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:rgb(241 245 249/var(--tw-bg-opacity));color:rgb(15 23 42/var(--tw-text-opacity));font-family:Inter,ui-sans-serif,system-ui,sans-serif;letter-spacing:-.01em;line-height:1.45;margin:0}.dark body,body{--tw-bg-opacity:1;--tw-text-opacity:1}.dark body{background-color:rgb(2 6 23/var(--tw-bg-opacity));color:rgb(241 245 249/var(--tw-text-opacity))}*,:after,:before{--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:#3b82f680;--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: }::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:#3b82f680;--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: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.card{--tw-border-opacity:1;--tw-bg-opacity:1;--tw-shadow:0 1px 2px 0 #00000005;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);background-color:rgb(255 255 255/var(--tw-bg-opacity));border-color:rgb(226 232 240/var(--tw-border-opacity));border-radius:1rem;border-width:1px;box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(:where(.dark) .card){--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity));border-color:rgb(30 41 59/var(--tw-border-opacity))}.card-premium{--tw-shadow:0 1px 3px 0 #0000000f,0 1px 2px -1px #0000000a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);--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);background-color:#ffffffe6;border-color:#e2e8f099;border-radius:1.5rem;border-width:1px;box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(:where(.dark) .card-premium){background-color:#0f172ae6;border-color:#1e293b99}.card-content-compact{padding:.5rem}.badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:.75rem;font-weight:500;line-height:1rem;padding:.125rem .5rem}.badge-success{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity));color:rgb(22 101 52/var(--tw-text-opacity))}:is(:where(.dark) .badge-success){--tw-text-opacity:1;background-color:#14532d40;color:rgb(74 222 128/var(--tw-text-opacity))}.badge-warning{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity));color:rgb(146 64 14/var(--tw-text-opacity))}:is(:where(.dark) .badge-warning){--tw-text-opacity:1;background-color:#78350f40;color:rgb(251 191 36/var(--tw-text-opacity))}.badge-danger{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity));color:rgb(153 27 27/var(--tw-text-opacity))}:is(:where(.dark) .badge-danger){--tw-text-opacity:1;background-color:#7f1d1d40;color:rgb(248 113 113/var(--tw-text-opacity))}.badge-info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity));color:rgb(55 48 163/var(--tw-text-opacity))}:is(:where(.dark) .badge-info){--tw-text-opacity:1;background-color:#312e8140;color:rgb(129 140 248/var(--tw-text-opacity))}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-0{left:0}.left-2{left:.5rem}.left-2\.5{left:.625rem}.right-0{right:0}.top-0{top:0}.top-1\/2{top:50%}.top-9{top:2.25rem}.top-full{top:100%}.z-40{z-index:40}.z-50{z-index:50}.z-\[9998\]{z-index:9998}.z-\[9999\]{z-index:9999}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-bottom:.25rem;margin-top:.25rem}.-mt-1{margin-top:-.25rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0{margin-top:0}.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}.mt-6{margin-top:1.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[calc\(100vh-2\.25rem\)\]{height:calc(100vh - 2.25rem)}.h-full{height:100%}.h-px{height:1px}.max-h-72{max-height:18rem}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[200px\]{width:200px}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0}.min-w-\[2rem\]{min-width:2rem}.min-w-\[36px\]{min-width:36px}.min-w-\[56px\]{min-width:56px}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-\[100px\]{max-width:100px}.max-w-md{max-width:28rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fadeIn .3s ease-out}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;user-select:none}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.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}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(0px*var(--tw-space-y-reverse));margin-top:calc(0px*(1 - var(--tw-space-y-reverse)))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.125rem*var(--tw-space-y-reverse));margin-top:calc(.125rem*(1 - var(--tw-space-y-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.625rem*var(--tw-space-y-reverse));margin-top:calc(.625rem*(1 - var(--tw-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.divide-neutral-100>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(241 245 249/var(--tw-divide-opacity))}.divide-neutral-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(226 232 240/var(--tw-divide-opacity))}.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}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:2rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:1rem}.rounded-md{border-radius:.75rem}.rounded-xl{border-radius:1.5rem}.border{border-width:1px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-500\/20{border-color:#3b82f633}.border-danger-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-green-500\/20{border-color:#22c55e33}.border-neutral-100{--tw-border-opacity:1;border-color:rgb(241 245 249/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.border-neutral-600{--tw-border-opacity:1;border-color:rgb(71 85 105/var(--tw-border-opacity))}.border-neutral-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-orange-300{--tw-border-opacity:1;border-color:rgb(253 186 116/var(--tw-border-opacity))}.border-orange-400\/30{border-color:#fb923c4d}.border-orange-500\/20{border-color:#f9731633}.border-primary-200{--tw-border-opacity:1;border-color:rgb(199 210 254/var(--tw-border-opacity))}.border-primary-500{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.border-primary-700\/50{border-color:#4338ca80}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-violet-400\/60{border-color:#a78bfa99}.border-violet-500\/25{border-color:#8b5cf640}.border-yellow-300{--tw-border-opacity:1;border-color:rgb(253 224 71/var(--tw-border-opacity))}.border-yellow-400\/30{border-color:#facc154d}.border-t-transparent{border-top-color:#0000}.bg-accent-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity))}.bg-amber-100{--tw-bg-opacity:1;background-color:rgb(254 243 199/var(--tw-bg-opacity))}.bg-amber-500{--tw-bg-opacity:1;background-color:rgb(245 158 11/var(--tw-bg-opacity))}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-cyan-100{--tw-bg-opacity:1;background-color:rgb(207 250 254/var(--tw-bg-opacity))}.bg-danger-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity))}.bg-danger-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-emerald-100{--tw-bg-opacity:1;background-color:rgb(209 250 229/var(--tw-bg-opacity))}.bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-green-500\/10{background-color:#22c55e1a}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-neutral-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-neutral-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-neutral-50\/80{background-color:#f8fafccc}.bg-neutral-700{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.bg-orange-400\/10{background-color:#fb923c1a}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity))}.bg-orange-500\/10{background-color:#f973161a}.bg-primary-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity))}.bg-primary-50{--tw-bg-opacity:1;background-color:rgb(238 242 255/var(--tw-bg-opacity))}.bg-primary-500{--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity))}.bg-primary-500\/10{background-color:#6366f11a}.bg-primary-600{--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity))}.bg-primary-600\/10{background-color:#4f46e51a}.bg-primary-900\/30{background-color:#312e814d}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-rose-100{--tw-bg-opacity:1;background-color:rgb(255 228 230/var(--tw-bg-opacity))}.bg-rose-500{--tw-bg-opacity:1;background-color:rgb(244 63 94/var(--tw-bg-opacity))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity))}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(237 233 254/var(--tw-bg-opacity))}.bg-violet-500\/10{background-color:#8b5cf61a}.bg-violet-500\/15{background-color:#8b5cf626}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-yellow-400\/10{background-color:#facc151a}.bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(234 179 8/var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-accent-500{--tw-gradient-from:#a855f7 var(--tw-gradient-from-position);--tw-gradient-to:#a855f700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-danger-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:#ef444400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-neutral-100{--tw-gradient-from:#f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to:#f1f5f900 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-primary-500{--tw-gradient-from:#6366f1 var(--tw-gradient-from-position);--tw-gradient-to:#6366f100 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-success-500{--tw-gradient-from:#22c55e var(--tw-gradient-from-position);--tw-gradient-to:#22c55e00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-violet-500{--tw-gradient-from:#8b5cf6 var(--tw-gradient-from-position);--tw-gradient-to:#8b5cf600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-warning-500{--tw-gradient-from:#f59e0b var(--tw-gradient-from-position);--tw-gradient-to:#f59e0b00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-accent-600{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.to-danger-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.to-neutral-200{--tw-gradient-to:#e2e8f0 var(--tw-gradient-to-position)}.to-primary-600{--tw-gradient-to:#4f46e5 var(--tw-gradient-to-position)}.to-success-600{--tw-gradient-to:#16a34a var(--tw-gradient-to-position)}.to-warning-600{--tw-gradient-to:#d97706 var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.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{padding-bottom:0;padding-top:0}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-3\.5{padding-bottom:.875rem;padding-top:.875rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-7{padding-bottom:1.75rem}.pl-8{padding-left:2rem}.pr-3{padding-right:.75rem}.pr-6{padding-right:1.5rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-5{padding-top:1.25rem}.pt-7{padding-top:1.75rem}.pt-9{padding-top:2.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.0625rem;line-height:1.625rem}.text-3xl{font-size:1.1875rem;line-height:1.75rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-base{font-size:.875rem;line-height:1.375rem}.text-lg{font-size:.9375rem;line-height:1.5rem}.text-sm{font-size:.8125rem;line-height:1.25rem}.text-xl{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-amber-700{--tw-text-opacity:1;color:rgb(180 83 9/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-cyan-700{--tw-text-opacity:1;color:rgb(14 116 144/var(--tw-text-opacity))}.text-danger-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-green-400{--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-neutral-100{--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}.text-neutral-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.text-neutral-300{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.text-neutral-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}.text-neutral-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity))}.text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity))}.text-primary-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgb(99 102 241/var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity))}.text-primary-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity))}.text-violet-500{--tw-text-opacity:1;color:rgb(139 92 246/var(--tw-text-opacity))}.text-violet-700{--tw-text-opacity:1;color:rgb(109 40 217/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.overline{-webkit-text-decoration-line:overline;text-decoration-line:overline}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.placeholder-neutral-400::placeholder{--tw-placeholder-opacity:1;color:rgb(148 163 184/var(--tw-placeholder-opacity))}.placeholder-neutral-500::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-2xl{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 20px 25px -5px #00000014,0 8px 10px -6px #0000000a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-lg,.shadow-sm{box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 #0000000f,0 1px 2px -1px #0000000a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow-xl{--tw-shadow:0 25px 50px -12px #0000001f;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:0 0 #0000,0 0 #0000,var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.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(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-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}::-webkit-scrollbar{height:4px;width:4px}::-webkit-scrollbar-track{background:#0000}::-webkit-scrollbar-thumb{background:#94a3b859;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b899}.dark ::-webkit-scrollbar-thumb{background:#64748b59}.dark ::-webkit-scrollbar-thumb:hover{background:#64748b99}.glass-effect{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}.text-gradient{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,#6366f1,#a855f7);-webkit-background-clip:text;background-clip:text}.card,.card-premium,aside,body,nav{transition:background-color .15s ease,border-color .15s ease,color .15s ease}:focus-visible{outline:2px solid #6366f1;outline-offset:2px}:focus:not(:focus-visible){outline:none}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-neutral-300:hover{--tw-border-opacity:1;border-color:rgb(203 213 225/var(--tw-border-opacity))}.hover\:border-yellow-400:hover{--tw-border-opacity:1;border-color:rgb(250 204 21/var(--tw-border-opacity))}.hover\:border-yellow-400\/60:hover{border-color:#facc1599}.hover\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-green-200:hover{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.hover\:bg-neutral-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.hover\:bg-neutral-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.hover\:bg-neutral-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.hover\:bg-neutral-700:hover{--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hover\:bg-neutral-800:hover{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}.hover\:bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity))}.hover\:bg-orange-400\/20:hover{background-color:#fb923c33}.hover\:bg-primary-700:hover{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity))}.hover\:bg-yellow-200:hover{--tw-bg-opacity:1;background-color:rgb(254 240 138/var(--tw-bg-opacity))}.hover\:bg-yellow-400\/20:hover{background-color:#facc1533}.hover\:text-neutral-200:hover{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}.hover\:text-neutral-300:hover{--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}.hover\:text-neutral-600:hover{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}.hover\:text-neutral-700:hover{--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}.hover\:text-red-500:hover{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:text-yellow-400:hover{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}.hover\:text-yellow-600:hover{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity))}.hover\:opacity-100:hover{opacity:1}.focus\:border-primary-500:focus{--tw-border-opacity:1;border-color:rgb(99 102 241/var(--tw-border-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;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),0 0 #0000;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-primary-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity))}.active\:bg-neutral-300:active{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity))}.active\:bg-neutral-600:active{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:ml-\[200px\]{margin-left:200px}.sm\:mt-0{margin-top:0}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-40{width:10rem}.sm\:flex-grow-0{flex-grow:0}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}}@media (min-width:768px){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1280px){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}:is(:where(.dark) .dark\:divide-neutral-800)>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(30 41 59/var(--tw-divide-opacity))}:is(:where(.dark) .dark\:border-danger-800\/50){border-color:#991b1b80}:is(:where(.dark) .dark\:border-neutral-700){--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:is(:where(.dark) .dark\:border-neutral-800){--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}:is(:where(.dark) .dark\:bg-accent-900\/20){background-color:#581c8733}:is(:where(.dark) .dark\:bg-amber-900\/25){background-color:#78350f40}:is(:where(.dark) .dark\:bg-amber-900\/30){background-color:#78350f4d}:is(:where(.dark) .dark\:bg-blue-900\/30){background-color:#1e3a8a4d}:is(:where(.dark) .dark\:bg-cyan-900\/30){background-color:#164e634d}:is(:where(.dark) .dark\:bg-danger-900\/20){background-color:#7f1d1d33}:is(:where(.dark) .dark\:bg-emerald-900\/25){background-color:#064e3b40}:is(:where(.dark) .dark\:bg-emerald-900\/30){background-color:#064e3b4d}:is(:where(.dark) .dark\:bg-green-900\/25){background-color:#14532d40}:is(:where(.dark) .dark\:bg-green-900\/30){background-color:#14532d4d}:is(:where(.dark) .dark\:bg-neutral-700){--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:is(:where(.dark) .dark\:bg-neutral-800){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:is(:where(.dark) .dark\:bg-neutral-800\/40){background-color:#1e293b66}:is(:where(.dark) .dark\:bg-neutral-800\/50){background-color:#1e293b80}:is(:where(.dark) .dark\:bg-neutral-900){--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}:is(:where(.dark) .dark\:bg-neutral-900\/50){background-color:#0f172a80}:is(:where(.dark) .dark\:bg-primary-900\/25){background-color:#312e8140}:is(:where(.dark) .dark\:bg-red-900\/25){background-color:#7f1d1d40}:is(:where(.dark) .dark\:bg-red-900\/30){background-color:#7f1d1d4d}:is(:where(.dark) .dark\:bg-rose-900\/25){background-color:#88133740}:is(:where(.dark) .dark\:bg-rose-900\/30){background-color:#8813374d}:is(:where(.dark) .dark\:bg-sky-900\/30){background-color:#0c4a6e4d}:is(:where(.dark) .dark\:bg-violet-900\/30){background-color:#4c1d954d}:is(:where(.dark) .dark\:bg-yellow-900\/25){background-color:#713f1240}:is(:where(.dark) .dark\:bg-yellow-900\/30){background-color:#713f124d}:is(:where(.dark) .dark\:from-neutral-800){--tw-gradient-from:#1e293b var(--tw-gradient-from-position);--tw-gradient-to:#1e293b00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(:where(.dark) .dark\:to-neutral-700){--tw-gradient-to:#334155 var(--tw-gradient-to-position)}:is(:where(.dark) .dark\:text-accent-400){--tw-text-opacity:1;color:rgb(192 132 252/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-amber-300){--tw-text-opacity:1;color:rgb(252 211 77/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-amber-400){--tw-text-opacity:1;color:rgb(251 191 36/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-blue-400){--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-cyan-300){--tw-text-opacity:1;color:rgb(103 232 249/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-danger-400){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-emerald-300){--tw-text-opacity:1;color:rgb(110 231 183/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-emerald-400){--tw-text-opacity:1;color:rgb(52 211 153/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-green-400){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-100){--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-200){--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-300){--tw-text-opacity:1;color:rgb(203 213 225/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-400){--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-500){--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-600){--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-neutral-700){--tw-text-opacity:1;color:rgb(51 65 85/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-primary-400){--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-red-400){--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-rose-300){--tw-text-opacity:1;color:rgb(253 164 175/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-rose-400){--tw-text-opacity:1;color:rgb(251 113 133/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-sky-300){--tw-text-opacity:1;color:rgb(125 211 252/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-violet-300){--tw-text-opacity:1;color:rgb(196 181 253/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-yellow-400){--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity))}:is(:where(.dark) .dark\:placeholder-neutral-500)::placeholder{--tw-placeholder-opacity:1;color:rgb(100 116 139/var(--tw-placeholder-opacity))}:is(:where(.dark) .dark\:hover\:border-neutral-700:hover){--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity))}:is(:where(.dark) .dark\:hover\:bg-blue-900\/50:hover){background-color:#1e3a8a80}:is(:where(.dark) .dark\:hover\:bg-green-900\/50:hover){background-color:#14532d80}:is(:where(.dark) .dark\:hover\:bg-neutral-700:hover){--tw-bg-opacity:1;background-color:rgb(51 65 85/var(--tw-bg-opacity))}:is(:where(.dark) .dark\:hover\:bg-neutral-800:hover){--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity))}:is(:where(.dark) .dark\:hover\:bg-neutral-800\/40:hover){background-color:#1e293b66}:is(:where(.dark) .dark\:hover\:bg-neutral-800\/50:hover){background-color:#1e293b80}:is(:where(.dark) .dark\:hover\:bg-red-900\/50:hover){background-color:#7f1d1d80}:is(:where(.dark) .dark\:hover\:bg-yellow-900\/50:hover){background-color:#713f1280}:is(:where(.dark) .dark\:hover\:text-neutral-100:hover){--tw-text-opacity:1;color:rgb(241 245 249/var(--tw-text-opacity))}:is(:where(.dark) .dark\:hover\:text-neutral-200:hover){--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity))}
5
+ /*# sourceMappingURL=main.775772ee.css.map*/
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/css/main.775772ee.css","mappings":"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","sources":["index.css"],"sourcesContent":["@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap');\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n/* ─── Base ────────────────────────────────────────────────── */\n@layer base {\n * { @apply box-border; }\n\n html { @apply scroll-smooth; font-size: 16px; }\n\n body {\n @apply bg-neutral-100 text-neutral-900 font-sans antialiased;\n margin: 0;\n line-height: 1.45;\n letter-spacing: -0.01em;\n font-feature-settings: \"rlig\" 1, \"calt\" 1, \"kern\" 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .dark body {\n @apply bg-neutral-950 text-neutral-100;\n }\n}\n\n/* ─── Components ─────────────────────────────────────────── */\n@layer components {\n\n /* Cards */\n .card {\n @apply bg-white dark:bg-neutral-900 rounded-lg border border-neutral-200 dark:border-neutral-800 shadow-xs;\n }\n .card-premium {\n @apply bg-white/90 dark:bg-neutral-900/90 backdrop-blur-sm rounded-xl border border-neutral-200/60 dark:border-neutral-800/60 shadow-sm;\n }\n .card-content { @apply p-3; }\n .card-content-compact { @apply p-2; }\n\n /* Buttons — slim by default */\n .btn-primary {\n @apply bg-primary-600 hover:bg-primary-700 active:bg-primary-800\n text-white font-medium text-sm\n px-3 py-1.5 rounded-md\n transition-colors duration-150\n focus:outline-none focus:ring-2 focus:ring-primary-500/40\n shadow-xs hover:shadow-sm;\n }\n .btn-secondary {\n @apply bg-neutral-100 hover:bg-neutral-200 active:bg-neutral-300\n dark:bg-neutral-800 dark:hover:bg-neutral-700 dark:active:bg-neutral-600\n text-neutral-800 dark:text-neutral-200\n font-medium text-sm\n px-3 py-1.5 rounded-md\n transition-colors duration-150\n focus:outline-none focus:ring-2 focus:ring-neutral-400/30;\n }\n .btn-ghost {\n @apply bg-transparent hover:bg-neutral-100 dark:hover:bg-neutral-800\n text-neutral-600 dark:text-neutral-400\n font-medium text-sm\n px-2.5 py-1 rounded-md\n transition-colors duration-150\n focus:outline-none;\n }\n .btn-danger {\n @apply bg-danger-600 hover:bg-danger-700\n text-white font-medium text-sm\n px-3 py-1.5 rounded-md\n transition-colors duration-150\n focus:outline-none focus:ring-2 focus:ring-danger-400/30;\n }\n\n /* Inputs */\n .input-field {\n @apply w-full px-2.5 py-1.5\n border border-neutral-300 dark:border-neutral-700\n rounded-md\n bg-white dark:bg-neutral-900\n text-neutral-900 dark:text-neutral-100 text-sm\n placeholder-neutral-400 dark:placeholder-neutral-500\n focus:outline-none focus:ring-2 focus:ring-primary-500/30 focus:border-primary-500\n transition-colors duration-150;\n }\n\n /* Badges */\n .badge { @apply inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium; }\n .badge-success { @apply bg-success-100 text-success-800 dark:bg-success-900/25 dark:text-success-400; }\n .badge-warning { @apply bg-warning-100 text-warning-800 dark:bg-warning-900/25 dark:text-warning-400; }\n .badge-danger { @apply bg-danger-100 text-danger-800 dark:bg-danger-900/25 dark:text-danger-400; }\n .badge-info { @apply bg-primary-100 text-primary-800 dark:bg-primary-900/25 dark:text-primary-400; }\n .badge-neutral { @apply bg-neutral-100 text-neutral-700 dark:bg-neutral-800 dark:text-neutral-300; }\n\n /* Table helpers */\n .table-th {\n @apply px-2.5 py-1.5 text-left text-xs font-semibold\n text-neutral-500 dark:text-neutral-400\n uppercase tracking-wide\n border-b border-neutral-200 dark:border-neutral-800;\n }\n .table-td {\n @apply px-2.5 py-1.5 text-sm text-neutral-800 dark:text-neutral-200\n border-b border-neutral-100 dark:border-neutral-800/50;\n }\n}\n\n/* ─── Scrollbar ──────────────────────────────────────────── */\n::-webkit-scrollbar { width: 4px; height: 4px; }\n::-webkit-scrollbar-track { background: transparent; }\n::-webkit-scrollbar-thumb { background: rgba(148,163,184,.35); border-radius: 4px; }\n::-webkit-scrollbar-thumb:hover { background: rgba(148,163,184,.6); }\n.dark ::-webkit-scrollbar-thumb { background: rgba(100,116,139,.35); }\n.dark ::-webkit-scrollbar-thumb:hover { background: rgba(100,116,139,.6); }\n\n/* ─── Utilities ──────────────────────────────────────────── */\n.glass-effect {\n backdrop-filter: blur(16px);\n -webkit-backdrop-filter: blur(16px);\n}\n\n.text-gradient {\n background: linear-gradient(135deg, theme('colors.primary.500'), theme('colors.accent.500'));\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n}\n\n/* Theme-switch transitions — only on non-motion backgrounds */\nbody, .card, .card-premium, nav, aside {\n transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;\n}\n\n/* Accessibility focus ring */\n*:focus-visible {\n outline: 2px solid theme('colors.primary.500');\n outline-offset: 2px;\n}\n*:focus:not(:focus-visible) { outline: none; }\n"],"names":[],"sourceRoot":""}