ezpm2gui 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -41
- package/dist/server/config/cron-jobs.json +18 -0
- package/dist/server/config/cron-scripts/6d8d5e1d-2bc8-463f-82a6-6c294f2b9dbe.sh +2 -0
- package/dist/server/config/remote-connections.json +22 -0
- package/dist/server/index.js +3 -1
- package/dist/server/routes/cronJobs.d.ts +7 -0
- package/dist/server/routes/cronJobs.js +189 -0
- package/dist/server/routes/remoteConnections.js +105 -0
- package/dist/server/services/CronJobService.d.ts +74 -0
- package/dist/server/services/CronJobService.js +407 -0
- package/dist/server/utils/remote-connection.d.ts +17 -0
- package/dist/server/utils/remote-connection.js +185 -15
- package/package.json +5 -1
- package/src/client/build/asset-manifest.json +6 -6
- package/src/client/build/index.html +1 -1
- package/src/client/build/static/css/main.d46bc75c.css +5 -0
- package/src/client/build/static/css/main.d46bc75c.css.map +1 -0
- package/src/client/build/static/js/main.b0e1c9b1.js +3 -0
- package/src/client/build/static/js/{main.31323a04.js.LICENSE.txt → main.b0e1c9b1.js.LICENSE.txt} +11 -0
- package/src/client/build/static/js/main.b0e1c9b1.js.map +1 -0
- package/src/client/build/static/css/main.672b8f26.css +0 -2
- package/src/client/build/static/css/main.672b8f26.css.map +0 -1
- package/src/client/build/static/js/main.31323a04.js +0 -156
- package/src/client/build/static/js/main.31323a04.js.map +0 -1
|
@@ -172,18 +172,108 @@ class RemoteConnection extends events_1.EventEmitter {
|
|
|
172
172
|
}
|
|
173
173
|
/**
|
|
174
174
|
* Check if PM2 is installed on the remote server
|
|
175
|
+
* Uses multiple detection methods for better reliability
|
|
175
176
|
*/
|
|
176
177
|
async checkPM2Installation() {
|
|
177
178
|
try {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
179
|
+
// Method 1: Try running pm2 --version directly (most reliable)
|
|
180
|
+
try {
|
|
181
|
+
const versionResult = await this.executeCommand('pm2 --version');
|
|
182
|
+
if (versionResult.code === 0 && versionResult.stdout.trim()) {
|
|
183
|
+
console.log(`PM2 detected via version check: ${versionResult.stdout.trim()}`);
|
|
184
|
+
this.isPM2Installed = true;
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.log('PM2 version check failed, trying alternative methods');
|
|
190
|
+
}
|
|
191
|
+
// Method 2: Check common installation paths
|
|
192
|
+
const pathChecks = [
|
|
193
|
+
'which pm2',
|
|
194
|
+
'command -v pm2',
|
|
195
|
+
'ls -la /usr/local/bin/pm2',
|
|
196
|
+
'ls -la ~/.npm-global/bin/pm2',
|
|
197
|
+
'ls -la ~/node_modules/.bin/pm2',
|
|
198
|
+
'find /usr -name "pm2" -type f -executable 2>/dev/null | head -1'
|
|
199
|
+
];
|
|
200
|
+
for (const pathCheck of pathChecks) {
|
|
201
|
+
try {
|
|
202
|
+
const result = await this.executeCommand(pathCheck);
|
|
203
|
+
if (result.code === 0 && result.stdout.trim() && !result.stdout.includes('not found')) {
|
|
204
|
+
console.log(`PM2 found via: ${pathCheck} -> ${result.stdout.trim()}`);
|
|
205
|
+
this.isPM2Installed = true;
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// Continue to next method
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Method 3: Try with full environment loading
|
|
215
|
+
try {
|
|
216
|
+
const envResult = await this.executeCommand('bash -l -c "pm2 --version"');
|
|
217
|
+
if (envResult.code === 0 && envResult.stdout.trim()) {
|
|
218
|
+
console.log(`PM2 detected via bash login shell: ${envResult.stdout.trim()}`);
|
|
219
|
+
this.isPM2Installed = true;
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.log('PM2 not found via bash login shell');
|
|
225
|
+
}
|
|
226
|
+
// Method 4: Try npm ls -g pm2
|
|
227
|
+
try {
|
|
228
|
+
const npmResult = await this.executeCommand('npm ls -g pm2 --depth=0');
|
|
229
|
+
if (npmResult.code === 0 && !npmResult.stdout.includes('(empty)')) {
|
|
230
|
+
console.log('PM2 detected via npm global list');
|
|
231
|
+
this.isPM2Installed = true;
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
console.log('PM2 not found via npm global list');
|
|
237
|
+
}
|
|
238
|
+
console.log('PM2 not detected via any method');
|
|
239
|
+
this.isPM2Installed = false;
|
|
240
|
+
return false;
|
|
181
241
|
}
|
|
182
242
|
catch (error) {
|
|
243
|
+
console.error('Error during PM2 installation check:', error);
|
|
183
244
|
this.isPM2Installed = false;
|
|
184
245
|
return false;
|
|
185
246
|
}
|
|
186
247
|
}
|
|
248
|
+
/**
|
|
249
|
+
* Execute a PM2 command with proper PATH handling
|
|
250
|
+
* Tries different methods to find and execute PM2
|
|
251
|
+
*/
|
|
252
|
+
async executePM2Command(pm2Args) {
|
|
253
|
+
const commands = [
|
|
254
|
+
`pm2 ${pm2Args}`, // Direct PM2 call
|
|
255
|
+
`bash -l -c "pm2 ${pm2Args}"`, // With login shell
|
|
256
|
+
`~/.npm-global/bin/pm2 ${pm2Args}`, // Common global npm path
|
|
257
|
+
`~/node_modules/.bin/pm2 ${pm2Args}`, // Local node_modules path
|
|
258
|
+
`/usr/local/bin/pm2 ${pm2Args}`, // System-wide installation
|
|
259
|
+
`npx pm2 ${pm2Args}` // Using npx as fallback
|
|
260
|
+
];
|
|
261
|
+
let lastError = null;
|
|
262
|
+
for (const command of commands) {
|
|
263
|
+
try {
|
|
264
|
+
const result = await this.executeCommand(command);
|
|
265
|
+
if (result.code === 0) {
|
|
266
|
+
return result;
|
|
267
|
+
}
|
|
268
|
+
lastError = new Error(`Command failed with exit code ${result.code}: ${result.stderr}`);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
lastError = error;
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
throw lastError || new Error(`Failed to execute PM2 command: ${pm2Args}`);
|
|
276
|
+
}
|
|
187
277
|
/**
|
|
188
278
|
* Get PM2 processes from the remote server
|
|
189
279
|
*/
|
|
@@ -193,14 +283,14 @@ class RemoteConnection extends events_1.EventEmitter {
|
|
|
193
283
|
if (!this._isConnected) {
|
|
194
284
|
await this.connect();
|
|
195
285
|
}
|
|
196
|
-
// Check if PM2 is installed
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
throw new Error('PM2 is not installed on the remote server');
|
|
201
|
-
}
|
|
286
|
+
// Check if PM2 is installed (force re-check if not cached)
|
|
287
|
+
const isPM2Installed = await this.checkPM2Installation();
|
|
288
|
+
if (!isPM2Installed) {
|
|
289
|
+
throw new Error('PM2 is not installed on the remote server. Please install PM2 globally using: npm install -g pm2');
|
|
202
290
|
}
|
|
203
|
-
|
|
291
|
+
// Update the cached status
|
|
292
|
+
this.isPM2Installed = true;
|
|
293
|
+
const result = await this.executePM2Command('jlist');
|
|
204
294
|
// Clean the output to ensure it's valid JSON
|
|
205
295
|
// Sometimes pm2 jlist can include non-JSON data at the beginning or end
|
|
206
296
|
let cleanedOutput = result.stdout.trim();
|
|
@@ -289,25 +379,72 @@ class RemoteConnection extends events_1.EventEmitter {
|
|
|
289
379
|
* Start a PM2 process
|
|
290
380
|
*/
|
|
291
381
|
async startPM2Process(processName) {
|
|
292
|
-
return await this.
|
|
382
|
+
return await this.executePM2Command(`start ${processName}`);
|
|
293
383
|
}
|
|
294
384
|
/**
|
|
295
385
|
* Stop a PM2 process
|
|
296
386
|
*/
|
|
297
387
|
async stopPM2Process(processName) {
|
|
298
|
-
return await this.
|
|
388
|
+
return await this.executePM2Command(`stop ${processName}`);
|
|
299
389
|
}
|
|
300
390
|
/**
|
|
301
391
|
* Restart a PM2 process
|
|
302
392
|
*/
|
|
303
393
|
async restartPM2Process(processName) {
|
|
304
|
-
return await this.
|
|
394
|
+
return await this.executePM2Command(`restart ${processName}`);
|
|
305
395
|
}
|
|
306
396
|
/**
|
|
307
397
|
* Delete a PM2 process
|
|
308
398
|
*/
|
|
309
399
|
async deletePM2Process(processName) {
|
|
310
|
-
return await this.
|
|
400
|
+
return await this.executePM2Command(`delete ${processName}`);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Install PM2 on the remote server
|
|
404
|
+
*/
|
|
405
|
+
async installPM2() {
|
|
406
|
+
try {
|
|
407
|
+
console.log('Attempting to install PM2 on remote server...');
|
|
408
|
+
// Try different installation methods
|
|
409
|
+
const installCommands = [
|
|
410
|
+
'npm install -g pm2', // Standard global install
|
|
411
|
+
'sudo npm install -g pm2', // With sudo if needed
|
|
412
|
+
'npm install -g pm2 --unsafe-perm=true', // With unsafe permissions
|
|
413
|
+
];
|
|
414
|
+
let lastResult = null;
|
|
415
|
+
for (const command of installCommands) {
|
|
416
|
+
try {
|
|
417
|
+
const result = await this.executeCommand(command, command.includes('sudo'));
|
|
418
|
+
if (result.code === 0) {
|
|
419
|
+
console.log(`PM2 installed successfully with: ${command}`);
|
|
420
|
+
// Verify installation
|
|
421
|
+
const isPM2Installed = await this.checkPM2Installation();
|
|
422
|
+
if (isPM2Installed) {
|
|
423
|
+
this.isPM2Installed = true;
|
|
424
|
+
return result;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
lastResult = result;
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
console.log(`Failed to install PM2 with command: ${command}`);
|
|
431
|
+
lastResult = {
|
|
432
|
+
stdout: '',
|
|
433
|
+
stderr: error instanceof Error ? error.message : 'Unknown error',
|
|
434
|
+
code: 1
|
|
435
|
+
};
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
return lastResult || {
|
|
439
|
+
stdout: '',
|
|
440
|
+
stderr: 'Failed to install PM2 with any method',
|
|
441
|
+
code: 1
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
console.error('Error installing PM2:', error);
|
|
446
|
+
throw error;
|
|
447
|
+
}
|
|
311
448
|
}
|
|
312
449
|
/**
|
|
313
450
|
* Get system information from the remote server
|
|
@@ -435,7 +572,8 @@ exports.RemoteConnection = RemoteConnection;
|
|
|
435
572
|
class RemoteConnectionManager {
|
|
436
573
|
constructor() {
|
|
437
574
|
this.connections = new Map();
|
|
438
|
-
|
|
575
|
+
const path = require('path');
|
|
576
|
+
this.configFilePath = path.join(__dirname, '../config/remote-connections.json');
|
|
439
577
|
this.loadConnectionsFromDisk();
|
|
440
578
|
}
|
|
441
579
|
/**
|
|
@@ -454,6 +592,38 @@ class RemoteConnectionManager {
|
|
|
454
592
|
this.saveConnectionsToDisk();
|
|
455
593
|
return connectionId;
|
|
456
594
|
}
|
|
595
|
+
/**
|
|
596
|
+
* Update an existing remote connection
|
|
597
|
+
* @param connectionId The connection ID
|
|
598
|
+
* @param config New connection configuration
|
|
599
|
+
* @returns True if the connection was updated, false if it didn't exist
|
|
600
|
+
*/
|
|
601
|
+
async updateConnection(connectionId, config) {
|
|
602
|
+
const existingConnection = this.connections.get(connectionId);
|
|
603
|
+
if (!existingConnection) {
|
|
604
|
+
return false;
|
|
605
|
+
}
|
|
606
|
+
// Close the existing connection if it's active
|
|
607
|
+
if (existingConnection.isConnected()) {
|
|
608
|
+
await existingConnection.disconnect();
|
|
609
|
+
}
|
|
610
|
+
// Get the old config to preserve password if not provided in update
|
|
611
|
+
const oldConfig = existingConnection.getFullConfig();
|
|
612
|
+
// If password is not provided in the update, keep the old one
|
|
613
|
+
const updatedConfig = {
|
|
614
|
+
...config,
|
|
615
|
+
password: config.password || oldConfig.password,
|
|
616
|
+
privateKey: config.privateKey || oldConfig.privateKey,
|
|
617
|
+
passphrase: config.passphrase || oldConfig.passphrase
|
|
618
|
+
};
|
|
619
|
+
// Create a new connection with updated config
|
|
620
|
+
const newConnection = new RemoteConnection(updatedConfig);
|
|
621
|
+
// Replace the old connection with the new one
|
|
622
|
+
this.connections.set(connectionId, newConnection);
|
|
623
|
+
// Save the updated connections to disk
|
|
624
|
+
this.saveConnectionsToDisk();
|
|
625
|
+
return true;
|
|
626
|
+
}
|
|
457
627
|
/**
|
|
458
628
|
* Get a connection by ID
|
|
459
629
|
* @param connectionId The connection ID
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ezpm2gui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"main": "dist/server/index.js",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ezpm2gui": "bin/ezpm2gui.js",
|
|
@@ -40,9 +40,13 @@
|
|
|
40
40
|
"scripts/postinstall.js"
|
|
41
41
|
],
|
|
42
42
|
"dependencies": {
|
|
43
|
+
"@tailwindcss/postcss": "^4.1.14",
|
|
44
|
+
"@types/node-cron": "^3.0.11",
|
|
43
45
|
"axios": "^1.9.0",
|
|
44
46
|
"chart.js": "^4.4.9",
|
|
47
|
+
"cron-parser": "^5.4.0",
|
|
45
48
|
"express": "^4.18.3",
|
|
49
|
+
"node-cron": "^4.2.1",
|
|
46
50
|
"pm2": "^6.0.5",
|
|
47
51
|
"react": "^19.1.0",
|
|
48
52
|
"react-dom": "^19.1.0",
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"main.css": "/static/css/main.
|
|
4
|
-
"main.js": "/static/js/main.
|
|
3
|
+
"main.css": "/static/css/main.d46bc75c.css",
|
|
4
|
+
"main.js": "/static/js/main.b0e1c9b1.js",
|
|
5
5
|
"index.html": "/index.html",
|
|
6
|
-
"main.
|
|
7
|
-
"main.
|
|
6
|
+
"main.d46bc75c.css.map": "/static/css/main.d46bc75c.css.map",
|
|
7
|
+
"main.b0e1c9b1.js.map": "/static/js/main.b0e1c9b1.js.map"
|
|
8
8
|
},
|
|
9
9
|
"entrypoints": [
|
|
10
|
-
"static/css/main.
|
|
11
|
-
"static/js/main.
|
|
10
|
+
"static/css/main.d46bc75c.css",
|
|
11
|
+
"static/js/main.b0e1c9b1.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>
|
|
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.b0e1c9b1.js"></script><link href="/static/css/main.d46bc75c.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
@import url(https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@300;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{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(248 250 252/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.6;margin:0;transition:background-color .2s cubic-bezier(.4,0,.2,1),color .2s cubic-bezier(.4,0,.2,1)}.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(248 250 252/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-premium{--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);--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:#fffc;border-color:#e2e8f080;border-radius:2rem;border-width:1px;transition-duration:.3s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.card-premium,.card-premium:hover{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)}.card-premium:hover{--tw-shadow:0 25px 50px -12px #0000001f;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}:is(:where(.dark) .card-premium){background-color:#0f172acc;border-color:#1e293b80}.card-content-compact{padding:1.5rem}.badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:.875rem;font-weight:500;line-height:1.25rem;padding:.25rem .75rem}.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:#14532d33;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:#78350f33;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:#7f1d1d33;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:#312e8133;color:rgb(129 140 248/var(--tw-text-opacity))}.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-2{right:.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-16{top:4rem}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.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-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[calc\(100vh-4rem\)\]{height:calc(100vh - 4rem)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-full{width:100%}.min-w-\[2rem\]{min-width:2rem}.min-w-\[40px\]{min-width:40px}.min-w-\[60px\]{min-width:60px}.min-w-full{min-width:100%}.max-w-\[100px\]{max-width:100px}.max-w-md{max-width:28rem}.flex-1{flex:1 1}.flex-grow{flex-grow:1}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.transform{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 pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes slideUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-slide-up{animation:slideUp .3s ease-out}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.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-2{gap:.5rem}.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-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-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-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-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.divide-gray-700>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(55 65 81/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-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-danger-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity))}.border-neutral-200\/50{border-color:#e2e8f080}.border-neutral-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity))}.border-neutral-800\/50{border-color:#1e293b80}.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-amber-600{--tw-bg-opacity:1;background-color:rgb(217 119 6/var(--tw-bg-opacity))}.bg-amber-900{--tw-bg-opacity:1;background-color:rgb(120 53 15/var(--tw-bg-opacity))}.bg-black\/60{background-color:#0009}.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-cyan-500{--tw-bg-opacity:1;background-color:rgb(6 182 212/var(--tw-bg-opacity))}.bg-cyan-600{--tw-bg-opacity:1;background-color:rgb(8 145 178/var(--tw-bg-opacity))}.bg-danger-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/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-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.bg-emerald-900{--tw-bg-opacity:1;background-color:rgb(6 78 59/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/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-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-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.bg-neutral-900\/80{background-color:#0f172acc}.bg-neutral-900\/95{background-color:#0f172af2}.bg-neutral-950{--tw-bg-opacity:1;background-color:rgb(2 6 23/var(--tw-bg-opacity))}.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-rose-600{--tw-bg-opacity:1;background-color:rgb(225 29 72/var(--tw-bg-opacity))}.bg-rose-900{--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/80{background-color:#fffc}.bg-white\/95{background-color:#fffffff2}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/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-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:#3b82f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-blue-900{--tw-gradient-from:#1e3a8a var(--tw-gradient-from-position);--tw-gradient-to:#1e3a8a00 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-cyan-500{--tw-gradient-from:#06b6d4 var(--tw-gradient-from-position);--tw-gradient-to:#06b6d400 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.from-cyan-900{--tw-gradient-from:#164e63 var(--tw-gradient-from-position);--tw-gradient-to:#164e6300 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-purple-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-purple-900{--tw-gradient-from:#581c87 var(--tw-gradient-from-position);--tw-gradient-to:#581c8700 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-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-500{--tw-gradient-to:#a855f7 var(--tw-gradient-to-position)}.to-accent-600{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.to-blue-800{--tw-gradient-to:#1e40af var(--tw-gradient-to-position)}.to-cyan-600{--tw-gradient-to:#0891b2 var(--tw-gradient-to-position)}.to-cyan-800{--tw-gradient-to:#155e75 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-purple-600{--tw-gradient-to:#9333ea var(--tw-gradient-to-position)}.to-purple-800{--tw-gradient-to:#6b21a8 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-12{padding:3rem}.p-16{padding:4rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.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-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-2\.5{padding-bottom:.625rem;padding-top:.625rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.pb-1{padding-bottom:.25rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-3{padding-right:.75rem}.pr-6{padding-right:1.5rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.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}.italic{font-style:italic}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-accent-800{--tw-text-opacity:1;color:rgb(107 33 168/var(--tw-text-opacity))}.text-amber-200{--tw-text-opacity:1;color:rgb(253 230 138/var(--tw-text-opacity))}.text-amber-800{--tw-text-opacity:1;color:rgb(146 64 14/var(--tw-text-opacity))}.text-blue-100{--tw-text-opacity:1;color:rgb(219 234 254/var(--tw-text-opacity))}.text-blue-200{--tw-text-opacity:1;color:rgb(191 219 254/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-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-cyan-100{--tw-text-opacity:1;color:rgb(207 250 254/var(--tw-text-opacity))}.text-cyan-200{--tw-text-opacity:1;color:rgb(165 243 252/var(--tw-text-opacity))}.text-danger-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-emerald-200{--tw-text-opacity:1;color:rgb(167 243 208/var(--tw-text-opacity))}.text-emerald-800{--tw-text-opacity:1;color:rgb(6 95 70/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/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-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-900{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.text-purple-100{--tw-text-opacity:1;color:rgb(243 232 255/var(--tw-text-opacity))}.text-purple-200{--tw-text-opacity:1;color:rgb(233 213 255/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-200{--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.text-rose-800{--tw-text-opacity:1;color:rgb(159 18 57/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/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}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.placeholder-gray-500::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity))}.opacity-0{opacity:0}.shadow-2xl{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{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-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-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-sm,.shadow-xl{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-xl{--tw-shadow:0 25px 50px -12px #0000001f;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.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-md{--tw-backdrop-blur:blur(12px);-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-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)}.duration-150,.transition-colors{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{background:#0000;border-radius:4px}::-webkit-scrollbar-thumb{background:#94a3b866;border-radius:4px;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}::-webkit-scrollbar-thumb:hover{background:#94a3b899}.dark ::-webkit-scrollbar-thumb{background:#64748b66}.dark ::-webkit-scrollbar-thumb:hover{background:#64748b99}.glass-effect{backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px)}.text-gradient{-webkit-text-fill-color:#0000;background:linear-gradient(135deg,#4f46e5,#9333ea);-webkit-background-clip:text;background-clip:text}::-webkit-scrollbar-thumb{background:#0000001a;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#0003}.dark ::-webkit-scrollbar-thumb{background:#ffffff1a}.dark ::-webkit-scrollbar-thumb:hover{background:#fff3}*{transition:background-color .2s ease,border-color .2s ease,color .2s ease}:focus{outline:2px solid var(--primary-color);outline-offset:2px}*{transition:background-color .3s ease,color .3s ease,border-color .3s ease,box-shadow .3s ease}.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\:bg-blue-200:hover{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/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\/50:hover{background-color:#f1f5f980}.hover\:bg-neutral-800\/50:hover{background-color:#1e293b80}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/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-opacity-50:hover{--tw-bg-opacity:0.5}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.hover\:text-blue-700:hover{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-green-700:hover{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.hover\:text-neutral-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity))}.hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity))}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgb(79 70 229/var(--tw-text-opacity))}.hover\:text-red-700:hover{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:text-yellow-700:hover{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity))}.hover\:shadow-md:hover{--tw-shadow:0 10px 15px -3px #00000014,0 4px 6px -4px #0000000a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px 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)}.focus\:border-transparent:focus{border-color:#0000}.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-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity))}.group:hover .group-hover\:bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.group:hover .group-hover\:opacity-100{opacity:1}@media (min-width:640px){.sm\:ml-80{margin-left:20rem}.sm\:mt-0{margin-top:0}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:w-40{width:10rem}.sm\:flex-grow-0{flex-grow:0}.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))}.md\:grid-cols-3{grid-template-columns:repeat(3,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\: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\:bg-accent-900\/20){background-color:#581c8733}:is(:where(.dark) .dark\:bg-danger-900\/20){background-color:#7f1d1d33}: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\: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-danger-400){--tw-text-opacity:1;color:rgb(248 113 113/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-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}
|
|
5
|
+
/*# sourceMappingURL=main.d46bc75c.css.map*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/css/main.d46bc75c.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;800&family=JetBrains+Mono:wght@300;400;500&display=swap');\r\n@tailwind base;\r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n@layer base {\r\n * {\r\n @apply box-border;\r\n }\r\n \r\n html {\r\n @apply scroll-smooth;\r\n }\r\n \r\n body {\r\n @apply bg-neutral-50 text-neutral-900 font-sans antialiased;\r\n margin: 0;\r\n font-feature-settings: \"rlig\" 1, \"calt\" 1, \"kern\" 1;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n transition: background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), \r\n color 0.2s cubic-bezier(0.4, 0, 0.2, 1);\r\n line-height: 1.6;\r\n letter-spacing: -0.01em;\r\n }\r\n \r\n .dark body {\r\n @apply bg-neutral-950 text-neutral-50;\r\n }\r\n}\r\n\r\n@layer components {\r\n /* Premium card designs */\r\n .card {\r\n @apply bg-white dark:bg-neutral-900 rounded-xl border border-neutral-200 dark:border-neutral-800 shadow-sm hover:shadow-md transition-all duration-200;\r\n }\r\n \r\n .card-premium {\r\n @apply bg-white/80 dark:bg-neutral-900/80 backdrop-blur-sm rounded-2xl border border-neutral-200/50 dark:border-neutral-800/50 shadow-lg hover:shadow-xl transition-all duration-300;\r\n }\r\n \r\n .card-content {\r\n @apply p-8;\r\n }\r\n \r\n .card-content-compact {\r\n @apply p-6;\r\n }\r\n \r\n /* Enhanced button system */\r\n .btn-primary {\r\n @apply bg-primary-600 hover:bg-primary-700 active:bg-primary-800 text-white font-semibold px-6 py-3 rounded-xl transition-all duration-200 focus:outline-none focus:ring-4 focus:ring-primary-500/20 shadow-sm hover:shadow-md;\r\n }\r\n \r\n .btn-secondary {\r\n @apply bg-neutral-100 hover:bg-neutral-200 active:bg-neutral-300 dark:bg-neutral-800 dark:hover:bg-neutral-700 dark:active:bg-neutral-600 text-neutral-900 dark:text-neutral-100 font-semibold px-6 py-3 rounded-xl transition-all duration-200 focus:outline-none focus:ring-4 focus:ring-neutral-500/20 shadow-sm hover:shadow-md;\r\n }\r\n \r\n .btn-accent {\r\n @apply bg-accent-600 hover:bg-accent-700 active:bg-accent-800 text-white font-semibold px-6 py-3 rounded-xl transition-all duration-200 focus:outline-none focus:ring-4 focus:ring-accent-500/20 shadow-sm hover:shadow-md;\r\n }\r\n \r\n .btn-ghost {\r\n @apply bg-transparent hover:bg-neutral-100 active:bg-neutral-200 dark:hover:bg-neutral-800 dark:active:bg-neutral-700 text-neutral-700 dark:text-neutral-300 font-medium px-4 py-2 rounded-lg transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-neutral-500/20;\r\n }\r\n \r\n /* Enhanced input system */\r\n .input-field {\r\n @apply w-full px-4 py-3 border border-neutral-300 dark:border-neutral-700 rounded-xl bg-white dark:bg-neutral-900 text-neutral-900 dark:text-neutral-100 placeholder-neutral-500 dark:placeholder-neutral-400 focus:outline-none focus:ring-4 focus:ring-primary-500/20 focus:border-primary-500 transition-all duration-200 shadow-sm hover:shadow-md;\r\n }\r\n \r\n /* Badge system */\r\n .badge {\r\n @apply inline-flex items-center px-3 py-1 rounded-full text-sm font-medium;\r\n }\r\n \r\n .badge-success {\r\n @apply bg-success-100 text-success-800 dark:bg-success-900/20 dark:text-success-400;\r\n }\r\n \r\n .badge-warning {\r\n @apply bg-warning-100 text-warning-800 dark:bg-warning-900/20 dark:text-warning-400;\r\n }\r\n \r\n .badge-danger {\r\n @apply bg-danger-100 text-danger-800 dark:bg-danger-900/20 dark:text-danger-400;\r\n }\r\n \r\n .badge-info {\r\n @apply bg-primary-100 text-primary-800 dark:bg-primary-900/20 dark:text-primary-400;\r\n }\r\n}\r\n\r\n/* Premium scrollbar styling */\r\n::-webkit-scrollbar {\r\n width: 8px;\r\n height: 8px;\r\n}\r\n\r\n::-webkit-scrollbar-track {\r\n background: transparent;\r\n border-radius: 4px;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background: rgba(148, 163, 184, 0.4);\r\n border-radius: 4px;\r\n transition: background-color 0.2s ease;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n background: rgba(148, 163, 184, 0.6);\r\n}\r\n\r\n.dark ::-webkit-scrollbar-thumb {\r\n background: rgba(100, 116, 139, 0.4);\r\n}\r\n\r\n.dark ::-webkit-scrollbar-thumb:hover {\r\n background: rgba(100, 116, 139, 0.6);\r\n}\r\n\r\n/* Additional utility classes */\r\n.glass-effect {\r\n backdrop-filter: blur(20px);\r\n -webkit-backdrop-filter: blur(20px);\r\n}\r\n\r\n.text-gradient {\r\n background: linear-gradient(135deg, theme('colors.primary.600'), theme('colors.accent.600'));\r\n -webkit-background-clip: text;\r\n -webkit-text-fill-color: transparent;\r\n background-clip: text;\r\n}\r\n\r\n::-webkit-scrollbar-thumb {\r\n background: rgba(0, 0, 0, 0.1);\r\n border-radius: 3px;\r\n}\r\n\r\n::-webkit-scrollbar-thumb:hover {\r\n background: rgba(0, 0, 0, 0.2);\r\n}\r\n\r\n/* Dark mode scrollbar */\r\n.dark ::-webkit-scrollbar-thumb {\r\n background: rgba(255, 255, 255, 0.1);\r\n}\r\n\r\n.dark ::-webkit-scrollbar-thumb:hover {\r\n background: rgba(255, 255, 255, 0.2);\r\n}\r\n\r\n/* Smooth transitions for theme switching */\r\n* {\r\n transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;\r\n}\r\n\r\n/* Focus styling for accessibility */\r\n*:focus {\r\n outline: 2px solid var(--primary-color);\r\n outline-offset: 2px;\r\n}\r\n\r\n/* Transition for smooth theme switching */\r\n* {\r\n transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;\r\n}\r\n"],"names":[],"sourceRoot":""}
|