@jjlmoya/utils-home 1.15.0 → 1.16.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.
@@ -225,272 +225,3 @@ const compUI = ui as HeatingComparatorUI;
225
225
  document.addEventListener('astro:page-load', init);
226
226
  </script>
227
227
 
228
- <style>
229
- .heating-wrapper {
230
- --p: #6366f1;
231
- --gas: #f97316;
232
- --aero: #10b981;
233
- --air: #3b82f6;
234
-
235
- width: 100%;
236
- max-width: 1000px;
237
- margin: 2rem auto;
238
- padding: 0 1rem;
239
- color: var(--text-main);
240
- }
241
-
242
- .main-card {
243
- background: var(--bg-surface);
244
- border: 1px solid var(--border-color);
245
- border-radius: 32px;
246
- padding: 2.5rem;
247
- box-shadow: 0 20px 50px rgba(0, 0, 0, 0.05);
248
- }
249
-
250
- .section-header {
251
- margin-bottom: 2rem;
252
- }
253
-
254
- .section-title {
255
- font-size: 1.25rem;
256
- font-weight: 900;
257
- margin: 0;
258
- }
259
-
260
- .section-desc {
261
- font-size: 0.9rem;
262
- color: var(--text-muted);
263
- margin: 0.5rem 0 0;
264
- }
265
-
266
- .config-grid {
267
- display: grid;
268
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
269
- gap: 2rem;
270
- margin-bottom: 3rem;
271
- }
272
-
273
- .input-group {
274
- display: flex;
275
- flex-direction: column;
276
- gap: 0.75rem;
277
- }
278
-
279
- .input-group label {
280
- font-size: 0.75rem;
281
- font-weight: 800;
282
- text-transform: uppercase;
283
- letter-spacing: 0.05em;
284
- color: var(--text-muted);
285
- }
286
-
287
- .input-helper {
288
- font-size: 0.75rem;
289
- color: var(--text-muted);
290
- margin: -0.25rem 0 0.25rem;
291
- opacity: 0.8;
292
- }
293
-
294
- .input-wrapper {
295
- position: relative;
296
- display: flex;
297
- align-items: center;
298
- }
299
-
300
- .input-wrapper input,
301
- .input-wrapper select {
302
- width: 100%;
303
- padding: 1rem 1.25rem;
304
- border-radius: 16px;
305
- border: 2px solid var(--border-color);
306
- background: var(--bg-muted);
307
- color: var(--text-main);
308
- font-size: 1rem;
309
- font-weight: 700;
310
- outline: none;
311
- transition: all 0.2s;
312
- appearance: none;
313
- }
314
-
315
- .input-wrapper select {
316
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2394a3b8'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
317
- background-repeat: no-repeat;
318
- background-position: right 1.25rem center;
319
- background-size: 1.25rem;
320
- }
321
-
322
- .input-wrapper input:focus,
323
- .input-wrapper select:focus {
324
- border-color: var(--p);
325
- box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
326
- }
327
-
328
- .input-unit {
329
- position: absolute;
330
- right: 1.25rem;
331
- font-weight: 700;
332
- color: var(--text-muted);
333
- font-size: 0.85rem;
334
- pointer-events: none;
335
- }
336
-
337
- .results-section {
338
- padding-top: 3rem;
339
- border-top: 1px solid var(--border-color);
340
- }
341
-
342
- .comparison-grid {
343
- display: grid;
344
- grid-template-columns: repeat(3, 1fr);
345
- gap: 1.5rem;
346
- margin-top: 2rem;
347
- }
348
-
349
- @media (max-width: 900px) {
350
- .comparison-grid {
351
- grid-template-columns: 1fr;
352
- }
353
- }
354
-
355
- .system-card {
356
- background: var(--bg-muted);
357
- border-radius: 24px;
358
- padding: 2rem;
359
- border: 1px solid var(--border-color);
360
- position: relative;
361
- overflow: hidden;
362
- transition: transform 0.3s;
363
- }
364
-
365
- .system-card:hover {
366
- transform: translateY(-4px);
367
- }
368
-
369
- .system-card::before {
370
- content: '';
371
- position: absolute;
372
- top: 0; left: 0; right: 0;
373
- height: 4px;
374
- }
375
-
376
- .system-card.gas::before { background: var(--gas); }
377
- .system-card.aero::before { background: var(--aero); }
378
- .system-card.air::before { background: var(--air); }
379
-
380
- .saving-badge {
381
- position: absolute;
382
- top: 1rem;
383
- right: 1rem;
384
- background: var(--aero);
385
- color: white;
386
- padding: 0.25rem 0.75rem;
387
- border-radius: 100px;
388
- font-size: 0.65rem;
389
- font-weight: 800;
390
- text-transform: uppercase;
391
- display: none;
392
- }
393
-
394
- .saving-badge.visible {
395
- display: block;
396
- animation: bounce-in 0.5s cubic-bezier(0.18, 0.89, 0.32, 1.28);
397
- }
398
-
399
- .card-header {
400
- display: flex;
401
- align-items: center;
402
- gap: 1rem;
403
- margin-bottom: 2rem;
404
- }
405
-
406
- .icon-box {
407
- width: 44px;
408
- height: 44px;
409
- border-radius: 12px;
410
- display: flex;
411
- align-items: center;
412
- justify-content: center;
413
- }
414
-
415
- .gas .icon-box {
416
- background: rgba(249, 115, 22, 0.1);
417
- color: var(--gas);
418
- }
419
- .aero .icon-box {
420
- background: rgba(16, 185, 129, 0.1);
421
- color: var(--aero);
422
- }
423
- .air .icon-box {
424
- background: rgba(59, 130, 246, 0.1);
425
- color: var(--air);
426
- }
427
-
428
- .card-title {
429
- font-weight: 800;
430
- font-size: 1.1rem;
431
- }
432
-
433
- .cost-display {
434
- text-align: center;
435
- margin-bottom: 2rem;
436
- }
437
-
438
- .cost-label {
439
- display: block;
440
- font-size: 0.7rem;
441
- font-weight: 700;
442
- color: var(--text-muted);
443
- text-transform: uppercase;
444
- margin-bottom: 0.5rem;
445
- }
446
-
447
- .annual-cost {
448
- font-size: 2.25rem;
449
- font-weight: 900;
450
- letter-spacing: -0.02em;
451
- }
452
-
453
- .specs-list {
454
- display: flex;
455
- flex-direction: column;
456
- gap: 0.75rem;
457
- padding-top: 1.5rem;
458
- border-top: 1px dashed var(--border-color);
459
- }
460
-
461
- .spec-item {
462
- display: flex;
463
- justify-content: space-between;
464
- font-size: 0.85rem;
465
- }
466
-
467
- .spec-label {
468
- color: var(--text-muted);
469
- }
470
- .spec-value {
471
- font-weight: 700;
472
- }
473
-
474
- @keyframes pop {
475
- 0% { transform: scale(1); }
476
- 50% { transform: scale(1.05); }
477
- 100% { transform: scale(1); }
478
- }
479
-
480
- .animate-pop {
481
- animation: pop 0.2s ease-out;
482
- }
483
-
484
- @keyframes bounce-in {
485
- 0% {
486
- transform: scale(0.3);
487
- opacity: 0;
488
- }
489
- 50% {
490
- transform: scale(1.05);
491
- opacity: 1;
492
- }
493
- 70% { transform: scale(0.9); }
494
- 100% { transform: scale(1); }
495
- }
496
- </style>
@@ -0,0 +1,267 @@
1
+ .heating-wrapper {
2
+ --p: #6366f1;
3
+ --gas: #f97316;
4
+ --aero: #10b981;
5
+ --air: #3b82f6;
6
+
7
+ width: 100%;
8
+ max-width: 1000px;
9
+ margin: 2rem auto;
10
+ padding: 0 1rem;
11
+ color: var(--text-main);
12
+ }
13
+
14
+ .main-card {
15
+ background: var(--bg-surface);
16
+ border: 1px solid var(--border-color);
17
+ border-radius: 32px;
18
+ padding: 2.5rem;
19
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.05);
20
+ }
21
+
22
+ .section-header {
23
+ margin-bottom: 2rem;
24
+ }
25
+
26
+ .section-title {
27
+ font-size: 1.25rem;
28
+ font-weight: 900;
29
+ margin: 0;
30
+ }
31
+
32
+ .section-desc {
33
+ font-size: 0.9rem;
34
+ color: var(--text-muted);
35
+ margin: 0.5rem 0 0;
36
+ }
37
+
38
+ .config-grid {
39
+ display: grid;
40
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
41
+ gap: 2rem;
42
+ margin-bottom: 3rem;
43
+ }
44
+
45
+ .input-group {
46
+ display: flex;
47
+ flex-direction: column;
48
+ gap: 0.75rem;
49
+ }
50
+
51
+ .input-group label {
52
+ font-size: 0.75rem;
53
+ font-weight: 800;
54
+ text-transform: uppercase;
55
+ letter-spacing: 0.05em;
56
+ color: var(--text-muted);
57
+ }
58
+
59
+ .input-helper {
60
+ font-size: 0.75rem;
61
+ color: var(--text-muted);
62
+ margin: -0.25rem 0 0.25rem;
63
+ opacity: 0.8;
64
+ }
65
+
66
+ .input-wrapper {
67
+ position: relative;
68
+ display: flex;
69
+ align-items: center;
70
+ }
71
+
72
+ .input-wrapper input,
73
+ .input-wrapper select {
74
+ width: 100%;
75
+ padding: 1rem 1.25rem;
76
+ border-radius: 16px;
77
+ border: 2px solid var(--border-color);
78
+ background: var(--bg-muted);
79
+ color: var(--text-main);
80
+ font-size: 1rem;
81
+ font-weight: 700;
82
+ outline: none;
83
+ transition: all 0.2s;
84
+ appearance: none;
85
+ }
86
+
87
+ .input-wrapper select {
88
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%2394a3b8'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
89
+ background-repeat: no-repeat;
90
+ background-position: right 1.25rem center;
91
+ background-size: 1.25rem;
92
+ }
93
+
94
+ .input-wrapper input:focus,
95
+ .input-wrapper select:focus {
96
+ border-color: var(--p);
97
+ box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);
98
+ }
99
+
100
+ .input-unit {
101
+ position: absolute;
102
+ right: 1.25rem;
103
+ font-weight: 700;
104
+ color: var(--text-muted);
105
+ font-size: 0.85rem;
106
+ pointer-events: none;
107
+ }
108
+
109
+ .results-section {
110
+ padding-top: 3rem;
111
+ border-top: 1px solid var(--border-color);
112
+ }
113
+
114
+ .comparison-grid {
115
+ display: grid;
116
+ grid-template-columns: repeat(3, 1fr);
117
+ gap: 1.5rem;
118
+ margin-top: 2rem;
119
+ }
120
+
121
+ @media (max-width: 900px) {
122
+ .comparison-grid {
123
+ grid-template-columns: 1fr;
124
+ }
125
+ }
126
+
127
+ .system-card {
128
+ background: var(--bg-muted);
129
+ border-radius: 24px;
130
+ padding: 2rem;
131
+ border: 1px solid var(--border-color);
132
+ position: relative;
133
+ overflow: hidden;
134
+ transition: transform 0.3s;
135
+ }
136
+
137
+ .system-card:hover {
138
+ transform: translateY(-4px);
139
+ }
140
+
141
+ .system-card::before {
142
+ content: '';
143
+ position: absolute;
144
+ top: 0; left: 0; right: 0;
145
+ height: 4px;
146
+ }
147
+
148
+ .system-card.gas::before { background: var(--gas); }
149
+ .system-card.aero::before { background: var(--aero); }
150
+ .system-card.air::before { background: var(--air); }
151
+
152
+ .saving-badge {
153
+ position: absolute;
154
+ top: 1rem;
155
+ right: 1rem;
156
+ background: var(--aero);
157
+ color: white;
158
+ padding: 0.25rem 0.75rem;
159
+ border-radius: 100px;
160
+ font-size: 0.65rem;
161
+ font-weight: 800;
162
+ text-transform: uppercase;
163
+ display: none;
164
+ }
165
+
166
+ .saving-badge.visible {
167
+ display: block;
168
+ animation: bounce-in 0.5s cubic-bezier(0.18, 0.89, 0.32, 1.28);
169
+ }
170
+
171
+ .card-header {
172
+ display: flex;
173
+ align-items: center;
174
+ gap: 1rem;
175
+ margin-bottom: 2rem;
176
+ }
177
+
178
+ .icon-box {
179
+ width: 44px;
180
+ height: 44px;
181
+ border-radius: 12px;
182
+ display: flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ }
186
+
187
+ .gas .icon-box {
188
+ background: rgba(249, 115, 22, 0.1);
189
+ color: var(--gas);
190
+ }
191
+ .aero .icon-box {
192
+ background: rgba(16, 185, 129, 0.1);
193
+ color: var(--aero);
194
+ }
195
+ .air .icon-box {
196
+ background: rgba(59, 130, 246, 0.1);
197
+ color: var(--air);
198
+ }
199
+
200
+ .card-title {
201
+ font-weight: 800;
202
+ font-size: 1.1rem;
203
+ }
204
+
205
+ .cost-display {
206
+ text-align: center;
207
+ margin-bottom: 2rem;
208
+ }
209
+
210
+ .cost-label {
211
+ display: block;
212
+ font-size: 0.7rem;
213
+ font-weight: 700;
214
+ color: var(--text-muted);
215
+ text-transform: uppercase;
216
+ margin-bottom: 0.5rem;
217
+ }
218
+
219
+ .annual-cost {
220
+ font-size: 2.25rem;
221
+ font-weight: 900;
222
+ letter-spacing: -0.02em;
223
+ }
224
+
225
+ .specs-list {
226
+ display: flex;
227
+ flex-direction: column;
228
+ gap: 0.75rem;
229
+ padding-top: 1.5rem;
230
+ border-top: 1px dashed var(--border-color);
231
+ }
232
+
233
+ .spec-item {
234
+ display: flex;
235
+ justify-content: space-between;
236
+ font-size: 0.85rem;
237
+ }
238
+
239
+ .spec-label {
240
+ color: var(--text-muted);
241
+ }
242
+ .spec-value {
243
+ font-weight: 700;
244
+ }
245
+
246
+ @keyframes pop {
247
+ 0% { transform: scale(1); }
248
+ 50% { transform: scale(1.05); }
249
+ 100% { transform: scale(1); }
250
+ }
251
+
252
+ .animate-pop {
253
+ animation: pop 0.2s ease-out;
254
+ }
255
+
256
+ @keyframes bounce-in {
257
+ 0% {
258
+ transform: scale(0.3);
259
+ opacity: 0;
260
+ }
261
+ 50% {
262
+ transform: scale(1.05);
263
+ opacity: 1;
264
+ }
265
+ 70% { transform: scale(0.9); }
266
+ 100% { transform: scale(1); }
267
+ }