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.
@@ -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
- const result = await this.executeCommand('which pm2 || echo "not installed"');
179
- this.isPM2Installed = !result.stdout.includes('not installed');
180
- return this.isPM2Installed;
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
- if (!this.isPM2Installed) {
198
- const isPM2Installed = await this.checkPM2Installation();
199
- if (!isPM2Installed) {
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
- const result = await this.executeCommand('pm2 jlist');
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.executeCommand(`pm2 start ${processName}`);
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.executeCommand(`pm2 stop ${processName}`);
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.executeCommand(`pm2 restart ${processName}`);
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.executeCommand(`pm2 delete ${processName}`);
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
- this.configFilePath = 'D:/Personal/ezpm2gui/src/server/config/remote-connections.json';
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.2.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.672b8f26.css",
4
- "main.js": "/static/js/main.31323a04.js",
3
+ "main.css": "/static/css/main.d46bc75c.css",
4
+ "main.js": "/static/js/main.b0e1c9b1.js",
5
5
  "index.html": "/index.html",
6
- "main.672b8f26.css.map": "/static/css/main.672b8f26.css.map",
7
- "main.31323a04.js.map": "/static/js/main.31323a04.js.map"
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.672b8f26.css",
11
- "static/js/main.31323a04.js"
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>ezPM2GUI - PM2 Process Manager</title><script defer="defer" src="/static/js/main.31323a04.js"></script><link href="/static/css/main.672b8f26.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="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":""}