openclaw-smartmeter 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +201 -0
- package/DEPLOYMENT_HANDOFF.md +923 -0
- package/HANDOFF_BRIEF.md +619 -0
- package/README.md +101 -2
- package/SKILL.md +654 -0
- package/canvas-template/app.js +273 -11
- package/canvas-template/index.html +49 -0
- package/canvas-template/styles.css +764 -90
- package/package.json +19 -3
- package/src/analyzer/config-manager.js +92 -0
- package/src/analyzer/openrouter-client.js +112 -0
- package/src/canvas/api-server.js +104 -5
- package/src/canvas/deployer.js +1 -1
- package/src/cli/commands.js +88 -7
- package/src/cli/index.js +45 -3
- package/src/generator/config-builder.js +7 -2
- package/src/generator/validator.js +7 -7
|
@@ -6,35 +6,89 @@
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
:root {
|
|
9
|
-
|
|
10
|
-
--primary-
|
|
11
|
-
--
|
|
12
|
-
--
|
|
9
|
+
/* Professional Technical Color Palette */
|
|
10
|
+
--primary-color: #0ea5e9;
|
|
11
|
+
--primary-hover: #0284c7;
|
|
12
|
+
--primary-light: #e0f2fe;
|
|
13
|
+
--primary-dark: #075985;
|
|
14
|
+
--secondary-color: #8b5cf6;
|
|
15
|
+
--secondary-hover: #7c3aed;
|
|
16
|
+
--secondary-light: #ede9fe;
|
|
17
|
+
--danger-color: #dc2626;
|
|
18
|
+
--danger-light: #fee2e2;
|
|
13
19
|
--warning-color: #f59e0b;
|
|
20
|
+
--warning-light: #fef3c7;
|
|
14
21
|
--success-color: #10b981;
|
|
15
|
-
--
|
|
16
|
-
--
|
|
22
|
+
--success-hover: #059669;
|
|
23
|
+
--success-light: #d1fae5;
|
|
24
|
+
--success-dark: #065f46;
|
|
25
|
+
|
|
26
|
+
/* Text Colors - Enhanced Contrast */
|
|
27
|
+
--text-primary: #0f172a;
|
|
28
|
+
--text-secondary: #475569;
|
|
29
|
+
--text-muted: #94a3b8;
|
|
30
|
+
|
|
31
|
+
/* Background Colors - Refined Hierarchy */
|
|
17
32
|
--bg-primary: #ffffff;
|
|
18
|
-
--bg-secondary: #
|
|
19
|
-
--bg-tertiary: #
|
|
20
|
-
--
|
|
21
|
-
--
|
|
22
|
-
--
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
--
|
|
26
|
-
--
|
|
33
|
+
--bg-secondary: #f8fafc;
|
|
34
|
+
--bg-tertiary: #f1f5f9;
|
|
35
|
+
--bg-hover: #e2e8f0;
|
|
36
|
+
--bg-accent: #eff6ff;
|
|
37
|
+
--bg-code: #1e293b;
|
|
38
|
+
|
|
39
|
+
/* Border Colors */
|
|
40
|
+
--border-color: #e2e8f0;
|
|
41
|
+
--border-light: #f1f5f9;
|
|
42
|
+
--border-accent: #cbd5e1;
|
|
43
|
+
|
|
44
|
+
/* Shadows - Modern elevation system */
|
|
45
|
+
--shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
46
|
+
--shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
|
|
47
|
+
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
|
|
48
|
+
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
|
|
49
|
+
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
|
|
50
|
+
|
|
51
|
+
/* Border Radius */
|
|
52
|
+
--radius-sm: 8px;
|
|
53
|
+
--radius-md: 12px;
|
|
54
|
+
--radius-lg: 16px;
|
|
55
|
+
--radius-xl: 20px;
|
|
56
|
+
--radius-full: 9999px;
|
|
57
|
+
|
|
58
|
+
/* Spacing */
|
|
59
|
+
--space-xs: 4px;
|
|
60
|
+
--space-sm: 8px;
|
|
61
|
+
--space-md: 16px;
|
|
62
|
+
--space-lg: 24px;
|
|
63
|
+
--space-xl: 32px;
|
|
64
|
+
--space-2xl: 48px;
|
|
65
|
+
|
|
66
|
+
/* Transitions */
|
|
67
|
+
--transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
68
|
+
--transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
69
|
+
--transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
27
70
|
}
|
|
28
71
|
|
|
29
72
|
body {
|
|
30
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', '
|
|
31
|
-
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
|
73
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', 'Roboto', 'Helvetica Neue',
|
|
32
74
|
sans-serif;
|
|
33
75
|
-webkit-font-smoothing: antialiased;
|
|
34
76
|
-moz-osx-font-smoothing: grayscale;
|
|
35
|
-
background:
|
|
77
|
+
background: linear-gradient(to bottom, #f8fafc 0%, #f1f5f9 100%);
|
|
36
78
|
color: var(--text-primary);
|
|
37
79
|
line-height: 1.6;
|
|
80
|
+
font-size: 15px;
|
|
81
|
+
min-height: 100vh;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/* Monospace font for data and metrics */
|
|
85
|
+
.metric-value,
|
|
86
|
+
.cost-value,
|
|
87
|
+
.savings-amount,
|
|
88
|
+
.stat-value {
|
|
89
|
+
font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'Roboto Mono', monospace;
|
|
90
|
+
font-variant-numeric: tabular-nums;
|
|
91
|
+
letter-spacing: -0.02em;
|
|
38
92
|
}
|
|
39
93
|
|
|
40
94
|
.container {
|
|
@@ -43,15 +97,21 @@ body {
|
|
|
43
97
|
padding: 0;
|
|
44
98
|
}
|
|
45
99
|
|
|
46
|
-
/* Header */
|
|
100
|
+
/* Header - Enhanced Professional Design */
|
|
47
101
|
.header {
|
|
48
|
-
background:
|
|
102
|
+
background: rgba(255, 255, 255, 0.95);
|
|
49
103
|
border-bottom: 1px solid var(--border-color);
|
|
50
|
-
padding:
|
|
104
|
+
padding: var(--space-lg) var(--space-2xl);
|
|
105
|
+
backdrop-filter: blur(12px) saturate(180%);
|
|
51
106
|
position: sticky;
|
|
52
107
|
top: 0;
|
|
53
108
|
z-index: 100;
|
|
54
|
-
box-shadow:
|
|
109
|
+
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
|
|
110
|
+
transition: all var(--transition-base);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.header:hover {
|
|
114
|
+
box-shadow: 0 4px 12px rgba(15, 23, 42, 0.12);
|
|
55
115
|
}
|
|
56
116
|
|
|
57
117
|
.header-content {
|
|
@@ -71,12 +131,15 @@ body {
|
|
|
71
131
|
font-weight: 700;
|
|
72
132
|
color: var(--text-primary);
|
|
73
133
|
margin: 0;
|
|
134
|
+
letter-spacing: -0.02em;
|
|
74
135
|
}
|
|
75
136
|
|
|
76
137
|
.logo-text p {
|
|
77
|
-
font-size:
|
|
138
|
+
font-size: 13px;
|
|
78
139
|
color: var(--text-secondary);
|
|
79
140
|
margin: 0;
|
|
141
|
+
letter-spacing: 0.01em;
|
|
142
|
+
font-weight: 500;
|
|
80
143
|
}
|
|
81
144
|
|
|
82
145
|
.header-actions {
|
|
@@ -96,18 +159,26 @@ body {
|
|
|
96
159
|
align-items: center;
|
|
97
160
|
gap: 6px;
|
|
98
161
|
padding: 8px 16px;
|
|
99
|
-
background: var(--bg-
|
|
100
|
-
border:
|
|
162
|
+
background: var(--bg-primary);
|
|
163
|
+
border: 1.5px solid var(--border-color);
|
|
101
164
|
border-radius: var(--radius-sm);
|
|
102
165
|
font-size: 14px;
|
|
103
166
|
font-weight: 500;
|
|
104
167
|
color: var(--text-primary);
|
|
105
168
|
cursor: pointer;
|
|
106
|
-
transition: all
|
|
169
|
+
transition: all var(--transition-base);
|
|
170
|
+
box-shadow: var(--shadow-xs);
|
|
107
171
|
}
|
|
108
172
|
|
|
109
173
|
.btn-refresh:hover {
|
|
110
|
-
background: var(--
|
|
174
|
+
background: var(--bg-accent);
|
|
175
|
+
border-color: var(--primary-color);
|
|
176
|
+
transform: translateY(-1px);
|
|
177
|
+
box-shadow: var(--shadow-sm);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.btn-refresh:active {
|
|
181
|
+
transform: translateY(0);
|
|
111
182
|
}
|
|
112
183
|
|
|
113
184
|
.btn {
|
|
@@ -124,14 +195,20 @@ body {
|
|
|
124
195
|
}
|
|
125
196
|
|
|
126
197
|
.btn-primary {
|
|
127
|
-
background: var(--primary-color);
|
|
198
|
+
background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-hover) 100%);
|
|
128
199
|
color: white;
|
|
129
|
-
box-shadow:
|
|
200
|
+
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.3);
|
|
201
|
+
border: none;
|
|
130
202
|
}
|
|
131
203
|
|
|
132
204
|
.btn-primary:hover {
|
|
133
|
-
background: var(--primary-hover);
|
|
134
|
-
box-shadow:
|
|
205
|
+
background: linear-gradient(135deg, var(--primary-hover) 0%, var(--primary-dark) 100%);
|
|
206
|
+
box-shadow: 0 6px 20px rgba(14, 165, 233, 0.4);
|
|
207
|
+
transform: translateY(-2px);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.btn-primary:active {
|
|
211
|
+
transform: translateY(0);
|
|
135
212
|
}
|
|
136
213
|
|
|
137
214
|
.btn-secondary {
|
|
@@ -144,23 +221,26 @@ body {
|
|
|
144
221
|
background: var(--bg-tertiary);
|
|
145
222
|
}
|
|
146
223
|
|
|
147
|
-
/* Dashboard Main */
|
|
224
|
+
/* Dashboard Main - Enhanced Spacing */
|
|
148
225
|
.dashboard {
|
|
149
|
-
padding:
|
|
226
|
+
padding: 48px;
|
|
150
227
|
display: flex;
|
|
151
228
|
flex-direction: column;
|
|
152
|
-
gap:
|
|
229
|
+
gap: 36px;
|
|
230
|
+
max-width: 1600px;
|
|
231
|
+
margin: 0 auto;
|
|
153
232
|
}
|
|
154
233
|
|
|
155
|
-
/* Hero Card - Savings Display */
|
|
234
|
+
/* Hero Card - Enhanced Savings Display */
|
|
156
235
|
.hero-card {
|
|
157
|
-
background: linear-gradient(135deg,
|
|
158
|
-
border-radius: var(--radius-
|
|
159
|
-
padding:
|
|
236
|
+
background: linear-gradient(135deg, var(--success-color) 0%, var(--success-dark) 100%);
|
|
237
|
+
border-radius: var(--radius-xl);
|
|
238
|
+
padding: 48px;
|
|
160
239
|
color: white;
|
|
161
|
-
box-shadow:
|
|
240
|
+
box-shadow: 0 20px 40px rgba(16, 185, 129, 0.25);
|
|
162
241
|
position: relative;
|
|
163
242
|
overflow: hidden;
|
|
243
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
164
244
|
}
|
|
165
245
|
|
|
166
246
|
.hero-card::before {
|
|
@@ -168,10 +248,16 @@ body {
|
|
|
168
248
|
position: absolute;
|
|
169
249
|
top: -50%;
|
|
170
250
|
right: -10%;
|
|
171
|
-
width:
|
|
172
|
-
height:
|
|
173
|
-
background: rgba(255, 255, 255, 0.
|
|
251
|
+
width: 400px;
|
|
252
|
+
height: 400px;
|
|
253
|
+
background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
|
174
254
|
border-radius: 50%;
|
|
255
|
+
animation: pulse 8s ease-in-out infinite;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@keyframes pulse {
|
|
259
|
+
0%, 100% { transform: scale(1); opacity: 0.15; }
|
|
260
|
+
50% { transform: scale(1.1); opacity: 0.25; }
|
|
175
261
|
}
|
|
176
262
|
|
|
177
263
|
.savings-display {
|
|
@@ -188,9 +274,11 @@ body {
|
|
|
188
274
|
}
|
|
189
275
|
|
|
190
276
|
.savings-amount {
|
|
191
|
-
font-size:
|
|
277
|
+
font-size: 64px;
|
|
192
278
|
font-weight: 800;
|
|
193
279
|
margin-bottom: 8px;
|
|
280
|
+
text-shadow: 0 2px 20px rgba(0, 0, 0, 0.2);
|
|
281
|
+
letter-spacing: -0.03em;
|
|
194
282
|
}
|
|
195
283
|
|
|
196
284
|
.savings-percentage {
|
|
@@ -208,12 +296,19 @@ body {
|
|
|
208
296
|
}
|
|
209
297
|
|
|
210
298
|
.cost-item {
|
|
211
|
-
background: rgba(255, 255, 255, 0.
|
|
212
|
-
backdrop-filter: blur(
|
|
213
|
-
border
|
|
214
|
-
|
|
299
|
+
background: rgba(255, 255, 255, 0.12);
|
|
300
|
+
backdrop-filter: blur(16px);
|
|
301
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
302
|
+
border-radius: var(--radius-lg);
|
|
303
|
+
padding: 24px 36px;
|
|
215
304
|
text-align: center;
|
|
216
|
-
min-width:
|
|
305
|
+
min-width: 220px;
|
|
306
|
+
transition: all var(--transition-base);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.cost-item:hover {
|
|
310
|
+
background: rgba(255, 255, 255, 0.18);
|
|
311
|
+
transform: translateY(-2px);
|
|
217
312
|
}
|
|
218
313
|
|
|
219
314
|
.cost-label {
|
|
@@ -245,6 +340,59 @@ body {
|
|
|
245
340
|
font-weight: 500;
|
|
246
341
|
}
|
|
247
342
|
|
|
343
|
+
/* Insufficient Data State */
|
|
344
|
+
.insufficient-data {
|
|
345
|
+
color: rgba(255, 255, 255, 0.85);
|
|
346
|
+
font-size: 18px;
|
|
347
|
+
font-weight: 500;
|
|
348
|
+
font-style: italic;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.info-banner {
|
|
352
|
+
background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%);
|
|
353
|
+
border-radius: var(--radius-lg);
|
|
354
|
+
padding: 20px 24px;
|
|
355
|
+
color: white;
|
|
356
|
+
margin-bottom: 24px;
|
|
357
|
+
display: flex;
|
|
358
|
+
align-items: center;
|
|
359
|
+
gap: 16px;
|
|
360
|
+
box-shadow: 0 4px 16px rgba(14, 165, 233, 0.25);
|
|
361
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
362
|
+
backdrop-filter: blur(8px);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.info-banner-icon {
|
|
366
|
+
font-size: 28px;
|
|
367
|
+
flex-shrink: 0;
|
|
368
|
+
width: 44px;
|
|
369
|
+
height: 44px;
|
|
370
|
+
display: flex;
|
|
371
|
+
align-items: center;
|
|
372
|
+
justify-content: center;
|
|
373
|
+
background: rgba(255, 255, 255, 0.15);
|
|
374
|
+
border-radius: var(--radius-md);
|
|
375
|
+
backdrop-filter: blur(8px);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.info-banner-content {
|
|
379
|
+
flex-grow: 1;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.info-banner-title {
|
|
383
|
+
font-weight: 700;
|
|
384
|
+
font-size: 16px;
|
|
385
|
+
margin-bottom: 6px;
|
|
386
|
+
letter-spacing: -0.01em;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.info-banner-text {
|
|
390
|
+
font-size: 14px;
|
|
391
|
+
opacity: 0.95;
|
|
392
|
+
line-height: 1.5;
|
|
393
|
+
font-weight: 400;
|
|
394
|
+
}
|
|
395
|
+
|
|
248
396
|
/* Stats Grid */
|
|
249
397
|
.stats-grid {
|
|
250
398
|
display: grid;
|
|
@@ -254,30 +402,55 @@ body {
|
|
|
254
402
|
|
|
255
403
|
.stat-card {
|
|
256
404
|
background: var(--bg-primary);
|
|
257
|
-
border-radius: var(--radius-
|
|
258
|
-
padding:
|
|
405
|
+
border-radius: var(--radius-lg);
|
|
406
|
+
padding: 28px;
|
|
259
407
|
display: flex;
|
|
260
408
|
align-items: center;
|
|
261
|
-
gap:
|
|
262
|
-
box-shadow:
|
|
263
|
-
border:
|
|
264
|
-
transition: all
|
|
409
|
+
gap: 20px;
|
|
410
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
|
|
411
|
+
border: 1.5px solid var(--border-color);
|
|
412
|
+
transition: all var(--transition-base);
|
|
413
|
+
position: relative;
|
|
414
|
+
overflow: hidden;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.stat-card::before {
|
|
418
|
+
content: '';
|
|
419
|
+
position: absolute;
|
|
420
|
+
top: 0;
|
|
421
|
+
left: 0;
|
|
422
|
+
width: 4px;
|
|
423
|
+
height: 100%;
|
|
424
|
+
background: linear-gradient(to bottom, var(--primary-color), var(--secondary-color));
|
|
425
|
+
opacity: 0;
|
|
426
|
+
transition: opacity var(--transition-base);
|
|
265
427
|
}
|
|
266
428
|
|
|
267
429
|
.stat-card:hover {
|
|
268
|
-
box-shadow:
|
|
269
|
-
transform: translateY(-
|
|
430
|
+
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
|
|
431
|
+
transform: translateY(-4px);
|
|
432
|
+
border-color: var(--primary-light);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
.stat-card:hover::before {
|
|
436
|
+
opacity: 1;
|
|
270
437
|
}
|
|
271
438
|
|
|
272
439
|
.stat-icon {
|
|
273
440
|
font-size: 32px;
|
|
274
|
-
width:
|
|
275
|
-
height:
|
|
441
|
+
width: 64px;
|
|
442
|
+
height: 64px;
|
|
276
443
|
display: flex;
|
|
277
444
|
align-items: center;
|
|
278
445
|
justify-content: center;
|
|
279
|
-
background: var(--bg-tertiary);
|
|
280
|
-
border-radius: var(--radius-
|
|
446
|
+
background: linear-gradient(135deg, var(--bg-accent) 0%, var(--bg-tertiary) 100%);
|
|
447
|
+
border-radius: var(--radius-lg);
|
|
448
|
+
box-shadow: inset 0 2px 4px rgba(15, 23, 42, 0.05);
|
|
449
|
+
transition: all var(--transition-base);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.stat-card:hover .stat-icon {
|
|
453
|
+
transform: scale(1.1) rotate(5deg);
|
|
281
454
|
}
|
|
282
455
|
|
|
283
456
|
.stat-content {
|
|
@@ -291,9 +464,10 @@ body {
|
|
|
291
464
|
}
|
|
292
465
|
|
|
293
466
|
.stat-value {
|
|
294
|
-
font-size:
|
|
467
|
+
font-size: 28px;
|
|
295
468
|
font-weight: 700;
|
|
296
469
|
color: var(--text-primary);
|
|
470
|
+
letter-spacing: -0.02em;
|
|
297
471
|
}
|
|
298
472
|
|
|
299
473
|
/* Charts Grid */
|
|
@@ -305,17 +479,34 @@ body {
|
|
|
305
479
|
|
|
306
480
|
.chart-card {
|
|
307
481
|
background: var(--bg-primary);
|
|
308
|
-
border-radius: var(--radius-
|
|
309
|
-
padding:
|
|
310
|
-
box-shadow:
|
|
311
|
-
border:
|
|
482
|
+
border-radius: var(--radius-lg);
|
|
483
|
+
padding: 28px;
|
|
484
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
|
|
485
|
+
border: 1.5px solid var(--border-color);
|
|
486
|
+
transition: all var(--transition-base);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
.chart-card:hover {
|
|
490
|
+
box-shadow: 0 8px 24px rgba(15, 23, 42, 0.10);
|
|
312
491
|
}
|
|
313
492
|
|
|
314
493
|
.chart-card h3 {
|
|
315
494
|
font-size: 18px;
|
|
316
|
-
font-weight:
|
|
317
|
-
margin-bottom:
|
|
495
|
+
font-weight: 700;
|
|
496
|
+
margin-bottom: 24px;
|
|
318
497
|
color: var(--text-primary);
|
|
498
|
+
letter-spacing: -0.01em;
|
|
499
|
+
display: flex;
|
|
500
|
+
align-items: center;
|
|
501
|
+
gap: 8px;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
.chart-card h3::before {
|
|
505
|
+
content: '';
|
|
506
|
+
width: 4px;
|
|
507
|
+
height: 20px;
|
|
508
|
+
background: linear-gradient(to bottom, var(--primary-color), var(--secondary-color));
|
|
509
|
+
border-radius: 2px;
|
|
319
510
|
}
|
|
320
511
|
|
|
321
512
|
.chart-container {
|
|
@@ -323,20 +514,29 @@ body {
|
|
|
323
514
|
height: 300px;
|
|
324
515
|
}
|
|
325
516
|
|
|
326
|
-
/* Recommendations Section */
|
|
517
|
+
/* Recommendations Section - Enhanced */
|
|
327
518
|
.recommendations-section {
|
|
328
519
|
background: var(--bg-primary);
|
|
329
|
-
border-radius: var(--radius-
|
|
330
|
-
padding:
|
|
331
|
-
box-shadow:
|
|
332
|
-
border:
|
|
520
|
+
border-radius: var(--radius-xl);
|
|
521
|
+
padding: 36px;
|
|
522
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
|
|
523
|
+
border: 1.5px solid var(--border-color);
|
|
333
524
|
}
|
|
334
525
|
|
|
335
526
|
.recommendations-section h2 {
|
|
336
|
-
font-size:
|
|
527
|
+
font-size: 22px;
|
|
337
528
|
font-weight: 700;
|
|
338
|
-
margin-bottom:
|
|
529
|
+
margin-bottom: 28px;
|
|
339
530
|
color: var(--text-primary);
|
|
531
|
+
letter-spacing: -0.02em;
|
|
532
|
+
display: flex;
|
|
533
|
+
align-items: center;
|
|
534
|
+
gap: 12px;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.recommendations-section h2::before {
|
|
538
|
+
content: '💡';
|
|
539
|
+
font-size: 24px;
|
|
340
540
|
}
|
|
341
541
|
|
|
342
542
|
.recommendations-list {
|
|
@@ -346,16 +546,36 @@ body {
|
|
|
346
546
|
}
|
|
347
547
|
|
|
348
548
|
.recommendation-item {
|
|
349
|
-
background: var(--bg-
|
|
350
|
-
border-radius: var(--radius-
|
|
351
|
-
padding:
|
|
352
|
-
border: 2px solid var(--border-
|
|
353
|
-
transition: all
|
|
549
|
+
background: var(--bg-primary);
|
|
550
|
+
border-radius: var(--radius-lg);
|
|
551
|
+
padding: 24px;
|
|
552
|
+
border: 2px solid var(--border-light);
|
|
553
|
+
transition: all var(--transition-base);
|
|
554
|
+
position: relative;
|
|
555
|
+
overflow: hidden;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
.recommendation-item::before {
|
|
559
|
+
content: '';
|
|
560
|
+
position: absolute;
|
|
561
|
+
top: 0;
|
|
562
|
+
left: 0;
|
|
563
|
+
width: 100%;
|
|
564
|
+
height: 4px;
|
|
565
|
+
background: linear-gradient(90deg, var(--primary-color), var(--success-color));
|
|
566
|
+
transform: scaleX(0);
|
|
567
|
+
transform-origin: left;
|
|
568
|
+
transition: transform var(--transition-base);
|
|
354
569
|
}
|
|
355
570
|
|
|
356
571
|
.recommendation-item:hover {
|
|
357
|
-
border-color: var(--primary-
|
|
358
|
-
box-shadow:
|
|
572
|
+
border-color: var(--primary-light);
|
|
573
|
+
box-shadow: 0 8px 24px rgba(14, 165, 233, 0.15);
|
|
574
|
+
transform: translateY(-2px);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
.recommendation-item:hover::before {
|
|
578
|
+
transform: scaleX(1);
|
|
359
579
|
}
|
|
360
580
|
|
|
361
581
|
.recommendation-header {
|
|
@@ -375,12 +595,15 @@ body {
|
|
|
375
595
|
}
|
|
376
596
|
|
|
377
597
|
.recommendation-impact {
|
|
378
|
-
background: var(--success-color);
|
|
598
|
+
background: linear-gradient(135deg, var(--success-color), var(--success-hover));
|
|
379
599
|
color: white;
|
|
380
|
-
padding:
|
|
381
|
-
border-radius:
|
|
382
|
-
font-size:
|
|
383
|
-
font-weight:
|
|
600
|
+
padding: 6px 14px;
|
|
601
|
+
border-radius: 14px;
|
|
602
|
+
font-size: 13px;
|
|
603
|
+
font-weight: 700;
|
|
604
|
+
text-transform: uppercase;
|
|
605
|
+
letter-spacing: 0.05em;
|
|
606
|
+
box-shadow: 0 2px 8px rgba(16, 185, 129, 0.3);
|
|
384
607
|
}
|
|
385
608
|
|
|
386
609
|
.recommendation-description {
|
|
@@ -403,13 +626,13 @@ body {
|
|
|
403
626
|
gap: 10px;
|
|
404
627
|
}
|
|
405
628
|
|
|
406
|
-
/* Details Section */
|
|
629
|
+
/* Details Section - Enhanced */
|
|
407
630
|
.details-section {
|
|
408
631
|
background: var(--bg-primary);
|
|
409
|
-
border-radius: var(--radius-
|
|
632
|
+
border-radius: var(--radius-xl);
|
|
410
633
|
padding: 0;
|
|
411
|
-
box-shadow:
|
|
412
|
-
border:
|
|
634
|
+
box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);
|
|
635
|
+
border: 1.5px solid var(--border-color);
|
|
413
636
|
overflow: hidden;
|
|
414
637
|
}
|
|
415
638
|
|
|
@@ -573,3 +796,454 @@ body {
|
|
|
573
796
|
.text-warning { color: var(--warning-color); }
|
|
574
797
|
.text-danger { color: var(--danger-color); }
|
|
575
798
|
.text-primary { color: var(--primary-color); }
|
|
799
|
+
/* OpenRouter Integration Section */
|
|
800
|
+
/* OpenRouter Section - Enhanced Professional Design */
|
|
801
|
+
.openrouter-section {
|
|
802
|
+
margin-bottom: 36px;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
.openrouter-card {
|
|
806
|
+
background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-accent) 100%);
|
|
807
|
+
border-radius: var(--radius-xl);
|
|
808
|
+
padding: 32px;
|
|
809
|
+
box-shadow: 0 4px 16px rgba(14, 165, 233, 0.12);
|
|
810
|
+
border: 1.5px solid var(--border-color);
|
|
811
|
+
transition: all var(--transition-base);
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
.openrouter-card:hover {
|
|
815
|
+
box-shadow: 0 8px 32px rgba(14, 165, 233, 0.18);
|
|
816
|
+
border-color: var(--primary-light);
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
.openrouter-header {
|
|
820
|
+
display: flex;
|
|
821
|
+
justify-content: space-between;
|
|
822
|
+
align-items: center;
|
|
823
|
+
margin-bottom: 24px;
|
|
824
|
+
padding-bottom: 20px;
|
|
825
|
+
border-bottom: 2px solid var(--border-light);
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
.openrouter-header h3 {
|
|
829
|
+
font-size: 22px;
|
|
830
|
+
font-weight: 700;
|
|
831
|
+
color: var(--text-primary);
|
|
832
|
+
letter-spacing: -0.02em;
|
|
833
|
+
display: flex;
|
|
834
|
+
align-items: center;
|
|
835
|
+
gap: 10px;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
.openrouter-header h3::before {
|
|
839
|
+
content: '🔌';
|
|
840
|
+
font-size: 24px;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
.btn-config {
|
|
844
|
+
background: linear-gradient(135deg, var(--secondary-color), var(--secondary-hover));
|
|
845
|
+
color: white;
|
|
846
|
+
border: none;
|
|
847
|
+
padding: 10px 20px;
|
|
848
|
+
border-radius: var(--radius-md);
|
|
849
|
+
font-size: 14px;
|
|
850
|
+
font-weight: 600;
|
|
851
|
+
cursor: pointer;
|
|
852
|
+
transition: all var(--transition-base);
|
|
853
|
+
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.25);
|
|
854
|
+
display: flex;
|
|
855
|
+
align-items: center;
|
|
856
|
+
gap: 6px;
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
.btn-config:hover {
|
|
860
|
+
background: linear-gradient(135deg, var(--secondary-hover), #6d28d9);
|
|
861
|
+
transform: translateY(-2px);
|
|
862
|
+
box-shadow: 0 6px 20px rgba(139, 92, 246, 0.35);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
.btn-config:active {
|
|
866
|
+
transform: translateY(0);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
.openrouter-loading,
|
|
870
|
+
.openrouter-notice,
|
|
871
|
+
.openrouter-error {
|
|
872
|
+
text-align: center;
|
|
873
|
+
padding: 40px 20px;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
.openrouter-notice {
|
|
877
|
+
background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-hover) 100%);
|
|
878
|
+
color: white;
|
|
879
|
+
border-radius: var(--radius-lg);
|
|
880
|
+
padding: 32px;
|
|
881
|
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
882
|
+
box-shadow: 0 4px 16px rgba(14, 165, 233, 0.25);
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
.openrouter-notice p {
|
|
886
|
+
margin-bottom: 20px;
|
|
887
|
+
font-size: 15px;
|
|
888
|
+
line-height: 1.6;
|
|
889
|
+
font-weight: 500;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
.openrouter-error {
|
|
893
|
+
background: #fee2e2;
|
|
894
|
+
color: #991b1b;
|
|
895
|
+
border-radius: var(--radius-md);
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
.openrouter-data {
|
|
899
|
+
display: flex;
|
|
900
|
+
flex-direction: column;
|
|
901
|
+
gap: 20px;
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
.usage-grid {
|
|
905
|
+
display: grid;
|
|
906
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
907
|
+
gap: 16px;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
.usage-item {
|
|
911
|
+
background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);
|
|
912
|
+
padding: 20px;
|
|
913
|
+
border-radius: var(--radius-lg);
|
|
914
|
+
border: 1.5px solid var(--border-light);
|
|
915
|
+
transition: all var(--transition-base);
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
.usage-item:hover {
|
|
919
|
+
transform: translateY(-2px);
|
|
920
|
+
box-shadow: 0 4px 12px rgba(15, 23, 42, 0.08);
|
|
921
|
+
border-color: var(--border-accent);
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
.usage-label {
|
|
925
|
+
font-size: 13px;
|
|
926
|
+
color: var(--text-secondary);
|
|
927
|
+
margin-bottom: 8px;
|
|
928
|
+
font-weight: 500;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
.usage-value {
|
|
932
|
+
font-size: 28px;
|
|
933
|
+
font-weight: 700;
|
|
934
|
+
color: var(--text-primary);
|
|
935
|
+
letter-spacing: -0.02em;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.usage-value.highlight {
|
|
939
|
+
color: var(--primary-color);
|
|
940
|
+
text-shadow: 0 2px 8px rgba(14, 165, 233, 0.15);
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
/* Comparison Section - Enhanced Data Display */
|
|
944
|
+
.comparison-section {
|
|
945
|
+
background: linear-gradient(135deg, var(--bg-accent) 0%, var(--bg-tertiary) 100%);
|
|
946
|
+
padding: 28px;
|
|
947
|
+
border-radius: var(--radius-lg);
|
|
948
|
+
border: 1.5px solid var(--border-light);
|
|
949
|
+
box-shadow: inset 0 2px 4px rgba(15, 23, 42, 0.03);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
.comparison-section h4 {
|
|
953
|
+
font-size: 18px;
|
|
954
|
+
font-weight: 700;
|
|
955
|
+
margin-bottom: 20px;
|
|
956
|
+
color: var(--text-primary);
|
|
957
|
+
letter-spacing: -0.01em;
|
|
958
|
+
display: flex;
|
|
959
|
+
align-items: center;
|
|
960
|
+
gap: 8px;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.comparison-section h4::before {
|
|
964
|
+
content: '🔍';
|
|
965
|
+
font-size: 20px;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.comparison-grid {
|
|
969
|
+
display: flex;
|
|
970
|
+
flex-direction: column;
|
|
971
|
+
gap: 12px;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.comparison-item {
|
|
975
|
+
display: flex;
|
|
976
|
+
justify-content: space-between;
|
|
977
|
+
align-items: center;
|
|
978
|
+
padding: 16px 18px;
|
|
979
|
+
background: white;
|
|
980
|
+
border-radius: var(--radius-md);
|
|
981
|
+
border: 1.5px solid var(--border-light);
|
|
982
|
+
transition: all var(--transition-base);
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.comparison-item:hover {
|
|
986
|
+
border-color: var(--primary-light);
|
|
987
|
+
box-shadow: 0 2px 8px rgba(14, 165, 233, 0.1);
|
|
988
|
+
transform: translateX(4px);
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
.comparison-label {
|
|
992
|
+
font-size: 14px;
|
|
993
|
+
color: var(--text-secondary);
|
|
994
|
+
font-weight: 500;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
.comparison-value {
|
|
998
|
+
font-size: 18px;
|
|
999
|
+
font-weight: 700;
|
|
1000
|
+
color: var(--text-primary);
|
|
1001
|
+
font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
|
|
1002
|
+
letter-spacing: -0.01em;
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
.comparison-value.positive {
|
|
1006
|
+
color: var(--success-color);
|
|
1007
|
+
text-shadow: 0 1px 4px rgba(16, 185, 129, 0.2);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
.comparison-value.negative {
|
|
1011
|
+
color: var(--danger-color);
|
|
1012
|
+
text-shadow: 0 1px 4px rgba(220, 38, 38, 0.2);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
.comparison-note {
|
|
1016
|
+
margin-top: 20px;
|
|
1017
|
+
padding: 16px 18px;
|
|
1018
|
+
background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);
|
|
1019
|
+
border-left: 4px solid var(--primary-color);
|
|
1020
|
+
border-radius: var(--radius-md);
|
|
1021
|
+
font-size: 14px;
|
|
1022
|
+
color: #0c4a6e;
|
|
1023
|
+
font-weight: 500;
|
|
1024
|
+
line-height: 1.6;
|
|
1025
|
+
box-shadow: inset 0 1px 2px rgba(14, 165, 233, 0.1);
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
.openrouter-footer {
|
|
1029
|
+
display: flex;
|
|
1030
|
+
justify-content: space-between;
|
|
1031
|
+
align-items: center;
|
|
1032
|
+
margin-top: 16px;
|
|
1033
|
+
padding-top: 16px;
|
|
1034
|
+
border-top: 1px solid var(--border-color);
|
|
1035
|
+
}
|
|
1036
|
+
|
|
1037
|
+
.openrouter-footer small {
|
|
1038
|
+
color: var(--text-secondary);
|
|
1039
|
+
font-size: 12px;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
.btn-link {
|
|
1043
|
+
background: none;
|
|
1044
|
+
border: none;
|
|
1045
|
+
color: var(--secondary-color);
|
|
1046
|
+
cursor: pointer;
|
|
1047
|
+
font-size: 14px;
|
|
1048
|
+
font-weight: 500;
|
|
1049
|
+
padding: 4px 8px;
|
|
1050
|
+
transition: color 0.2s;
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
.btn-link:hover {
|
|
1054
|
+
color: #2563eb;
|
|
1055
|
+
text-decoration: underline;
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
/* Modal - Enhanced Professional Design */
|
|
1059
|
+
.modal {
|
|
1060
|
+
display: none;
|
|
1061
|
+
position: fixed;
|
|
1062
|
+
top: 0;
|
|
1063
|
+
left: 0;
|
|
1064
|
+
width: 100%;
|
|
1065
|
+
height: 100%;
|
|
1066
|
+
background: rgba(15, 23, 42, 0.6);
|
|
1067
|
+
z-index: 1000;
|
|
1068
|
+
align-items: center;
|
|
1069
|
+
justify-content: center;
|
|
1070
|
+
backdrop-filter: blur(8px);
|
|
1071
|
+
animation: fadeIn var(--transition-base);
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
@keyframes fadeIn {
|
|
1075
|
+
from { opacity: 0; }
|
|
1076
|
+
to { opacity: 1; }
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
.modal-content {
|
|
1080
|
+
background: white;
|
|
1081
|
+
border-radius: var(--radius-xl);
|
|
1082
|
+
box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.25);
|
|
1083
|
+
max-width: 540px;
|
|
1084
|
+
width: 90%;
|
|
1085
|
+
max-height: 90vh;
|
|
1086
|
+
overflow: auto;
|
|
1087
|
+
animation: slideUp var(--transition-slow);
|
|
1088
|
+
border: 1.5px solid var(--border-light);
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
@keyframes slideUp {
|
|
1092
|
+
from { transform: translateY(20px); opacity: 0; }
|
|
1093
|
+
to { transform: translateY(0); opacity: 1; }
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
.modal-header {
|
|
1097
|
+
display: flex;
|
|
1098
|
+
justify-content: space-between;
|
|
1099
|
+
align-items: center;
|
|
1100
|
+
padding: 28px 28px 24px;
|
|
1101
|
+
border-bottom: 1.5px solid var(--border-light);
|
|
1102
|
+
background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-accent) 100%);
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
.modal-header h2 {
|
|
1106
|
+
font-size: 22px;
|
|
1107
|
+
font-weight: 700;
|
|
1108
|
+
color: var(--text-primary);
|
|
1109
|
+
letter-spacing: -0.02em;
|
|
1110
|
+
}
|
|
1111
|
+
|
|
1112
|
+
.modal-close {
|
|
1113
|
+
background: var(--bg-tertiary);
|
|
1114
|
+
border: 1.5px solid var(--border-light);
|
|
1115
|
+
font-size: 24px;
|
|
1116
|
+
color: var(--text-secondary);
|
|
1117
|
+
cursor: pointer;
|
|
1118
|
+
padding: 0;
|
|
1119
|
+
width: 36px;
|
|
1120
|
+
height: 36px;
|
|
1121
|
+
display: flex;
|
|
1122
|
+
align-items: center;
|
|
1123
|
+
justify-content: center;
|
|
1124
|
+
border-radius: var(--radius-md);
|
|
1125
|
+
transition: all var(--transition-base);
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
.modal-close:hover {
|
|
1129
|
+
background: var(--danger-light);
|
|
1130
|
+
color: var(--danger-color);
|
|
1131
|
+
border-color: var(--danger-color);
|
|
1132
|
+
transform: rotate(90deg);
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
.modal-body {
|
|
1136
|
+
padding: 28px;
|
|
1137
|
+
}
|
|
1138
|
+
|
|
1139
|
+
.modal-body p {
|
|
1140
|
+
margin-bottom: 24px;
|
|
1141
|
+
color: var(--text-secondary);
|
|
1142
|
+
font-size: 15px;
|
|
1143
|
+
line-height: 1.6;
|
|
1144
|
+
}
|
|
1145
|
+
|
|
1146
|
+
.form-group {
|
|
1147
|
+
margin-bottom: 20px;
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
.form-group label {
|
|
1151
|
+
display: block;
|
|
1152
|
+
margin-bottom: 10px;
|
|
1153
|
+
font-weight: 600;
|
|
1154
|
+
color: var(--text-primary);
|
|
1155
|
+
font-size: 15px;
|
|
1156
|
+
letter-spacing: -0.01em;
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
.api-key-input {
|
|
1160
|
+
width: 100%;
|
|
1161
|
+
padding: 14px 16px;
|
|
1162
|
+
border: 2px solid var(--border-color);
|
|
1163
|
+
border-radius: var(--radius-md);
|
|
1164
|
+
font-size: 14px;
|
|
1165
|
+
font-family: 'SF Mono', 'Monaco', 'Courier New', monospace;
|
|
1166
|
+
transition: all var(--transition-base);
|
|
1167
|
+
background: var(--bg-secondary);
|
|
1168
|
+
}
|
|
1169
|
+
|
|
1170
|
+
.api-key-input:focus {
|
|
1171
|
+
outline: none;
|
|
1172
|
+
border-color: var(--primary-color);
|
|
1173
|
+
background: white;
|
|
1174
|
+
box-shadow: 0 0 0 4px rgba(14, 165, 233, 0.1);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
.form-hint {
|
|
1178
|
+
display: block;
|
|
1179
|
+
margin-top: 6px;
|
|
1180
|
+
font-size: 12px;
|
|
1181
|
+
color: var(--text-secondary);
|
|
1182
|
+
font-style: italic;
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
.config-status {
|
|
1186
|
+
min-height: 40px;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
.status-error,
|
|
1190
|
+
.status-success,
|
|
1191
|
+
.status-loading {
|
|
1192
|
+
padding: 14px 16px;
|
|
1193
|
+
border-radius: var(--radius-md);
|
|
1194
|
+
margin-bottom: 20px;
|
|
1195
|
+
font-size: 14px;
|
|
1196
|
+
font-weight: 500;
|
|
1197
|
+
display: flex;
|
|
1198
|
+
align-items: center;
|
|
1199
|
+
gap: 10px;
|
|
1200
|
+
animation: slideDown var(--transition-base);
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
@keyframes slideDown {
|
|
1204
|
+
from { transform: translateY(-10px); opacity: 0; }
|
|
1205
|
+
to { transform: translateY(0); opacity: 1; }
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
.status-error {
|
|
1209
|
+
background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);
|
|
1210
|
+
color: #991b1b;
|
|
1211
|
+
border: 1.5px solid #fca5a5;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
.status-error::before {
|
|
1215
|
+
content: '⚠️';
|
|
1216
|
+
font-size: 18px;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.status-success {
|
|
1220
|
+
background: linear-gradient(135deg, #d1fae5 0%, #a7f3d0 100%);
|
|
1221
|
+
color: #065f46;
|
|
1222
|
+
border: 1.5px solid #6ee7b7;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
.status-success::before {
|
|
1226
|
+
content: '✅';
|
|
1227
|
+
font-size: 18px;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.status-loading {
|
|
1231
|
+
background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);
|
|
1232
|
+
color: #1e40af;
|
|
1233
|
+
border: 1.5px solid #93c5fd;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
.status-loading::before {
|
|
1237
|
+
content: '⏳';
|
|
1238
|
+
font-size: 18px;
|
|
1239
|
+
animation: pulse 1.5s ease-in-out infinite;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
.modal-footer {
|
|
1243
|
+
display: flex;
|
|
1244
|
+
justify-content: flex-end;
|
|
1245
|
+
gap: 12px;
|
|
1246
|
+
padding: 24px 28px;
|
|
1247
|
+
border-top: 1.5px solid var(--border-light);
|
|
1248
|
+
background: var(--bg-secondary);
|
|
1249
|
+
}
|