@jjlmoya/utils-nature 1.11.0 → 1.12.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.
@@ -96,350 +96,6 @@ if (!ui) return null;
96
96
  </div>
97
97
  </digital-carbon>
98
98
 
99
- <style>
100
- .dc-wrap {
101
- --dc-bg: #fff;
102
- --dc-bg-alt: #f8fafc;
103
- --dc-border: #e2e8f0;
104
- --dc-text: #0f172a;
105
- --dc-text-muted: #64748b;
106
- --dc-accent: #10b981;
107
- --dc-accent-hover: #059669;
108
- --dc-error: #ef4444;
109
-
110
- display: block;
111
- max-width: 72rem;
112
- margin: 0 auto;
113
- padding: 1rem;
114
- }
115
-
116
- :global(.theme-dark) .dc-wrap {
117
- --dc-bg: #0f172a;
118
- --dc-bg-alt: #1e293b;
119
- --dc-border: #334155;
120
- --dc-text: #f1f5f9;
121
- --dc-text-muted: #94a3b8;
122
- }
123
-
124
- .dc-container {
125
- background: var(--dc-bg);
126
- border-radius: 2rem;
127
- border: 1px solid var(--dc-border);
128
- overflow: hidden;
129
- box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
130
- }
131
-
132
- :global(.dc-results-wrapper) {
133
- display: grid;
134
- grid-template-columns: 1fr;
135
- border-top: 1px solid var(--dc-border);
136
- animation: dc-slide-up 0.6s cubic-bezier(0.16, 1, 0.3, 1);
137
- }
138
-
139
- @media (min-width: 1024px) {
140
- :global(.dc-results-wrapper) {
141
- grid-template-columns: 1.5fr 1fr;
142
- }
143
- }
144
-
145
- @keyframes dc-slide-up {
146
- from {
147
- opacity: 0;
148
- transform: translateY(40px);
149
- }
150
-
151
- to {
152
- opacity: 1;
153
- transform: translateY(0);
154
- }
155
- }
156
-
157
- .dc-inputs {
158
- padding: 3rem;
159
- }
160
-
161
- .dc-section-head {
162
- display: flex;
163
- align-items: center;
164
- gap: 0.75rem;
165
- font-size: 1.5rem;
166
- font-weight: 800;
167
- margin-bottom: 2rem;
168
- color: var(--dc-text);
169
- }
170
-
171
- .dc-head-icon {
172
- font-size: 2rem;
173
- color: var(--dc-accent);
174
- }
175
-
176
- .dc-label {
177
- display: block;
178
- font-size: 0.875rem;
179
- font-weight: 700;
180
- text-transform: uppercase;
181
- letter-spacing: 0.05em;
182
- margin-bottom: 0.75rem;
183
- color: var(--dc-text-muted);
184
- }
185
-
186
- .dc-search-box {
187
- display: flex;
188
- gap: 1rem;
189
- background: var(--dc-bg-alt);
190
- padding: 0.5rem;
191
- border-radius: 1rem;
192
- border: 1px solid var(--dc-border);
193
- }
194
-
195
- .dc-input {
196
- flex: 1;
197
- background: transparent;
198
- border: none;
199
- padding: 0.75rem 1rem;
200
- font-size: 1.125rem;
201
- color: var(--dc-text);
202
- outline: none;
203
- }
204
-
205
- .dc-btn-primary {
206
- background: var(--dc-accent);
207
- color: #fff;
208
- border: none;
209
- padding: 0 2rem;
210
- border-radius: 0.75rem;
211
- font-weight: 700;
212
- cursor: pointer;
213
- transition: all 0.2s;
214
- display: flex;
215
- align-items: center;
216
- justify-content: center;
217
- min-width: 160px;
218
- }
219
-
220
- .dc-btn-primary:hover {
221
- background: var(--dc-accent-hover);
222
- transform: translateY(-2px);
223
- }
224
-
225
- .dc-btn-primary:disabled {
226
- opacity: 0.7;
227
- cursor: not-allowed;
228
- transform: none;
229
- }
230
-
231
- .dc-spin {
232
- animation: dc-spin 1s linear infinite;
233
- font-size: 1.5rem;
234
- }
235
-
236
- @keyframes dc-spin {
237
- from { transform: rotate(0deg); }
238
- to { transform: rotate(360deg); }
239
- }
240
-
241
- .dc-error {
242
- color: var(--dc-error);
243
- font-size: 0.875rem;
244
- font-weight: 600;
245
- margin-top: 0.5rem;
246
- }
247
-
248
- :global(.btn-text.dc-hidden),
249
- :global(.btn-loader.dc-hidden) {
250
- display: none;
251
- }
252
-
253
- :global(.dc-hidden) {
254
- display: none;
255
- }
256
-
257
- .dc-results-grid {
258
- padding: 3rem;
259
- display: flex;
260
- flex-direction: column;
261
- gap: 2rem;
262
- }
263
-
264
- .dc-result-card.main {
265
- display: flex;
266
- align-items: center;
267
- gap: 2rem;
268
- background: var(--dc-bg-alt);
269
- padding: 2rem;
270
- border-radius: 1.5rem;
271
- border: 1px solid var(--dc-border);
272
- }
273
-
274
- .dc-rating-badge {
275
- width: 5rem;
276
- height: 5rem;
277
- display: flex;
278
- align-items: center;
279
- justify-content: center;
280
- border-radius: 1.25rem;
281
- font-size: 2.25rem;
282
- font-weight: 900;
283
- color: #fff;
284
- flex-shrink: 0;
285
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
286
- }
287
-
288
- .dc-rating-title {
289
- font-size: 1.25rem;
290
- font-weight: 800;
291
- margin-bottom: 0.25rem;
292
- color: var(--dc-text);
293
- }
294
-
295
- .dc-rating-desc {
296
- color: var(--dc-text-muted);
297
- line-height: 1.5;
298
- }
299
-
300
- .dc-stats-grid {
301
- display: grid;
302
- grid-template-columns: repeat(2, 1fr);
303
- gap: 1.5rem;
304
- }
305
-
306
- .dc-stat-item {
307
- background: var(--dc-bg-alt);
308
- padding: 1.5rem;
309
- border-radius: 1.25rem;
310
- border: 1px solid var(--dc-border);
311
- }
312
-
313
- .dc-stat-item.full {
314
- grid-column: span 2;
315
- }
316
-
317
- .dc-stat-label {
318
- display: block;
319
- font-size: 0.75rem;
320
- font-weight: 700;
321
- text-transform: uppercase;
322
- color: var(--dc-text-muted);
323
- margin-bottom: 0.5rem;
324
- }
325
-
326
- .dc-stat-value {
327
- font-size: 2rem;
328
- font-weight: 800;
329
- color: var(--dc-text);
330
- }
331
-
332
- .dc-stat-value small {
333
- font-size: 1rem;
334
- margin-left: 0.25rem;
335
- color: var(--dc-text-muted);
336
- }
337
-
338
- .dc-sidebar {
339
- background: var(--dc-bg-alt);
340
- padding: 3rem;
341
- border-left: 1px solid var(--dc-border);
342
- display: flex;
343
- flex-direction: column;
344
- gap: 3rem;
345
- position: relative;
346
- }
347
-
348
- @media (max-width: 1023px) {
349
- .dc-sidebar {
350
- border-left: none;
351
- border-top: 1px solid var(--dc-border);
352
- }
353
- }
354
-
355
- .dc-impact-title {
356
- font-size: 1.125rem;
357
- font-weight: 800;
358
- margin-bottom: 1.5rem;
359
- text-align: center;
360
- color: var(--dc-text);
361
- }
362
-
363
- .dc-impact-items {
364
- display: grid;
365
- grid-template-columns: 1fr 1fr;
366
- gap: 1rem;
367
- }
368
-
369
- .dc-impact-card {
370
- background: var(--dc-bg);
371
- padding: 1.5rem;
372
- border-radius: 1.25rem;
373
- border: 1px solid var(--dc-border);
374
- display: flex;
375
- flex-direction: column;
376
- align-items: center;
377
- gap: 1rem;
378
- text-align: center;
379
- }
380
-
381
- .dc-impact-icon {
382
- font-size: 2.5rem;
383
- }
384
-
385
- .dc-impact-icon.tree { color: #059669; }
386
- .dc-impact-icon.car { color: #4b5563; }
387
-
388
- .dc-impact-val {
389
- display: block;
390
- font-size: 1.5rem;
391
- font-weight: 800;
392
- color: var(--dc-text);
393
- }
394
-
395
- :global(.dc-impact-label) {
396
- font-size: 0.75rem;
397
- color: var(--dc-text-muted);
398
- font-weight: 600;
399
- }
400
-
401
- :global(.dc-tips-title) {
402
- font-size: 1.125rem;
403
- font-weight: 800;
404
- margin-bottom: 1.5rem;
405
- color: var(--dc-text);
406
- }
407
-
408
- :global(.dc-tips-list) {
409
- list-style: none;
410
- padding: 0;
411
- margin: 0;
412
- display: flex;
413
- flex-direction: column;
414
- gap: 1rem;
415
- }
416
-
417
- :global(.dc-tips-list li) {
418
- padding-left: 2rem;
419
- position: relative;
420
- font-size: 0.9375rem;
421
- color: var(--dc-text-muted);
422
- line-height: 1.4;
423
- }
424
-
425
- :global(.dc-tips-list li::before) {
426
- content: "→";
427
- position: absolute;
428
- left: 0;
429
- color: var(--dc-accent);
430
- font-weight: 900;
431
- }
432
-
433
- .dc-decoration {
434
- position: absolute;
435
- bottom: 1rem;
436
- right: 1rem;
437
- font-size: 3rem;
438
- opacity: 0.05;
439
- color: var(--dc-accent);
440
- pointer-events: none;
441
- }
442
- </style>
443
99
 
444
100
  <script>
445
101
  import { estimatePageSize, buildResult } from './logic';
@@ -0,0 +1,342 @@
1
+ .dc-wrap {
2
+ --dc-bg: #fff;
3
+ --dc-bg-alt: #f8fafc;
4
+ --dc-border: #e2e8f0;
5
+ --dc-text: #0f172a;
6
+ --dc-text-muted: #64748b;
7
+ --dc-accent: #10b981;
8
+ --dc-accent-hover: #059669;
9
+ --dc-error: #ef4444;
10
+
11
+ display: block;
12
+ max-width: 72rem;
13
+ margin: 0 auto;
14
+ padding: 1rem;
15
+ }
16
+
17
+ :global(.theme-dark) .dc-wrap {
18
+ --dc-bg: #0f172a;
19
+ --dc-bg-alt: #1e293b;
20
+ --dc-border: #334155;
21
+ --dc-text: #f1f5f9;
22
+ --dc-text-muted: #94a3b8;
23
+ }
24
+
25
+ .dc-container {
26
+ background: var(--dc-bg);
27
+ border-radius: 2rem;
28
+ border: 1px solid var(--dc-border);
29
+ overflow: hidden;
30
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
31
+ }
32
+
33
+ :global(.dc-results-wrapper) {
34
+ display: grid;
35
+ grid-template-columns: 1fr;
36
+ border-top: 1px solid var(--dc-border);
37
+ animation: dc-slide-up 0.6s cubic-bezier(0.16, 1, 0.3, 1);
38
+ }
39
+
40
+ @media (min-width: 1024px) {
41
+ :global(.dc-results-wrapper) {
42
+ grid-template-columns: 1.5fr 1fr;
43
+ }
44
+ }
45
+
46
+ @keyframes dc-slide-up {
47
+ from {
48
+ opacity: 0;
49
+ transform: translateY(40px);
50
+ }
51
+
52
+ to {
53
+ opacity: 1;
54
+ transform: translateY(0);
55
+ }
56
+ }
57
+
58
+ .dc-inputs {
59
+ padding: 3rem;
60
+ }
61
+
62
+ .dc-section-head {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 0.75rem;
66
+ font-size: 1.5rem;
67
+ font-weight: 800;
68
+ margin-bottom: 2rem;
69
+ color: var(--dc-text);
70
+ }
71
+
72
+ .dc-head-icon {
73
+ font-size: 2rem;
74
+ color: var(--dc-accent);
75
+ }
76
+
77
+ .dc-label {
78
+ display: block;
79
+ font-size: 0.875rem;
80
+ font-weight: 700;
81
+ text-transform: uppercase;
82
+ letter-spacing: 0.05em;
83
+ margin-bottom: 0.75rem;
84
+ color: var(--dc-text-muted);
85
+ }
86
+
87
+ .dc-search-box {
88
+ display: flex;
89
+ gap: 1rem;
90
+ background: var(--dc-bg-alt);
91
+ padding: 0.5rem;
92
+ border-radius: 1rem;
93
+ border: 1px solid var(--dc-border);
94
+ }
95
+
96
+ .dc-input {
97
+ flex: 1;
98
+ background: transparent;
99
+ border: none;
100
+ padding: 0.75rem 1rem;
101
+ font-size: 1.125rem;
102
+ color: var(--dc-text);
103
+ outline: none;
104
+ }
105
+
106
+ .dc-btn-primary {
107
+ background: var(--dc-accent);
108
+ color: #fff;
109
+ border: none;
110
+ padding: 0 2rem;
111
+ border-radius: 0.75rem;
112
+ font-weight: 700;
113
+ cursor: pointer;
114
+ transition: all 0.2s;
115
+ display: flex;
116
+ align-items: center;
117
+ justify-content: center;
118
+ min-width: 160px;
119
+ }
120
+
121
+ .dc-btn-primary:hover {
122
+ background: var(--dc-accent-hover);
123
+ transform: translateY(-2px);
124
+ }
125
+
126
+ .dc-btn-primary:disabled {
127
+ opacity: 0.7;
128
+ cursor: not-allowed;
129
+ transform: none;
130
+ }
131
+
132
+ .dc-spin {
133
+ animation: dc-spin 1s linear infinite;
134
+ font-size: 1.5rem;
135
+ }
136
+
137
+ @keyframes dc-spin {
138
+ from { transform: rotate(0deg); }
139
+ to { transform: rotate(360deg); }
140
+ }
141
+
142
+ .dc-error {
143
+ color: var(--dc-error);
144
+ font-size: 0.875rem;
145
+ font-weight: 600;
146
+ margin-top: 0.5rem;
147
+ }
148
+
149
+ :global(.btn-text.dc-hidden),
150
+ :global(.btn-loader.dc-hidden) {
151
+ display: none;
152
+ }
153
+
154
+ :global(.dc-hidden) {
155
+ display: none;
156
+ }
157
+
158
+ .dc-results-grid {
159
+ padding: 3rem;
160
+ display: flex;
161
+ flex-direction: column;
162
+ gap: 2rem;
163
+ }
164
+
165
+ .dc-result-card.main {
166
+ display: flex;
167
+ align-items: center;
168
+ gap: 2rem;
169
+ background: var(--dc-bg-alt);
170
+ padding: 2rem;
171
+ border-radius: 1.5rem;
172
+ border: 1px solid var(--dc-border);
173
+ }
174
+
175
+ .dc-rating-badge {
176
+ width: 5rem;
177
+ height: 5rem;
178
+ display: flex;
179
+ align-items: center;
180
+ justify-content: center;
181
+ border-radius: 1.25rem;
182
+ font-size: 2.25rem;
183
+ font-weight: 900;
184
+ color: #fff;
185
+ flex-shrink: 0;
186
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
187
+ }
188
+
189
+ .dc-rating-title {
190
+ font-size: 1.25rem;
191
+ font-weight: 800;
192
+ margin-bottom: 0.25rem;
193
+ color: var(--dc-text);
194
+ }
195
+
196
+ .dc-rating-desc {
197
+ color: var(--dc-text-muted);
198
+ line-height: 1.5;
199
+ }
200
+
201
+ .dc-stats-grid {
202
+ display: grid;
203
+ grid-template-columns: repeat(2, 1fr);
204
+ gap: 1.5rem;
205
+ }
206
+
207
+ .dc-stat-item {
208
+ background: var(--dc-bg-alt);
209
+ padding: 1.5rem;
210
+ border-radius: 1.25rem;
211
+ border: 1px solid var(--dc-border);
212
+ }
213
+
214
+ .dc-stat-item.full {
215
+ grid-column: span 2;
216
+ }
217
+
218
+ .dc-stat-label {
219
+ display: block;
220
+ font-size: 0.75rem;
221
+ font-weight: 700;
222
+ text-transform: uppercase;
223
+ color: var(--dc-text-muted);
224
+ margin-bottom: 0.5rem;
225
+ }
226
+
227
+ .dc-stat-value {
228
+ font-size: 2rem;
229
+ font-weight: 800;
230
+ color: var(--dc-text);
231
+ }
232
+
233
+ .dc-stat-value small {
234
+ font-size: 1rem;
235
+ margin-left: 0.25rem;
236
+ color: var(--dc-text-muted);
237
+ }
238
+
239
+ .dc-sidebar {
240
+ background: var(--dc-bg-alt);
241
+ padding: 3rem;
242
+ border-left: 1px solid var(--dc-border);
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 3rem;
246
+ position: relative;
247
+ }
248
+
249
+ @media (max-width: 1023px) {
250
+ .dc-sidebar {
251
+ border-left: none;
252
+ border-top: 1px solid var(--dc-border);
253
+ }
254
+ }
255
+
256
+ .dc-impact-title {
257
+ font-size: 1.125rem;
258
+ font-weight: 800;
259
+ margin-bottom: 1.5rem;
260
+ text-align: center;
261
+ color: var(--dc-text);
262
+ }
263
+
264
+ .dc-impact-items {
265
+ display: grid;
266
+ grid-template-columns: 1fr 1fr;
267
+ gap: 1rem;
268
+ }
269
+
270
+ .dc-impact-card {
271
+ background: var(--dc-bg);
272
+ padding: 1.5rem;
273
+ border-radius: 1.25rem;
274
+ border: 1px solid var(--dc-border);
275
+ display: flex;
276
+ flex-direction: column;
277
+ align-items: center;
278
+ gap: 1rem;
279
+ text-align: center;
280
+ }
281
+
282
+ .dc-impact-icon {
283
+ font-size: 2.5rem;
284
+ }
285
+
286
+ .dc-impact-icon.tree { color: #059669; }
287
+ .dc-impact-icon.car { color: #4b5563; }
288
+
289
+ .dc-impact-val {
290
+ display: block;
291
+ font-size: 1.5rem;
292
+ font-weight: 800;
293
+ color: var(--dc-text);
294
+ }
295
+
296
+ :global(.dc-impact-label) {
297
+ font-size: 0.75rem;
298
+ color: var(--dc-text-muted);
299
+ font-weight: 600;
300
+ }
301
+
302
+ :global(.dc-tips-title) {
303
+ font-size: 1.125rem;
304
+ font-weight: 800;
305
+ margin-bottom: 1.5rem;
306
+ color: var(--dc-text);
307
+ }
308
+
309
+ :global(.dc-tips-list) {
310
+ list-style: none;
311
+ padding: 0;
312
+ margin: 0;
313
+ display: flex;
314
+ flex-direction: column;
315
+ gap: 1rem;
316
+ }
317
+
318
+ :global(.dc-tips-list li) {
319
+ padding-left: 2rem;
320
+ position: relative;
321
+ font-size: 0.9375rem;
322
+ color: var(--dc-text-muted);
323
+ line-height: 1.4;
324
+ }
325
+
326
+ :global(.dc-tips-list li::before) {
327
+ content: "→";
328
+ position: absolute;
329
+ left: 0;
330
+ color: var(--dc-accent);
331
+ font-weight: 900;
332
+ }
333
+
334
+ .dc-decoration {
335
+ position: absolute;
336
+ bottom: 1rem;
337
+ right: 1rem;
338
+ font-size: 3rem;
339
+ opacity: 0.05;
340
+ color: var(--dc-accent);
341
+ pointer-events: none;
342
+ }