@jjlmoya/utils-finance 1.14.0 → 1.15.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jjlmoya/utils-finance",
3
- "version": "1.14.0",
3
+ "version": "1.15.0",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "types": "./src/index.ts",
@@ -1,79 +1,325 @@
1
- .cic-insight.cic-insight-visible {
2
- opacity: 1;
3
- }
1
+ .cic-root {
2
+ --cic-accent: #10b981;
3
+ --cic-accent-text: #059669;
4
+ --cic-accent-icon-bg: #d1fae5;
5
+ --cic-bg: #fff;
6
+ --cic-bg-panel: rgba(248, 250, 252, 0.3);
7
+ --cic-bg-card: #fff;
8
+ --cic-bg-header: rgba(248, 250, 252, 0.5);
9
+ --cic-border: #e2e8f0;
10
+ --cic-border-subtle: #f1f5f9;
11
+ --cic-text: #0f172a;
12
+ --cic-text-muted: #64748b;
13
+ --cic-text-subtle: #94a3b8;
14
+ --cic-input-bg: #fff;
15
+ --cic-input-border: #e2e8f0;
16
+ --cic-summary-bg: #fff;
17
+ --cic-insight-bg: #ecfdf5;
18
+ --cic-insight-text: #065f46;
4
19
 
5
- .cic-insight-year {
6
- font-weight: 700;
7
- color: #10b981;
8
- }
20
+ background: var(--cic-bg);
21
+ border-radius: 1.5rem;
22
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
23
+ border: 1px solid var(--cic-border-subtle);
24
+ overflow: hidden;
25
+ }
26
+
27
+ .theme-dark .cic-root {
28
+ --cic-accent-text: #34d399;
29
+ --cic-accent-icon-bg: rgba(16, 185, 129, 0.2);
30
+ --cic-bg: #1e293b;
31
+ --cic-bg-panel: rgba(15, 23, 42, 0.1);
32
+ --cic-bg-card: #1e293b;
33
+ --cic-bg-header: rgba(30, 41, 59, 0.5);
34
+ --cic-border: #334155;
35
+ --cic-border-subtle: #334155;
36
+ --cic-text: #fff;
37
+ --cic-text-muted: #94a3b8;
38
+ --cic-text-subtle: #64748b;
39
+ --cic-input-bg: #0f172a;
40
+ --cic-input-border: #334155;
41
+ --cic-summary-bg: #1e293b;
42
+ --cic-insight-bg: rgba(16, 185, 129, 0.1);
43
+ --cic-insight-text: #6ee7b7;
44
+ }
45
+
46
+ .cic-header {
47
+ padding: 1.5rem;
48
+ border-bottom: 1px solid var(--cic-border-subtle);
49
+ background: var(--cic-bg-header);
50
+ display: flex;
51
+ flex-wrap: wrap;
52
+ gap: 1rem;
53
+ align-items: center;
54
+ justify-content: space-between;
55
+ }
56
+
57
+ .cic-header-left {
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 0.75rem;
61
+ }
62
+
63
+ .cic-icon-wrap {
64
+ padding: 0.625rem;
65
+ background: var(--cic-accent-icon-bg);
66
+ border-radius: 0.75rem;
67
+ color: var(--cic-accent-text);
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ }
72
+
73
+ .cic-icon {
74
+ width: 1.5rem;
75
+ height: 1.5rem;
76
+ }
77
+
78
+ .cic-title {
79
+ font-size: 1.25rem;
80
+ font-weight: 700;
81
+ color: var(--cic-text);
82
+ }
83
+
84
+ .cic-realtime {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 0.5rem;
88
+ font-size: 0.875rem;
89
+ color: var(--cic-text-muted);
90
+ }
91
+
92
+ .cic-dot {
93
+ width: 0.5rem;
94
+ height: 0.5rem;
95
+ border-radius: 50%;
96
+ background: var(--cic-accent);
97
+ animation: cic-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
98
+ }
99
+
100
+ @keyframes cic-pulse {
101
+ 0%, 100% { opacity: 1; }
102
+ 50% { opacity: 0.4; }
103
+ }
104
+
105
+ .cic-grid {
106
+ display: grid;
107
+ }
108
+
109
+ .cic-panel-left {
110
+ padding: 1.5rem;
111
+ display: flex;
112
+ flex-direction: column;
113
+ gap: 1.5rem;
114
+ background: var(--cic-bg-panel);
115
+ border-bottom: 1px solid var(--cic-border-subtle);
116
+ }
117
+
118
+ .cic-fields {
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: 1rem;
122
+ }
123
+
124
+ .cic-grid-2 {
125
+ display: grid;
126
+ grid-template-columns: 1fr 1fr;
127
+ gap: 1rem;
128
+ }
129
+
130
+ .cic-label {
131
+ display: block;
132
+ font-size: 0.75rem;
133
+ font-weight: 700;
134
+ color: var(--cic-text-subtle);
135
+ text-transform: uppercase;
136
+ letter-spacing: 0.1em;
137
+ margin-bottom: 0.5rem;
138
+ }
139
+
140
+ .cic-input-wrap {
141
+ position: relative;
142
+ }
143
+
144
+ .cic-currency {
145
+ position: absolute;
146
+ left: 0.5rem;
147
+ top: 50%;
148
+ transform: translateY(-50%);
149
+ color: var(--cic-text-subtle);
150
+ font-weight: 700;
151
+ pointer-events: none;
152
+ font-size: 0.75rem;
153
+ }
154
+
155
+ .cic-currency-right {
156
+ left: auto;
157
+ right: 0.5rem;
158
+ }
159
+
160
+ .cic-input {
161
+ width: 100%;
162
+ padding: 0.75rem 1rem;
163
+ background: var(--cic-input-bg);
164
+ border: 2px solid var(--cic-input-border);
165
+ border-radius: 0.75rem;
166
+ outline: none;
167
+ transition: border-color 0.2s;
168
+ color: var(--cic-text);
169
+ font-weight: 700;
170
+ font-size: 1.125rem;
171
+ box-sizing: border-box;
172
+ }
9
173
 
10
- .theme-dark .cic-root {
11
- --cic-accent-text: #34d399;
12
- --cic-accent-icon-bg: rgba(16, 185, 129, 0.2);
13
- --cic-bg: #1e293b;
14
- --cic-bg-panel: rgba(15, 23, 42, 0.1);
15
- --cic-bg-card: #1e293b;
16
- --cic-bg-header: rgba(30, 41, 59, 0.5);
17
- --cic-border: #334155;
18
- --cic-border-subtle: #334155;
19
- --cic-text: #fff;
20
- --cic-text-muted: #94a3b8;
21
- --cic-text-subtle: #64748b;
22
- --cic-input-bg: #0f172a;
23
- --cic-input-border: #334155;
24
- --cic-summary-bg: #1e293b;
25
- --cic-insight-bg: rgba(16, 185, 129, 0.1);
26
- --cic-insight-text: #6ee7b7;
174
+ .cic-input-prefixed {
175
+ padding-left: 3.5rem;
176
+ }
177
+
178
+ .cic-input-suffixed {
179
+ padding-right: 5rem;
180
+ }
181
+
182
+ .cic-input:focus {
183
+ border-color: var(--cic-accent);
184
+ }
185
+
186
+ .cic-summary {
187
+ background: var(--cic-summary-bg);
188
+ border-radius: 1rem;
189
+ padding: 1rem;
190
+ border: 1px solid var(--cic-border);
191
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
192
+ display: flex;
193
+ flex-direction: column;
194
+ gap: 0.75rem;
195
+ }
196
+
197
+ .cic-summary-row {
198
+ display: flex;
199
+ justify-content: space-between;
200
+ align-items: center;
201
+ font-size: 0.875rem;
202
+ }
203
+
204
+ .cic-summary-label {
205
+ display: flex;
206
+ align-items: center;
207
+ gap: 0.5rem;
208
+ }
209
+
210
+ .cic-dot-neutral {
211
+ width: 0.75rem;
212
+ height: 0.75rem;
213
+ border-radius: 50%;
214
+ background: var(--cic-text-subtle);
215
+ flex-shrink: 0;
216
+ }
217
+
218
+ .cic-dot-accent {
219
+ width: 0.75rem;
220
+ height: 0.75rem;
221
+ border-radius: 50%;
222
+ background: var(--cic-accent);
223
+ flex-shrink: 0;
224
+ }
225
+
226
+ .cic-text-muted {
227
+ color: var(--cic-text-muted);
228
+ }
229
+
230
+ .cic-text-accent {
231
+ color: var(--cic-accent-text);
232
+ font-weight: 500;
233
+ }
234
+
235
+ .cic-summary-value {
236
+ font-weight: 700;
237
+ color: var(--cic-text);
238
+ }
239
+
240
+ .cic-summary-value-accent {
241
+ color: var(--cic-accent-text);
242
+ }
243
+
244
+ .cic-summary-total {
245
+ padding-top: 0.75rem;
246
+ margin-top: 0.25rem;
247
+ border-top: 1px solid var(--cic-border-subtle);
248
+ display: flex;
249
+ justify-content: space-between;
250
+ align-items: flex-end;
251
+ }
252
+
253
+ .cic-total-label {
254
+ color: var(--cic-text-subtle);
255
+ font-size: 0.75rem;
256
+ font-weight: 700;
257
+ text-transform: uppercase;
258
+ letter-spacing: 0.05em;
259
+ }
260
+
261
+ .cic-total-value {
262
+ font-size: 1.5rem;
263
+ font-weight: 900;
264
+ color: var(--cic-text);
265
+ }
266
+
267
+ .cic-panel-right {
268
+ padding: 1.5rem;
269
+ display: flex;
270
+ flex-direction: column;
271
+ min-height: 500px;
272
+ }
273
+
274
+ .cic-canvas-wrap {
275
+ position: relative;
276
+ width: 100%;
277
+ flex: 1;
278
+ }
279
+
280
+ .cic-insight {
281
+ display: none;
282
+ margin-top: 1rem;
283
+ padding: 1rem;
284
+ background: var(--cic-insight-bg);
285
+ border-radius: 0.75rem;
286
+ font-size: 0.875rem;
287
+ color: var(--cic-insight-text);
288
+ opacity: 0;
289
+ transition: opacity 0.5s;
290
+ }
291
+
292
+ @media (min-width: 768px) {
293
+ .cic-insight {
294
+ display: block;
27
295
  }
296
+ }
28
297
 
29
- .theme-dark .cic-insight-year {
30
- color: #fff;
298
+ @media (min-width: 1024px) {
299
+ .cic-grid {
300
+ grid-template-columns: 4fr 8fr;
31
301
  }
32
302
 
33
- [data-theme='dark'] .cic-root {
34
- --cic-accent-text: #34d399;
35
- --cic-accent-icon-bg: rgba(16, 185, 129, 0.2);
36
- --cic-bg: #1e293b;
37
- --cic-bg-panel: rgba(15, 23, 42, 0.1);
38
- --cic-bg-card: #1e293b;
39
- --cic-bg-header: rgba(30, 41, 59, 0.5);
40
- --cic-border: #334155;
41
- --cic-border-subtle: #334155;
42
- --cic-text: #fff;
43
- --cic-text-muted: #94a3b8;
44
- --cic-text-subtle: #64748b;
45
- --cic-input-bg: #0f172a;
46
- --cic-input-border: #334155;
47
- --cic-summary-bg: #1e293b;
48
- --cic-insight-bg: rgba(16, 185, 129, 0.1);
49
- --cic-insight-text: #6ee7b7;
303
+ .cic-panel-left {
304
+ border-bottom: none;
305
+ border-right: 1px solid var(--cic-border-subtle);
50
306
  }
51
307
 
52
- [data-theme='dark'] .cic-insight-year {
53
- color: #fff;
308
+ .cic-panel-right {
309
+ padding: 2rem;
310
+ min-height: auto;
54
311
  }
312
+ }
313
+
314
+ .cic-insight.cic-insight-visible {
315
+ opacity: 1;
316
+ }
317
+
318
+ .cic-insight-year {
319
+ font-weight: 700;
320
+ color: #10b981;
321
+ }
55
322
 
56
- @media (prefers-color-scheme: dark) {
57
- .cic-root {
58
- --cic-accent-text: #34d399;
59
- --cic-accent-icon-bg: rgba(16, 185, 129, 0.2);
60
- --cic-bg: #1e293b;
61
- --cic-bg-panel: rgba(15, 23, 42, 0.1);
62
- --cic-bg-card: #1e293b;
63
- --cic-bg-header: rgba(30, 41, 59, 0.5);
64
- --cic-border: #334155;
65
- --cic-border-subtle: #334155;
66
- --cic-text: #fff;
67
- --cic-text-muted: #94a3b8;
68
- --cic-text-subtle: #64748b;
69
- --cic-input-bg: #0f172a;
70
- --cic-input-border: #334155;
71
- --cic-summary-bg: #1e293b;
72
- --cic-insight-bg: rgba(16, 185, 129, 0.1);
73
- --cic-insight-text: #6ee7b7;
74
- }
75
-
76
- .cic-insight-year {
77
- color: #fff;
78
- }
79
- }
323
+ .theme-dark .cic-insight-year {
324
+ color: #fff;
325
+ }
@@ -1,17 +1,534 @@
1
1
  .lo-game-btn.lo-selected {
2
- border-color: var(--lo-focus-border);
3
- background: rgba(16, 185, 129, 0.05);
4
- box-shadow: 0 0 0 4px var(--lo-focus-ring);
2
+ border-color: var(--lo-focus-border);
3
+ background: rgba(16, 185, 129, 0.05);
4
+ box-shadow: 0 0 0 4px var(--lo-focus-ring);
5
5
  }
6
6
 
7
7
  .lo-stat-value.lo-negative {
8
- color: #ef4444;
8
+ color: #ef4444;
9
9
  }
10
10
 
11
11
  .lo-stat-value.lo-positive {
12
- color: #10b981;
12
+ color: #10b981;
13
13
  }
14
14
 
15
15
  .lo-efficiency-segment.lo-active {
16
- background: var(--lo-bar-fill);
17
- }
16
+ background: var(--lo-bar-fill);
17
+ }
18
+
19
+ .lo-container {
20
+ --lo-bg-card: #fff;
21
+ --lo-border-card: #eef2f6;
22
+ --lo-shadow-card: 0 4px 6px -1px rgba(0, 0, 0, 0.02), 0 20px 40px -8px rgba(0, 0, 0, 0.05);
23
+ --lo-text-title: #0f172a;
24
+ --lo-text-secondary: #64748b;
25
+ --lo-text-primary: #1e293b;
26
+ --lo-bg-input: #f8fafc;
27
+ --lo-border-input: #f1f5f9;
28
+ --lo-focus-border: #10b981;
29
+ --lo-focus-ring: rgba(16, 185, 129, 0.15);
30
+ --lo-icon-color: #10b981;
31
+ --lo-bg-button: #0f172a;
32
+ --lo-text-button: #fff;
33
+ --lo-bg-hover: #1e293b;
34
+ --lo-bg-stat: #fff;
35
+ --lo-border-stat: #eef2f6;
36
+ --lo-bar-bg: #f1f5f9;
37
+ --lo-bar-fill: #10b981;
38
+ --lo-recommendation-bg: #eef5ff;
39
+ --lo-recommendation-border: #d0e4ff;
40
+ --lo-recommendation-icon: #3b82f6;
41
+
42
+ width: 100%;
43
+ max-width: 1200px;
44
+ margin: 0 auto;
45
+ padding: 2rem 1rem;
46
+ display: flex;
47
+ flex-direction: column;
48
+ gap: 3rem;
49
+ }
50
+
51
+ .theme-dark .lo-container {
52
+ --lo-bg-card: #0f172a;
53
+ --lo-border-card: rgba(255, 255, 255, 0.05);
54
+ --lo-text-title: #f8fafc;
55
+ --lo-text-secondary: #94a3b8;
56
+ --lo-text-primary: #f8fafc;
57
+ --lo-bg-input: #1e293b;
58
+ --lo-border-input: #334155;
59
+ --lo-focus-border: #10b981;
60
+ --lo-focus-ring: rgba(16, 185, 129, 0.15);
61
+ --lo-icon-color: #34d399;
62
+ --lo-bg-button: #10b981;
63
+ --lo-text-button: #fff;
64
+ --lo-bg-hover: #059669;
65
+ --lo-bg-stat: #1e293b;
66
+ --lo-border-stat: rgba(255, 255, 255, 0.05);
67
+ --lo-bar-bg: #1e293b;
68
+ --lo-bar-fill: #10b981;
69
+ --lo-recommendation-bg: rgba(59, 130, 246, 0.1);
70
+ --lo-recommendation-border: rgba(59, 130, 246, 0.2);
71
+ --lo-recommendation-icon: #60a5fa;
72
+ }
73
+
74
+ .lo-games-grid {
75
+ display: grid;
76
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
77
+ gap: 1.5rem;
78
+ }
79
+
80
+ .lo-game-btn {
81
+ display: flex;
82
+ flex-direction: column;
83
+ padding: 1.5rem;
84
+ background: var(--lo-bg-card);
85
+ border: 2px solid var(--lo-border-card);
86
+ border-radius: 1.5rem;
87
+ cursor: pointer;
88
+ transition: all 0.2s;
89
+ text-align: left;
90
+ color: inherit;
91
+ outline: none;
92
+ }
93
+
94
+ .lo-game-btn:hover {
95
+ border-color: var(--lo-focus-border);
96
+ box-shadow: var(--lo-shadow-card);
97
+ }
98
+
99
+ .lo-game-icon {
100
+ width: 3rem;
101
+ height: 3rem;
102
+ border-radius: 1rem;
103
+ background: var(--lo-bg-input);
104
+ margin-bottom: 1rem;
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: center;
108
+ color: var(--lo-icon-color);
109
+ }
110
+
111
+ .lo-game-icon svg {
112
+ width: 1.5rem;
113
+ height: 1.5rem;
114
+ }
115
+
116
+ .lo-game-name {
117
+ font-size: 1.125rem;
118
+ font-weight: 700;
119
+ color: var(--lo-text-title);
120
+ margin-bottom: 0.5rem;
121
+ }
122
+
123
+ .lo-game-description {
124
+ font-size: 0.875rem;
125
+ color: var(--lo-text-secondary);
126
+ margin-bottom: 1rem;
127
+ flex-grow: 1;
128
+ }
129
+
130
+ .lo-game-footer {
131
+ display: flex;
132
+ justify-content: space-between;
133
+ align-items: center;
134
+ padding-top: 1rem;
135
+ border-top: 1px solid var(--lo-border-card);
136
+ font-size: 0.75rem;
137
+ font-weight: 700;
138
+ color: var(--lo-text-secondary);
139
+ }
140
+
141
+ .lo-arrow-icon {
142
+ width: 1rem;
143
+ height: 1rem;
144
+ }
145
+
146
+ .lo-hidden {
147
+ display: none;
148
+ }
149
+
150
+ .lo-panel {
151
+ animation: slide-up 0.5s ease-out;
152
+ }
153
+
154
+ @keyframes slide-up {
155
+ from {
156
+ opacity: 0;
157
+ transform: translateY(20px);
158
+ }
159
+
160
+ to {
161
+ opacity: 1;
162
+ transform: translateY(0);
163
+ }
164
+ }
165
+
166
+ .lo-panel-card {
167
+ background: var(--lo-bg-card);
168
+ border: 1px solid var(--lo-border-card);
169
+ border-radius: 2rem;
170
+ padding: 2rem;
171
+ box-shadow: var(--lo-shadow-card);
172
+ display: flex;
173
+ flex-direction: column;
174
+ gap: 2rem;
175
+ }
176
+
177
+ .lo-panel-header {
178
+ display: flex;
179
+ justify-content: space-between;
180
+ align-items: flex-start;
181
+ gap: 1rem;
182
+ }
183
+
184
+ .lo-panel-title {
185
+ font-size: 1.25rem;
186
+ font-weight: 700;
187
+ color: var(--lo-text-title);
188
+ margin-bottom: 0.25rem;
189
+ }
190
+
191
+ .lo-panel-subtitle {
192
+ font-size: 0.875rem;
193
+ color: var(--lo-text-secondary);
194
+ }
195
+
196
+ .lo-investment-badge {
197
+ display: flex;
198
+ gap: 1rem;
199
+ padding: 1rem;
200
+ background: var(--lo-bg-input);
201
+ border-radius: 1.5rem;
202
+ min-width: 200px;
203
+ }
204
+
205
+ .lo-investment-badge > div:first-child {
206
+ flex: 1;
207
+ }
208
+
209
+ .lo-badge-label {
210
+ font-size: 0.75rem;
211
+ font-weight: 700;
212
+ color: var(--lo-text-secondary);
213
+ text-transform: uppercase;
214
+ margin-bottom: 0.25rem;
215
+ }
216
+
217
+ .lo-badge-value {
218
+ font-size: 1.25rem;
219
+ font-weight: 900;
220
+ color: var(--lo-text-title);
221
+ }
222
+
223
+ .lo-badge-icon {
224
+ display: flex;
225
+ align-items: center;
226
+ color: var(--lo-icon-color);
227
+ }
228
+
229
+ .lo-badge-icon svg {
230
+ width: 1.5rem;
231
+ height: 1.5rem;
232
+ }
233
+
234
+ .lo-panel-content {
235
+ display: flex;
236
+ flex-direction: column;
237
+ gap: 2rem;
238
+ }
239
+
240
+ .lo-input-section {
241
+ display: flex;
242
+ flex-direction: column;
243
+ gap: 1.5rem;
244
+ }
245
+
246
+ .lo-slider-group {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1rem;
250
+ }
251
+
252
+ .lo-slider-header {
253
+ display: flex;
254
+ justify-content: space-between;
255
+ align-items: center;
256
+ }
257
+
258
+ .lo-slider-header label {
259
+ font-weight: 700;
260
+ color: var(--lo-text-title);
261
+ }
262
+
263
+ .lo-slider-value {
264
+ font-weight: 700;
265
+ color: var(--lo-focus-border);
266
+ }
267
+
268
+ .lo-slider {
269
+ width: 100%;
270
+ height: 0.5rem;
271
+ border-radius: 0.25rem;
272
+ background: var(--lo-bar-bg);
273
+ outline: none;
274
+ -webkit-appearance: none;
275
+ appearance: none;
276
+ }
277
+
278
+ .lo-slider::-webkit-slider-thumb {
279
+ -webkit-appearance: none;
280
+ appearance: none;
281
+ width: 1.25rem;
282
+ height: 1.25rem;
283
+ background: var(--lo-focus-border);
284
+ border-radius: 50%;
285
+ cursor: pointer;
286
+ box-shadow: 0 0 10px var(--lo-focus-ring);
287
+ }
288
+
289
+ .lo-slider::-moz-range-thumb {
290
+ width: 1.25rem;
291
+ height: 1.25rem;
292
+ background: var(--lo-focus-border);
293
+ border-radius: 50%;
294
+ cursor: pointer;
295
+ border: none;
296
+ box-shadow: 0 0 10px var(--lo-focus-ring);
297
+ }
298
+
299
+ .lo-slider-labels {
300
+ display: flex;
301
+ justify-content: space-between;
302
+ font-size: 0.75rem;
303
+ font-weight: 700;
304
+ color: var(--lo-text-secondary);
305
+ }
306
+
307
+ .lo-recommendation-box {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 1rem;
311
+ padding: 1.5rem;
312
+ background: var(--lo-recommendation-bg);
313
+ border: 1px solid var(--lo-recommendation-border);
314
+ border-radius: 1rem;
315
+ }
316
+
317
+ .lo-recommendation-header {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 0.75rem;
321
+ }
322
+
323
+ .lo-alert-icon {
324
+ width: 1.25rem;
325
+ height: 1.25rem;
326
+ color: var(--lo-recommendation-icon);
327
+ flex-shrink: 0;
328
+ }
329
+
330
+ .lo-recommendation-header h4 {
331
+ font-size: 0.875rem;
332
+ font-weight: 700;
333
+ color: var(--lo-text-title);
334
+ }
335
+
336
+ .lo-recommendation-text {
337
+ font-size: 0.875rem;
338
+ line-height: 1.5;
339
+ color: var(--lo-text-primary);
340
+ }
341
+
342
+ .lo-optimal-tag {
343
+ font-size: 0.75rem;
344
+ font-weight: 700;
345
+ padding: 0.75rem;
346
+ background: var(--lo-bg-input);
347
+ border-radius: 0.5rem;
348
+ color: var(--lo-text-secondary);
349
+ }
350
+
351
+ .lo-stats-grid {
352
+ display: grid;
353
+ grid-template-columns: 1fr 1fr;
354
+ gap: 1rem;
355
+ }
356
+
357
+ .lo-stat-card {
358
+ padding: 1.5rem;
359
+ background: var(--lo-bg-stat);
360
+ border: 1px solid var(--lo-border-stat);
361
+ border-radius: 1.5rem;
362
+ display: flex;
363
+ flex-direction: column;
364
+ gap: 0.75rem;
365
+ }
366
+
367
+ .lo-stat-card-full {
368
+ grid-column: span 2;
369
+ }
370
+
371
+ .lo-stat-label {
372
+ font-size: 0.75rem;
373
+ font-weight: 700;
374
+ color: var(--lo-text-secondary);
375
+ text-transform: uppercase;
376
+ }
377
+
378
+ .lo-stat-value {
379
+ font-size: 1.5rem;
380
+ font-weight: 900;
381
+ color: var(--lo-text-title);
382
+ }
383
+
384
+ .lo-stat-bar {
385
+ width: 100%;
386
+ height: 0.25rem;
387
+ background: var(--lo-bar-bg);
388
+ border-radius: 0.25rem;
389
+ overflow: hidden;
390
+ }
391
+
392
+ .lo-stat-bar-fill {
393
+ height: 100%;
394
+ background: var(--lo-bar-fill);
395
+ transition: width 0.3s ease;
396
+ }
397
+
398
+ .lo-stat-hint {
399
+ font-size: 0.75rem;
400
+ color: var(--lo-text-secondary);
401
+ font-style: italic;
402
+ }
403
+
404
+ .lo-stat-header {
405
+ display: flex;
406
+ justify-content: space-between;
407
+ align-items: center;
408
+ }
409
+
410
+ .lo-efficiency-label {
411
+ font-size: 0.75rem;
412
+ font-weight: 700;
413
+ padding: 0.25rem 0.75rem;
414
+ border-radius: 0.5rem;
415
+ background: var(--lo-bar-bg);
416
+ color: var(--lo-text-secondary);
417
+ }
418
+
419
+ .lo-efficiency-value {
420
+ display: flex;
421
+ align-items: baseline;
422
+ gap: 0.5rem;
423
+ }
424
+
425
+ .lo-efficiency-max {
426
+ font-size: 0.875rem;
427
+ color: var(--lo-text-secondary);
428
+ }
429
+
430
+ .lo-efficiency-segments {
431
+ display: grid;
432
+ grid-template-columns: repeat(10, 1fr);
433
+ gap: 0.5rem;
434
+ }
435
+
436
+ .lo-efficiency-segment {
437
+ height: 0.5rem;
438
+ background: var(--lo-bar-bg);
439
+ border-radius: 0.25rem;
440
+ }
441
+
442
+ .lo-comparison-section {
443
+ display: flex;
444
+ flex-direction: column;
445
+ gap: 2rem;
446
+ padding: 2rem;
447
+ background: var(--lo-bg-card);
448
+ border: 1px solid var(--lo-border-card);
449
+ border-radius: 2rem;
450
+ box-shadow: var(--lo-shadow-card);
451
+ }
452
+
453
+ .lo-comparison-header {
454
+ display: flex;
455
+ align-items: flex-start;
456
+ gap: 1.5rem;
457
+ }
458
+
459
+ .lo-comparison-icon {
460
+ display: flex;
461
+ align-items: center;
462
+ justify-content: center;
463
+ width: 3rem;
464
+ height: 3rem;
465
+ background: var(--lo-bg-input);
466
+ border-radius: 1rem;
467
+ color: var(--lo-icon-color);
468
+ flex-shrink: 0;
469
+ }
470
+
471
+ .lo-comparison-icon svg {
472
+ width: 1.5rem;
473
+ height: 1.5rem;
474
+ }
475
+
476
+ .lo-comparison-header > div:last-child h3 {
477
+ font-size: 1.25rem;
478
+ font-weight: 700;
479
+ color: var(--lo-text-title);
480
+ margin-bottom: 0.25rem;
481
+ }
482
+
483
+ .lo-comparison-header > div:last-child p {
484
+ font-size: 0.875rem;
485
+ color: var(--lo-text-secondary);
486
+ }
487
+
488
+ .lo-table-wrapper {
489
+ overflow-x: auto;
490
+ }
491
+
492
+ .lo-table {
493
+ width: 100%;
494
+ border-collapse: collapse;
495
+ }
496
+
497
+ .lo-table thead {
498
+ background: var(--lo-bg-input);
499
+ }
500
+
501
+ .lo-table th {
502
+ padding: 1rem;
503
+ text-align: left;
504
+ font-weight: 700;
505
+ font-size: 0.875rem;
506
+ color: var(--lo-text-secondary);
507
+ text-transform: uppercase;
508
+ border-bottom: 2px solid var(--lo-border-card);
509
+ }
510
+
511
+ .lo-table-right {
512
+ text-align: right;
513
+ }
514
+
515
+ .lo-table tbody tr {
516
+ border-bottom: 1px solid var(--lo-border-card);
517
+ }
518
+
519
+ .lo-table td {
520
+ padding: 1rem;
521
+ font-size: 0.875rem;
522
+ color: var(--lo-text-primary);
523
+ }
524
+
525
+ .lo-table tbody tr:hover {
526
+ background: var(--lo-bg-input);
527
+ }
528
+
529
+ .lo-table-note {
530
+ font-size: 0.75rem;
531
+ color: var(--lo-text-secondary);
532
+ font-style: italic;
533
+ text-align: center;
534
+ }
@@ -1,9 +1,29 @@
1
1
  .pc-wrapper {
2
+ --pc-primary: #4b5563;
3
+ --pc-primary-light: #f1f3f5;
4
+ --pc-accent: #2c7a7b;
5
+ --pc-success: #2d6a4f;
6
+ --pc-danger: #9d4456;
7
+ --pc-text: #1a202c;
8
+ --pc-text-light: #4a5568;
9
+ --pc-border: #d2d6dc;
10
+ --pc-bg: #fff;
11
+
2
12
  max-width: 700px;
3
13
  margin: 0 auto;
4
14
  padding: 1.5rem;
5
15
  }
6
16
 
17
+ .theme-dark .pc-wrapper {
18
+ --pc-primary: #cbd5e1;
19
+ --pc-primary-light: #334155;
20
+ --pc-accent: #7dd3c0;
21
+ --pc-text: #f1f5f9;
22
+ --pc-text-light: #cbd5e1;
23
+ --pc-border: #475569;
24
+ --pc-bg: #1e293b;
25
+ }
26
+
7
27
  .pc-card {
8
28
  background: var(--pc-bg);
9
29
  border: 1px solid var(--pc-border);