@webority/theme 0.7.5 → 0.7.7
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/dist/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/_components.scss +13 -8
- package/scss/_tokens.scss +10 -2
- package/scss/_variables.scss +17 -0
- package/scss/_wui-aliases.scss +11 -3
- package/scss/wui/_card.scss +138 -0
- package/scss/wui/_choice.scss +124 -2
- package/scss/wui/_controls.scss +228 -3
- package/scss/wui/_data.scss +26 -13
- package/scss/wui/_display.scss +160 -1
- package/scss/wui/_flow.scss +216 -7
- package/scss/wui/_media.scss +272 -14
- package/scss/wui/_navigation.scss +5 -3
- package/scss/wui/_overlays.scss +45 -1
- package/scss/wui/_shell.scss +14 -4
- package/scss/wui/_typography.scss +16 -0
- package/scss/wui/_utilities.scss +144 -7
package/scss/wui/_controls.scss
CHANGED
|
@@ -566,6 +566,10 @@ textarea.form-control.autosize {
|
|
|
566
566
|
color: var(--color-primary);
|
|
567
567
|
background: transparent;
|
|
568
568
|
}
|
|
569
|
+
.pw-toggle:focus-visible {
|
|
570
|
+
outline: 2px solid var(--color-primary);
|
|
571
|
+
outline-offset: 2px;
|
|
572
|
+
}
|
|
569
573
|
|
|
570
574
|
// Clearable ✕ — a trailing reset button, placed inside .input-wrap / .input-icon. It only
|
|
571
575
|
// renders while the field has a value; .has-clear reserves the room so text never sits under it.
|
|
@@ -594,7 +598,11 @@ textarea.form-control.autosize {
|
|
|
594
598
|
}
|
|
595
599
|
.input-clear:hover {
|
|
596
600
|
color: var(--color-text);
|
|
597
|
-
background: var(--
|
|
601
|
+
background: var(--color-bg-muted);
|
|
602
|
+
}
|
|
603
|
+
.input-clear:focus-visible {
|
|
604
|
+
outline: 2px solid var(--color-primary);
|
|
605
|
+
outline-offset: 2px;
|
|
598
606
|
}
|
|
599
607
|
@keyframes wui-clear-in {
|
|
600
608
|
from { opacity: 0; transform: translateY(-50%) scale(0.72); }
|
|
@@ -633,7 +641,7 @@ textarea.form-control.autosize {
|
|
|
633
641
|
display: flex;
|
|
634
642
|
align-items: center;
|
|
635
643
|
padding: 0 12px;
|
|
636
|
-
background: var(--
|
|
644
|
+
background: var(--color-bg-muted);
|
|
637
645
|
color: var(--color-text-subtle);
|
|
638
646
|
font-size: 14px;
|
|
639
647
|
white-space: nowrap;
|
|
@@ -789,6 +797,7 @@ textarea.form-control.autosize {
|
|
|
789
797
|
wui-select,
|
|
790
798
|
wui-autocomplete,
|
|
791
799
|
wui-multiselect,
|
|
800
|
+
wui-taginput,
|
|
792
801
|
wui-phone,
|
|
793
802
|
wui-datepicker,
|
|
794
803
|
wui-date-range {
|
|
@@ -805,6 +814,7 @@ wui-select[compact] {
|
|
|
805
814
|
.field > wui-select,
|
|
806
815
|
.field > wui-autocomplete,
|
|
807
816
|
.field > wui-multiselect,
|
|
817
|
+
.field > wui-taginput,
|
|
808
818
|
.field > wui-phone,
|
|
809
819
|
.field > wui-datepicker,
|
|
810
820
|
.field > wui-date-range,
|
|
@@ -886,10 +896,104 @@ wui-select[compact] {
|
|
|
886
896
|
font-size: 14px;
|
|
887
897
|
font-weight: 500;
|
|
888
898
|
color: var(--color-text-muted);
|
|
889
|
-
font-family:
|
|
899
|
+
font-family: var(--font-sans);
|
|
900
|
+
display: inline-flex;
|
|
901
|
+
align-items: center;
|
|
902
|
+
white-space: nowrap;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
// Number input with stepper — decrements/increments by step, clamped to min/max.
|
|
906
|
+
// One field, one border: the WRAPPER owns the border + hover/focus/error ring
|
|
907
|
+
// so the input and stepper buttons light up together.
|
|
908
|
+
.num-wrap {
|
|
909
|
+
display: flex;
|
|
910
|
+
align-items: stretch;
|
|
911
|
+
border: 1px solid var(--color-border);
|
|
912
|
+
border-radius: var(--radius-lg);
|
|
913
|
+
corner-shape: squircle;
|
|
914
|
+
background: var(--color-surface);
|
|
915
|
+
transition:
|
|
916
|
+
border-color 0.12s,
|
|
917
|
+
background-color 0.12s;
|
|
918
|
+
overflow: hidden;
|
|
919
|
+
}
|
|
920
|
+
.num-wrap:hover:not(:focus-within) {
|
|
921
|
+
background: var(--color-bg-muted);
|
|
922
|
+
border-color: var(--color-border-strong);
|
|
923
|
+
}
|
|
924
|
+
.num-wrap:focus-within {
|
|
925
|
+
background: var(--color-bg-muted);
|
|
926
|
+
border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
|
|
927
|
+
}
|
|
928
|
+
.num-wrap:has(.num-input.error) {
|
|
929
|
+
border-color: var(--color-danger);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
// Numeric input inside the stepper — plain text field, no native spinner.
|
|
933
|
+
// Flows seamlessly between the stepper buttons; the wrapper carries the border.
|
|
934
|
+
.num-wrap .num-input {
|
|
935
|
+
flex: 1;
|
|
936
|
+
border: none;
|
|
937
|
+
border-radius: 0;
|
|
938
|
+
background: transparent;
|
|
939
|
+
min-width: 0;
|
|
940
|
+
}
|
|
941
|
+
.num-wrap .num-input:focus {
|
|
942
|
+
box-shadow: none;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
// Stepper buttons — decrease/increase the value by step.
|
|
946
|
+
// Positioned left and right of the input, disabled at min/max or when the
|
|
947
|
+
// control is disabled.
|
|
948
|
+
.num-btn {
|
|
949
|
+
display: grid;
|
|
950
|
+
place-items: center;
|
|
951
|
+
width: 40px;
|
|
952
|
+
height: 100%;
|
|
953
|
+
border: none;
|
|
954
|
+
background: transparent;
|
|
955
|
+
padding: 0;
|
|
956
|
+
color: var(--color-text-muted);
|
|
957
|
+
cursor: pointer;
|
|
958
|
+
transition:
|
|
959
|
+
color 0.12s ease,
|
|
960
|
+
background 0.12s ease;
|
|
961
|
+
flex: none;
|
|
962
|
+
}
|
|
963
|
+
.num-btn:hover:not(:disabled) {
|
|
964
|
+
color: var(--color-primary);
|
|
965
|
+
background: var(--color-bg-muted);
|
|
966
|
+
}
|
|
967
|
+
.num-btn:focus-visible {
|
|
968
|
+
outline: none;
|
|
969
|
+
color: var(--color-primary);
|
|
970
|
+
}
|
|
971
|
+
.num-btn:active:not(:disabled) {
|
|
972
|
+
color: color-mix(in srgb, var(--color-primary) 80%, black);
|
|
973
|
+
}
|
|
974
|
+
.num-btn:disabled {
|
|
975
|
+
color: var(--color-text-subtle);
|
|
976
|
+
cursor: not-allowed;
|
|
977
|
+
opacity: 0.5;
|
|
978
|
+
}
|
|
979
|
+
.num-btn:not(:first-child) {
|
|
980
|
+
border-left: 1px solid var(--color-border);
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
// Affix (unit) in the num-wrap — a trailing pill after the input.
|
|
984
|
+
.num-wrap .affix {
|
|
985
|
+
background: var(--color-bg-muted);
|
|
986
|
+
border: none;
|
|
987
|
+
border-left: 1px solid var(--color-border);
|
|
988
|
+
padding: 9px 14px;
|
|
989
|
+
font-size: 14px;
|
|
990
|
+
font-weight: 500;
|
|
991
|
+
color: var(--color-text-muted);
|
|
992
|
+
font-family: var(--font-sans);
|
|
890
993
|
display: inline-flex;
|
|
891
994
|
align-items: center;
|
|
892
995
|
white-space: nowrap;
|
|
996
|
+
flex: none;
|
|
893
997
|
}
|
|
894
998
|
|
|
895
999
|
// ── Status badge ──
|
|
@@ -1024,6 +1128,10 @@ wui-select[compact] {
|
|
|
1024
1128
|
.choice-chip:hover {
|
|
1025
1129
|
border-color: color-mix(in srgb, var(--color-primary) 30%, transparent);
|
|
1026
1130
|
}
|
|
1131
|
+
.choice-chip:has(input:focus-visible) {
|
|
1132
|
+
outline: 2px solid var(--color-primary);
|
|
1133
|
+
outline-offset: 2px;
|
|
1134
|
+
}
|
|
1027
1135
|
.choice-chip input {
|
|
1028
1136
|
position: absolute;
|
|
1029
1137
|
opacity: 0;
|
|
@@ -1159,3 +1267,120 @@ wui-otp {
|
|
|
1159
1267
|
width: 38px;
|
|
1160
1268
|
}
|
|
1161
1269
|
}
|
|
1270
|
+
|
|
1271
|
+
// ── Slider (AppSlider / <wui-slider>) ──
|
|
1272
|
+
// Single-thumb and dual-thumb (range) slider. Horizontal track with filled segment,
|
|
1273
|
+
// thumb button(s) (role="slider"), and optional value label. Pointer dragging and
|
|
1274
|
+
// keyboard navigation (arrow keys, Page Up/Down, Home/End). Form-associated for
|
|
1275
|
+
// single/range value submission.
|
|
1276
|
+
.slider {
|
|
1277
|
+
display: flex;
|
|
1278
|
+
align-items: center;
|
|
1279
|
+
gap: 12px;
|
|
1280
|
+
position: relative;
|
|
1281
|
+
user-select: none;
|
|
1282
|
+
height: 32px;
|
|
1283
|
+
min-width: 200px;
|
|
1284
|
+
}
|
|
1285
|
+
.slider-track {
|
|
1286
|
+
flex: 1;
|
|
1287
|
+
position: relative;
|
|
1288
|
+
height: 6px;
|
|
1289
|
+
background-color: var(--color-border);
|
|
1290
|
+
border-radius: 3px;
|
|
1291
|
+
cursor: pointer;
|
|
1292
|
+
}
|
|
1293
|
+
.slider-fill {
|
|
1294
|
+
position: absolute;
|
|
1295
|
+
top: 0;
|
|
1296
|
+
height: 6px;
|
|
1297
|
+
background-color: var(--color-primary);
|
|
1298
|
+
border-radius: 3px;
|
|
1299
|
+
pointer-events: none;
|
|
1300
|
+
}
|
|
1301
|
+
.slider-thumb {
|
|
1302
|
+
position: absolute;
|
|
1303
|
+
top: 50%;
|
|
1304
|
+
width: 20px;
|
|
1305
|
+
height: 20px;
|
|
1306
|
+
margin-top: -10px;
|
|
1307
|
+
margin-left: -10px;
|
|
1308
|
+
padding: 0;
|
|
1309
|
+
appearance: none;
|
|
1310
|
+
-webkit-appearance: none;
|
|
1311
|
+
background-color: var(--color-primary);
|
|
1312
|
+
border: 2px solid var(--color-surface);
|
|
1313
|
+
border-radius: 50%;
|
|
1314
|
+
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
|
|
1315
|
+
cursor: pointer;
|
|
1316
|
+
transition:
|
|
1317
|
+
background-color 0.15s ease,
|
|
1318
|
+
box-shadow 0.15s ease,
|
|
1319
|
+
border-color 0.15s ease;
|
|
1320
|
+
}
|
|
1321
|
+
.slider-thumb:hover:not(:disabled) {
|
|
1322
|
+
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
|
|
1323
|
+
}
|
|
1324
|
+
.slider-thumb:focus-visible {
|
|
1325
|
+
outline: 2px solid var(--color-primary);
|
|
1326
|
+
outline-offset: 4px;
|
|
1327
|
+
}
|
|
1328
|
+
.slider-thumb:disabled,
|
|
1329
|
+
.slider:has([disabled]) .slider-thumb {
|
|
1330
|
+
background-color: var(--color-text-subtle);
|
|
1331
|
+
border-color: var(--color-border);
|
|
1332
|
+
cursor: not-allowed;
|
|
1333
|
+
opacity: 0.6;
|
|
1334
|
+
}
|
|
1335
|
+
.slider-value {
|
|
1336
|
+
display: inline-block;
|
|
1337
|
+
min-width: 60px;
|
|
1338
|
+
text-align: center;
|
|
1339
|
+
font-size: 14px;
|
|
1340
|
+
font-weight: 500;
|
|
1341
|
+
color: var(--color-text);
|
|
1342
|
+
white-space: nowrap;
|
|
1343
|
+
}
|
|
1344
|
+
|
|
1345
|
+
// Size variants
|
|
1346
|
+
.slider-sm {
|
|
1347
|
+
height: 28px;
|
|
1348
|
+
gap: 8px;
|
|
1349
|
+
}
|
|
1350
|
+
.slider-sm .slider-track {
|
|
1351
|
+
height: 4px;
|
|
1352
|
+
}
|
|
1353
|
+
.slider-sm .slider-fill {
|
|
1354
|
+
height: 4px;
|
|
1355
|
+
}
|
|
1356
|
+
.slider-sm .slider-thumb {
|
|
1357
|
+
width: 16px;
|
|
1358
|
+
height: 16px;
|
|
1359
|
+
margin-top: -8px;
|
|
1360
|
+
margin-left: -8px;
|
|
1361
|
+
}
|
|
1362
|
+
.slider-sm .slider-value {
|
|
1363
|
+
font-size: 12px;
|
|
1364
|
+
min-width: 50px;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
.slider-lg {
|
|
1368
|
+
height: 36px;
|
|
1369
|
+
gap: 16px;
|
|
1370
|
+
}
|
|
1371
|
+
.slider-lg .slider-track {
|
|
1372
|
+
height: 8px;
|
|
1373
|
+
}
|
|
1374
|
+
.slider-lg .slider-fill {
|
|
1375
|
+
height: 8px;
|
|
1376
|
+
}
|
|
1377
|
+
.slider-lg .slider-thumb {
|
|
1378
|
+
width: 24px;
|
|
1379
|
+
height: 24px;
|
|
1380
|
+
margin-top: -12px;
|
|
1381
|
+
margin-left: -12px;
|
|
1382
|
+
}
|
|
1383
|
+
.slider-lg .slider-value {
|
|
1384
|
+
font-size: 15px;
|
|
1385
|
+
min-width: 70px;
|
|
1386
|
+
}
|
package/scss/wui/_data.scss
CHANGED
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
padding: 0 12px;
|
|
256
256
|
background: var(--color-bg-muted);
|
|
257
257
|
border-bottom: none;
|
|
258
|
-
font-family:
|
|
258
|
+
font-family: var(--font-sans);
|
|
259
259
|
font-size: 12px;
|
|
260
260
|
font-weight: 500;
|
|
261
261
|
line-height: 17px;
|
|
@@ -279,7 +279,7 @@
|
|
|
279
279
|
height: 54px;
|
|
280
280
|
padding: 12px;
|
|
281
281
|
border-bottom: 0.5px solid var(--color-border);
|
|
282
|
-
font-family:
|
|
282
|
+
font-family: var(--font-sans);
|
|
283
283
|
font-size: 12px;
|
|
284
284
|
font-weight: 500;
|
|
285
285
|
line-height: 15px;
|
|
@@ -361,17 +361,6 @@
|
|
|
361
361
|
gap: 6px;
|
|
362
362
|
}
|
|
363
363
|
|
|
364
|
-
// Ledger tables: 20px edge padding so header labels + first/last cells align
|
|
365
|
-
// with the card edge — shared across every .table-ledger surface.
|
|
366
|
-
.table-ledger thead th:first-child,
|
|
367
|
-
.table-ledger tbody td:first-child {
|
|
368
|
-
padding-left: 20px;
|
|
369
|
-
}
|
|
370
|
-
.table-ledger thead th:last-child,
|
|
371
|
-
.table-ledger tbody td:last-child {
|
|
372
|
-
padding-right: 20px;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
364
|
// Pagination footer — rows-per-page + range + prev/next, sits flush under a
|
|
376
365
|
// table.
|
|
377
366
|
.table-pagination {
|
|
@@ -486,6 +475,30 @@
|
|
|
486
475
|
user-select: none;
|
|
487
476
|
}
|
|
488
477
|
|
|
478
|
+
// ── Standalone pagination (AppPagination) ──
|
|
479
|
+
// Bootstrap's .pagination is already styled; these rules refine it for the common case
|
|
480
|
+
// of a nav wrapper and ellipsis representation.
|
|
481
|
+
.pagination-nav {
|
|
482
|
+
display: flex;
|
|
483
|
+
align-items: center;
|
|
484
|
+
justify-content: center;
|
|
485
|
+
}
|
|
486
|
+
.pagination-md {
|
|
487
|
+
// Default Bootstrap pagination size (no-op, but explicit for parallelism with sm)
|
|
488
|
+
}
|
|
489
|
+
.pagination-sm .page-link {
|
|
490
|
+
padding: 0.25rem 0.5rem;
|
|
491
|
+
font-size: 12px;
|
|
492
|
+
}
|
|
493
|
+
.page-ellipsis {
|
|
494
|
+
display: grid;
|
|
495
|
+
place-items: center;
|
|
496
|
+
min-width: 24px;
|
|
497
|
+
color: var(--color-text-subtle);
|
|
498
|
+
font-size: 13px;
|
|
499
|
+
user-select: none;
|
|
500
|
+
}
|
|
501
|
+
|
|
489
502
|
// Horizontal scroll guard + flush-fit inside a card. Wrapping the table here
|
|
490
503
|
// also stops `.card > .table` header-corner rounding from applying mid-card.
|
|
491
504
|
.table-wrap {
|
package/scss/wui/_display.scss
CHANGED
|
@@ -260,6 +260,92 @@ a.info-row:hover .info-value {
|
|
|
260
260
|
text-decoration: underline;
|
|
261
261
|
}
|
|
262
262
|
|
|
263
|
+
// ============================================================================
|
|
264
|
+
// Labeled key-value grid — record details, definitions, attributes.
|
|
265
|
+
// ============================================================================
|
|
266
|
+
.descs {
|
|
267
|
+
display: flex;
|
|
268
|
+
flex-direction: column;
|
|
269
|
+
gap: 0;
|
|
270
|
+
}
|
|
271
|
+
.descs-title {
|
|
272
|
+
font-size: 14px;
|
|
273
|
+
font-weight: 600;
|
|
274
|
+
color: var(--color-text);
|
|
275
|
+
padding: 0 0 12px 0;
|
|
276
|
+
}
|
|
277
|
+
.descs-list {
|
|
278
|
+
display: grid;
|
|
279
|
+
grid-template-columns: repeat(var(--descs-cols, 2), 1fr);
|
|
280
|
+
gap: 0;
|
|
281
|
+
margin: 0;
|
|
282
|
+
padding: 0;
|
|
283
|
+
}
|
|
284
|
+
.descs-item {
|
|
285
|
+
display: contents;
|
|
286
|
+
grid-column: span var(--descs-span, 1);
|
|
287
|
+
}
|
|
288
|
+
.descs-label {
|
|
289
|
+
font-size: 12px;
|
|
290
|
+
font-weight: 600;
|
|
291
|
+
text-transform: uppercase;
|
|
292
|
+
letter-spacing: 0.04em;
|
|
293
|
+
color: var(--color-text-subtle);
|
|
294
|
+
padding: 12px 16px;
|
|
295
|
+
border-bottom: 1px solid var(--color-border);
|
|
296
|
+
margin: 0;
|
|
297
|
+
}
|
|
298
|
+
.descs-value {
|
|
299
|
+
font-size: 14px;
|
|
300
|
+
font-weight: 500;
|
|
301
|
+
color: var(--color-text);
|
|
302
|
+
padding: 12px 16px;
|
|
303
|
+
border-bottom: 1px solid var(--color-border);
|
|
304
|
+
margin: 0;
|
|
305
|
+
word-break: break-word;
|
|
306
|
+
}
|
|
307
|
+
// A blank value reads as a muted "no value", not a broken row.
|
|
308
|
+
.descs-value.is-empty {
|
|
309
|
+
font-weight: 400;
|
|
310
|
+
color: var(--color-text-subtle);
|
|
311
|
+
}
|
|
312
|
+
// Small size variant.
|
|
313
|
+
.descs-sm .descs-label,
|
|
314
|
+
.descs-sm .descs-value {
|
|
315
|
+
font-size: 12px;
|
|
316
|
+
padding: 8px 12px;
|
|
317
|
+
}
|
|
318
|
+
// Bordered variant removes inner dividers (only outer border on cells).
|
|
319
|
+
.descs-bordered .descs-label,
|
|
320
|
+
.descs-bordered .descs-value {
|
|
321
|
+
border-bottom: none;
|
|
322
|
+
border-right: 1px solid var(--color-border);
|
|
323
|
+
}
|
|
324
|
+
.descs-bordered .descs-item:last-child .descs-label,
|
|
325
|
+
.descs-bordered .descs-item:last-child .descs-value {
|
|
326
|
+
border-right: none;
|
|
327
|
+
}
|
|
328
|
+
.descs-bordered .descs-list > :nth-child(2n-1) {
|
|
329
|
+
border-bottom: 1px solid var(--color-border);
|
|
330
|
+
}
|
|
331
|
+
// Column variants — set the grid-template-columns.
|
|
332
|
+
.descs-col-1 .descs-list {
|
|
333
|
+
--descs-cols: 1;
|
|
334
|
+
}
|
|
335
|
+
.descs-col-2 .descs-list {
|
|
336
|
+
--descs-cols: 2;
|
|
337
|
+
}
|
|
338
|
+
.descs-col-3 .descs-list {
|
|
339
|
+
--descs-cols: 3;
|
|
340
|
+
}
|
|
341
|
+
// Media-breakpoint collapse to single column under md.
|
|
342
|
+
@include media-breakpoint-down(sm) {
|
|
343
|
+
.descs-col-2 .descs-list,
|
|
344
|
+
.descs-col-3 .descs-list {
|
|
345
|
+
--descs-cols: 1;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
263
349
|
// ============================================================================
|
|
264
350
|
// Segmented control — 2–4 mutually-exclusive options shown side by side.
|
|
265
351
|
// The theme toggle (light/dark/system) is the canonical use.
|
|
@@ -712,4 +798,77 @@ a.info-row:hover .info-value {
|
|
|
712
798
|
}
|
|
713
799
|
}
|
|
714
800
|
|
|
715
|
-
// ============================================================================
|
|
801
|
+
// ============================================================================
|
|
802
|
+
// Result / outcome screen — post-checkout success, verification done, or error states.
|
|
803
|
+
// Distinct from AppEmptyState (which is a card/section "nothing here yet") — this is
|
|
804
|
+
// a self-contained result panel with a prominent status, heading, and actions.
|
|
805
|
+
// ============================================================================
|
|
806
|
+
.result {
|
|
807
|
+
text-align: center;
|
|
808
|
+
padding: 48px 24px;
|
|
809
|
+
color: var(--color-text-subtle);
|
|
810
|
+
}
|
|
811
|
+
.result-icon {
|
|
812
|
+
width: 64px;
|
|
813
|
+
height: 64px;
|
|
814
|
+
border-radius: var(--radius-lg);
|
|
815
|
+
display: inline-flex;
|
|
816
|
+
align-items: center;
|
|
817
|
+
justify-content: center;
|
|
818
|
+
margin-bottom: 24px;
|
|
819
|
+
}
|
|
820
|
+
.result-code {
|
|
821
|
+
font-size: 72px;
|
|
822
|
+
font-weight: 700;
|
|
823
|
+
line-height: 1;
|
|
824
|
+
margin-bottom: 20px;
|
|
825
|
+
color: var(--color-text-subtle);
|
|
826
|
+
letter-spacing: -0.04em;
|
|
827
|
+
}
|
|
828
|
+
.result-title {
|
|
829
|
+
font-size: 24px;
|
|
830
|
+
font-weight: 700;
|
|
831
|
+
line-height: 1.35;
|
|
832
|
+
color: var(--color-text);
|
|
833
|
+
margin: 0 0 12px 0;
|
|
834
|
+
}
|
|
835
|
+
.result-subtitle {
|
|
836
|
+
font-size: 16px;
|
|
837
|
+
line-height: 1.5;
|
|
838
|
+
color: var(--color-text-muted);
|
|
839
|
+
margin: 0 0 20px 0;
|
|
840
|
+
}
|
|
841
|
+
.result-actions {
|
|
842
|
+
margin-top: 20px;
|
|
843
|
+
display: flex;
|
|
844
|
+
align-items: center;
|
|
845
|
+
justify-content: center;
|
|
846
|
+
flex-wrap: wrap;
|
|
847
|
+
gap: 12px;
|
|
848
|
+
}
|
|
849
|
+
.result-extra {
|
|
850
|
+
margin-top: 24px;
|
|
851
|
+
font-size: 14px;
|
|
852
|
+
line-height: 1.5;
|
|
853
|
+
color: var(--color-text-muted);
|
|
854
|
+
}
|
|
855
|
+
// Tone variants — success/danger/warning/info for icon-driven results, muted for code numerics.
|
|
856
|
+
.result-success .result-icon {
|
|
857
|
+
background: var(--color-success-soft);
|
|
858
|
+
color: var(--color-success-text);
|
|
859
|
+
}
|
|
860
|
+
.result-danger .result-icon {
|
|
861
|
+
background: var(--color-danger-soft);
|
|
862
|
+
color: var(--color-danger-text);
|
|
863
|
+
}
|
|
864
|
+
.result-warning .result-icon {
|
|
865
|
+
background: var(--color-warning-soft);
|
|
866
|
+
color: var(--color-warning-text);
|
|
867
|
+
}
|
|
868
|
+
.result-info .result-icon {
|
|
869
|
+
background: var(--color-info-soft);
|
|
870
|
+
color: var(--color-info-text);
|
|
871
|
+
}
|
|
872
|
+
.result-muted .result-code {
|
|
873
|
+
color: var(--color-text-muted);
|
|
874
|
+
}
|