@dataengineeringformachinelearning/viking-ui 4.0.2 → 4.0.4

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.
Files changed (37) hide show
  1. package/README.md +7 -5
  2. package/dist/README.md +7 -5
  3. package/dist/deml-components.css +23 -0
  4. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs +211 -23
  5. package/dist/fesm2022/dataengineeringformachinelearning-viking-ui.mjs.map +1 -1
  6. package/dist/package.json +7 -1
  7. package/dist/src/web/card/viking-card-wc.ts +2 -1
  8. package/dist/src/web/core/styles.ts +125 -2
  9. package/dist/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  10. package/dist/src/web/suite-header/viking-suite-header-wc.ts +15 -0
  11. package/dist/types/dataengineeringformachinelearning-viking-ui.d.ts +3 -2
  12. package/dist/viking-components.css +425 -31
  13. package/dist/viking-ui-elements.js +180 -42
  14. package/dist/viking-ui.css +1 -1
  15. package/dist/web-components.js +143 -3
  16. package/package.json +7 -1
  17. package/src/index.ts +1 -1
  18. package/src/lib/button/button.scss +23 -0
  19. package/src/lib/card/card.ts +35 -5
  20. package/src/lib/footer/footer.scss +8 -1
  21. package/src/lib/site-drakkar/site-footer.ts +5 -1
  22. package/src/lib/site-drakkar/site-navbar.ts +23 -4
  23. package/src/lib/theme-toggle/theme-toggle.ts +1 -0
  24. package/src/styles/_buttons.scss +92 -7
  25. package/src/styles/_layout-enforcement.scss +66 -3
  26. package/src/styles/components/footer.scss +26 -13
  27. package/src/styles/components/icon-inline.scss +23 -0
  28. package/src/styles/components.scss +276 -9
  29. package/src/styles/static-navbar.scss +110 -36
  30. package/src/styles/surfaces/docs-showcase.scss +64 -1
  31. package/src/styles/surfaces/marketing-landing.scss +247 -6
  32. package/src/styles/surfaces/swagger-ui.scss +92 -1
  33. package/src/styles/viking-ui.scss +2 -0
  34. package/src/web/card/viking-card-wc.ts +2 -1
  35. package/src/web/core/styles.ts +125 -2
  36. package/src/web/search-palette/viking-search-palette-wc.ts +1 -0
  37. package/src/web/suite-header/viking-suite-header-wc.ts +15 -0
@@ -1008,7 +1008,7 @@ button.viking-btn {
1008
1008
  gap: var(--viking-space-1);
1009
1009
  min-height: var(--viking-control-height);
1010
1010
  padding: 0 var(--viking-control-padding-x);
1011
- border-radius: var(--viking-radius);
1011
+ border-radius: var(--viking-radius-lg);
1012
1012
  border: 1px solid transparent;
1013
1013
  cursor: pointer;
1014
1014
  text-decoration: none;
@@ -1017,8 +1017,12 @@ button.viking-btn {
1017
1017
  min-width: var(--viking-btn-min-width, 120px);
1018
1018
  white-space: nowrap;
1019
1019
  position: relative;
1020
+ background-clip: padding-box;
1021
+ isolation: isolate;
1020
1022
  user-select: none;
1021
1023
  -webkit-tap-highlight-color: transparent;
1024
+ overflow: hidden;
1025
+ box-shadow: var(--viking-shadow-sm);
1022
1026
  }
1023
1027
  .viking-btn:focus-visible,
1024
1028
  a.viking-btn:focus-visible,
@@ -1027,6 +1031,30 @@ button.viking-btn:focus-visible {
1027
1031
  outline-offset: var(--viking-ring-offset);
1028
1032
  z-index: 1;
1029
1033
  }
1034
+ .viking-btn::before,
1035
+ a.viking-btn::before,
1036
+ button.viking-btn::before {
1037
+ content: "";
1038
+ position: absolute;
1039
+ inset: 1px 1px auto 1px;
1040
+ height: 1px;
1041
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1042
+ pointer-events: none;
1043
+ opacity: 0.82;
1044
+ transition: var(--viking-transition-interactive);
1045
+ }
1046
+ .viking-btn::after,
1047
+ a.viking-btn::after,
1048
+ button.viking-btn::after {
1049
+ content: "";
1050
+ position: absolute;
1051
+ inset: auto 0 0 0;
1052
+ height: 1px;
1053
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1054
+ pointer-events: none;
1055
+ opacity: 0.45;
1056
+ transition: var(--viking-transition-interactive);
1057
+ }
1030
1058
  .viking-btn:disabled, .viking-btn[aria-busy=true],
1031
1059
  a.viking-btn:disabled,
1032
1060
  a.viking-btn[aria-busy=true],
@@ -1037,19 +1065,44 @@ button.viking-btn[aria-busy=true] {
1037
1065
  transform: none !important;
1038
1066
  box-shadow: none !important;
1039
1067
  }
1040
- .viking-btn[aria-busy=true] .viking-btn-label,
1068
+ .viking-btn[aria-busy=true]::before, .viking-btn[aria-busy=true] .viking-btn-label,
1069
+ a.viking-btn[aria-busy=true]::before,
1041
1070
  a.viking-btn[aria-busy=true] .viking-btn-label,
1071
+ button.viking-btn[aria-busy=true]::before,
1042
1072
  button.viking-btn[aria-busy=true] .viking-btn-label {
1043
1073
  opacity: 0.85;
1074
+ transform: translateY(1px);
1044
1075
  }
1045
1076
  .viking-btn viking-icon,
1046
1077
  .viking-btn .viking-icon,
1078
+ .viking-btn [data-viking-icon],
1047
1079
  a.viking-btn viking-icon,
1048
1080
  a.viking-btn .viking-icon,
1081
+ a.viking-btn [data-viking-icon],
1049
1082
  button.viking-btn viking-icon,
1050
- button.viking-btn .viking-icon {
1083
+ button.viking-btn .viking-icon,
1084
+ button.viking-btn [data-viking-icon] {
1051
1085
  flex-shrink: 0;
1086
+ display: inline-flex;
1087
+ align-items: center;
1088
+ justify-content: center;
1089
+ width: var(--viking-icon-size-md);
1090
+ height: var(--viking-icon-size-md);
1091
+ line-height: 1;
1052
1092
  pointer-events: none;
1093
+ flex: 0 0 auto;
1094
+ }
1095
+ .viking-btn .viking-btn-label,
1096
+ a.viking-btn .viking-btn-label,
1097
+ button.viking-btn .viking-btn-label {
1098
+ display: inline-flex;
1099
+ align-items: center;
1100
+ gap: var(--viking-space-1);
1101
+ line-height: 1.2;
1102
+ min-width: 0;
1103
+ justify-content: center;
1104
+ text-align: center;
1105
+ white-space: nowrap;
1053
1106
  }
1054
1107
 
1055
1108
  .viking-btn-primary,
@@ -1066,7 +1119,7 @@ button.viking-btn-primary {
1066
1119
  gap: var(--viking-space-1);
1067
1120
  min-height: var(--viking-control-height);
1068
1121
  padding: 0 var(--viking-control-padding-x);
1069
- border-radius: var(--viking-radius);
1122
+ border-radius: var(--viking-radius-lg);
1070
1123
  border: 1px solid transparent;
1071
1124
  cursor: pointer;
1072
1125
  text-decoration: none;
@@ -1075,8 +1128,12 @@ button.viking-btn-primary {
1075
1128
  min-width: var(--viking-btn-min-width, 120px);
1076
1129
  white-space: nowrap;
1077
1130
  position: relative;
1131
+ background-clip: padding-box;
1132
+ isolation: isolate;
1078
1133
  user-select: none;
1079
1134
  -webkit-tap-highlight-color: transparent;
1135
+ overflow: hidden;
1136
+ box-shadow: var(--viking-shadow-sm);
1080
1137
  }
1081
1138
  .viking-btn-primary:focus-visible,
1082
1139
  a.viking-btn-primary:focus-visible,
@@ -1085,6 +1142,30 @@ button.viking-btn-primary:focus-visible {
1085
1142
  outline-offset: var(--viking-ring-offset);
1086
1143
  z-index: 1;
1087
1144
  }
1145
+ .viking-btn-primary::before,
1146
+ a.viking-btn-primary::before,
1147
+ button.viking-btn-primary::before {
1148
+ content: "";
1149
+ position: absolute;
1150
+ inset: 1px 1px auto 1px;
1151
+ height: 1px;
1152
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1153
+ pointer-events: none;
1154
+ opacity: 0.82;
1155
+ transition: var(--viking-transition-interactive);
1156
+ }
1157
+ .viking-btn-primary::after,
1158
+ a.viking-btn-primary::after,
1159
+ button.viking-btn-primary::after {
1160
+ content: "";
1161
+ position: absolute;
1162
+ inset: auto 0 0 0;
1163
+ height: 1px;
1164
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1165
+ pointer-events: none;
1166
+ opacity: 0.45;
1167
+ transition: var(--viking-transition-interactive);
1168
+ }
1088
1169
  .viking-btn-primary:disabled, .viking-btn-primary[aria-busy=true],
1089
1170
  a.viking-btn-primary:disabled,
1090
1171
  a.viking-btn-primary[aria-busy=true],
@@ -1095,19 +1176,44 @@ button.viking-btn-primary[aria-busy=true] {
1095
1176
  transform: none !important;
1096
1177
  box-shadow: none !important;
1097
1178
  }
1098
- .viking-btn-primary[aria-busy=true] .viking-btn-label,
1179
+ .viking-btn-primary[aria-busy=true]::before, .viking-btn-primary[aria-busy=true] .viking-btn-label,
1180
+ a.viking-btn-primary[aria-busy=true]::before,
1099
1181
  a.viking-btn-primary[aria-busy=true] .viking-btn-label,
1182
+ button.viking-btn-primary[aria-busy=true]::before,
1100
1183
  button.viking-btn-primary[aria-busy=true] .viking-btn-label {
1101
1184
  opacity: 0.85;
1185
+ transform: translateY(1px);
1102
1186
  }
1103
1187
  .viking-btn-primary viking-icon,
1104
1188
  .viking-btn-primary .viking-icon,
1189
+ .viking-btn-primary [data-viking-icon],
1105
1190
  a.viking-btn-primary viking-icon,
1106
1191
  a.viking-btn-primary .viking-icon,
1192
+ a.viking-btn-primary [data-viking-icon],
1107
1193
  button.viking-btn-primary viking-icon,
1108
- button.viking-btn-primary .viking-icon {
1194
+ button.viking-btn-primary .viking-icon,
1195
+ button.viking-btn-primary [data-viking-icon] {
1109
1196
  flex-shrink: 0;
1197
+ display: inline-flex;
1198
+ align-items: center;
1199
+ justify-content: center;
1200
+ width: var(--viking-icon-size-md);
1201
+ height: var(--viking-icon-size-md);
1202
+ line-height: 1;
1110
1203
  pointer-events: none;
1204
+ flex: 0 0 auto;
1205
+ }
1206
+ .viking-btn-primary .viking-btn-label,
1207
+ a.viking-btn-primary .viking-btn-label,
1208
+ button.viking-btn-primary .viking-btn-label {
1209
+ display: inline-flex;
1210
+ align-items: center;
1211
+ gap: var(--viking-space-1);
1212
+ line-height: 1.2;
1213
+ min-width: 0;
1214
+ justify-content: center;
1215
+ text-align: center;
1216
+ white-space: nowrap;
1111
1217
  }
1112
1218
  .viking-btn-primary,
1113
1219
  a.viking-btn-primary,
@@ -1130,7 +1236,8 @@ button.viking-btn-primary:hover:not(:disabled):not([aria-busy=true]) {
1130
1236
  a.viking-btn-primary:active:not(:disabled):not([aria-busy=true]),
1131
1237
  button.viking-btn-primary:active:not(:disabled):not([aria-busy=true]) {
1132
1238
  transform: translateY(0) scale(var(--viking-state-active-scale));
1133
- box-shadow: var(--viking-shadow-sm);
1239
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1240
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1134
1241
  }
1135
1242
 
1136
1243
  .viking-btn-secondary,
@@ -1147,7 +1254,7 @@ button.viking-btn-secondary {
1147
1254
  gap: var(--viking-space-1);
1148
1255
  min-height: var(--viking-control-height);
1149
1256
  padding: 0 var(--viking-control-padding-x);
1150
- border-radius: var(--viking-radius);
1257
+ border-radius: var(--viking-radius-lg);
1151
1258
  border: 1px solid transparent;
1152
1259
  cursor: pointer;
1153
1260
  text-decoration: none;
@@ -1156,8 +1263,12 @@ button.viking-btn-secondary {
1156
1263
  min-width: var(--viking-btn-min-width, 120px);
1157
1264
  white-space: nowrap;
1158
1265
  position: relative;
1266
+ background-clip: padding-box;
1267
+ isolation: isolate;
1159
1268
  user-select: none;
1160
1269
  -webkit-tap-highlight-color: transparent;
1270
+ overflow: hidden;
1271
+ box-shadow: var(--viking-shadow-sm);
1161
1272
  }
1162
1273
  .viking-btn-secondary:focus-visible,
1163
1274
  a.viking-btn-secondary:focus-visible,
@@ -1166,6 +1277,30 @@ button.viking-btn-secondary:focus-visible {
1166
1277
  outline-offset: var(--viking-ring-offset);
1167
1278
  z-index: 1;
1168
1279
  }
1280
+ .viking-btn-secondary::before,
1281
+ a.viking-btn-secondary::before,
1282
+ button.viking-btn-secondary::before {
1283
+ content: "";
1284
+ position: absolute;
1285
+ inset: 1px 1px auto 1px;
1286
+ height: 1px;
1287
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1288
+ pointer-events: none;
1289
+ opacity: 0.82;
1290
+ transition: var(--viking-transition-interactive);
1291
+ }
1292
+ .viking-btn-secondary::after,
1293
+ a.viking-btn-secondary::after,
1294
+ button.viking-btn-secondary::after {
1295
+ content: "";
1296
+ position: absolute;
1297
+ inset: auto 0 0 0;
1298
+ height: 1px;
1299
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1300
+ pointer-events: none;
1301
+ opacity: 0.45;
1302
+ transition: var(--viking-transition-interactive);
1303
+ }
1169
1304
  .viking-btn-secondary:disabled, .viking-btn-secondary[aria-busy=true],
1170
1305
  a.viking-btn-secondary:disabled,
1171
1306
  a.viking-btn-secondary[aria-busy=true],
@@ -1176,19 +1311,44 @@ button.viking-btn-secondary[aria-busy=true] {
1176
1311
  transform: none !important;
1177
1312
  box-shadow: none !important;
1178
1313
  }
1179
- .viking-btn-secondary[aria-busy=true] .viking-btn-label,
1314
+ .viking-btn-secondary[aria-busy=true]::before, .viking-btn-secondary[aria-busy=true] .viking-btn-label,
1315
+ a.viking-btn-secondary[aria-busy=true]::before,
1180
1316
  a.viking-btn-secondary[aria-busy=true] .viking-btn-label,
1317
+ button.viking-btn-secondary[aria-busy=true]::before,
1181
1318
  button.viking-btn-secondary[aria-busy=true] .viking-btn-label {
1182
1319
  opacity: 0.85;
1320
+ transform: translateY(1px);
1183
1321
  }
1184
1322
  .viking-btn-secondary viking-icon,
1185
1323
  .viking-btn-secondary .viking-icon,
1324
+ .viking-btn-secondary [data-viking-icon],
1186
1325
  a.viking-btn-secondary viking-icon,
1187
1326
  a.viking-btn-secondary .viking-icon,
1327
+ a.viking-btn-secondary [data-viking-icon],
1188
1328
  button.viking-btn-secondary viking-icon,
1189
- button.viking-btn-secondary .viking-icon {
1329
+ button.viking-btn-secondary .viking-icon,
1330
+ button.viking-btn-secondary [data-viking-icon] {
1190
1331
  flex-shrink: 0;
1332
+ display: inline-flex;
1333
+ align-items: center;
1334
+ justify-content: center;
1335
+ width: var(--viking-icon-size-md);
1336
+ height: var(--viking-icon-size-md);
1337
+ line-height: 1;
1191
1338
  pointer-events: none;
1339
+ flex: 0 0 auto;
1340
+ }
1341
+ .viking-btn-secondary .viking-btn-label,
1342
+ a.viking-btn-secondary .viking-btn-label,
1343
+ button.viking-btn-secondary .viking-btn-label {
1344
+ display: inline-flex;
1345
+ align-items: center;
1346
+ gap: var(--viking-space-1);
1347
+ line-height: 1.2;
1348
+ min-width: 0;
1349
+ justify-content: center;
1350
+ text-align: center;
1351
+ white-space: nowrap;
1192
1352
  }
1193
1353
  .viking-btn-secondary,
1194
1354
  a.viking-btn-secondary,
@@ -1211,7 +1371,8 @@ button.viking-btn-secondary:hover:not(:disabled):not([aria-busy=true]) {
1211
1371
  a.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]),
1212
1372
  button.viking-btn-secondary:active:not(:disabled):not([aria-busy=true]) {
1213
1373
  transform: translateY(0) scale(var(--viking-state-active-scale));
1214
- box-shadow: var(--viking-shadow-sm);
1374
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1375
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1215
1376
  }
1216
1377
 
1217
1378
  .viking-btn-outline,
@@ -1228,7 +1389,7 @@ button.viking-btn-outline {
1228
1389
  gap: var(--viking-space-1);
1229
1390
  min-height: var(--viking-control-height);
1230
1391
  padding: 0 var(--viking-control-padding-x);
1231
- border-radius: var(--viking-radius);
1392
+ border-radius: var(--viking-radius-lg);
1232
1393
  border: 1px solid transparent;
1233
1394
  cursor: pointer;
1234
1395
  text-decoration: none;
@@ -1237,8 +1398,12 @@ button.viking-btn-outline {
1237
1398
  min-width: var(--viking-btn-min-width, 120px);
1238
1399
  white-space: nowrap;
1239
1400
  position: relative;
1401
+ background-clip: padding-box;
1402
+ isolation: isolate;
1240
1403
  user-select: none;
1241
1404
  -webkit-tap-highlight-color: transparent;
1405
+ overflow: hidden;
1406
+ box-shadow: var(--viking-shadow-sm);
1242
1407
  }
1243
1408
  .viking-btn-outline:focus-visible,
1244
1409
  a.viking-btn-outline:focus-visible,
@@ -1247,6 +1412,30 @@ button.viking-btn-outline:focus-visible {
1247
1412
  outline-offset: var(--viking-ring-offset);
1248
1413
  z-index: 1;
1249
1414
  }
1415
+ .viking-btn-outline::before,
1416
+ a.viking-btn-outline::before,
1417
+ button.viking-btn-outline::before {
1418
+ content: "";
1419
+ position: absolute;
1420
+ inset: 1px 1px auto 1px;
1421
+ height: 1px;
1422
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1423
+ pointer-events: none;
1424
+ opacity: 0.82;
1425
+ transition: var(--viking-transition-interactive);
1426
+ }
1427
+ .viking-btn-outline::after,
1428
+ a.viking-btn-outline::after,
1429
+ button.viking-btn-outline::after {
1430
+ content: "";
1431
+ position: absolute;
1432
+ inset: auto 0 0 0;
1433
+ height: 1px;
1434
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1435
+ pointer-events: none;
1436
+ opacity: 0.45;
1437
+ transition: var(--viking-transition-interactive);
1438
+ }
1250
1439
  .viking-btn-outline:disabled, .viking-btn-outline[aria-busy=true],
1251
1440
  a.viking-btn-outline:disabled,
1252
1441
  a.viking-btn-outline[aria-busy=true],
@@ -1257,19 +1446,44 @@ button.viking-btn-outline[aria-busy=true] {
1257
1446
  transform: none !important;
1258
1447
  box-shadow: none !important;
1259
1448
  }
1260
- .viking-btn-outline[aria-busy=true] .viking-btn-label,
1449
+ .viking-btn-outline[aria-busy=true]::before, .viking-btn-outline[aria-busy=true] .viking-btn-label,
1450
+ a.viking-btn-outline[aria-busy=true]::before,
1261
1451
  a.viking-btn-outline[aria-busy=true] .viking-btn-label,
1452
+ button.viking-btn-outline[aria-busy=true]::before,
1262
1453
  button.viking-btn-outline[aria-busy=true] .viking-btn-label {
1263
1454
  opacity: 0.85;
1455
+ transform: translateY(1px);
1264
1456
  }
1265
1457
  .viking-btn-outline viking-icon,
1266
1458
  .viking-btn-outline .viking-icon,
1459
+ .viking-btn-outline [data-viking-icon],
1267
1460
  a.viking-btn-outline viking-icon,
1268
1461
  a.viking-btn-outline .viking-icon,
1462
+ a.viking-btn-outline [data-viking-icon],
1269
1463
  button.viking-btn-outline viking-icon,
1270
- button.viking-btn-outline .viking-icon {
1464
+ button.viking-btn-outline .viking-icon,
1465
+ button.viking-btn-outline [data-viking-icon] {
1271
1466
  flex-shrink: 0;
1467
+ display: inline-flex;
1468
+ align-items: center;
1469
+ justify-content: center;
1470
+ width: var(--viking-icon-size-md);
1471
+ height: var(--viking-icon-size-md);
1472
+ line-height: 1;
1272
1473
  pointer-events: none;
1474
+ flex: 0 0 auto;
1475
+ }
1476
+ .viking-btn-outline .viking-btn-label,
1477
+ a.viking-btn-outline .viking-btn-label,
1478
+ button.viking-btn-outline .viking-btn-label {
1479
+ display: inline-flex;
1480
+ align-items: center;
1481
+ gap: var(--viking-space-1);
1482
+ line-height: 1.2;
1483
+ min-width: 0;
1484
+ justify-content: center;
1485
+ text-align: center;
1486
+ white-space: nowrap;
1273
1487
  }
1274
1488
  .viking-btn-outline,
1275
1489
  a.viking-btn-outline,
@@ -1292,7 +1506,8 @@ button.viking-btn-outline:hover:not(:disabled):not([aria-busy=true]) {
1292
1506
  a.viking-btn-outline:active:not(:disabled):not([aria-busy=true]),
1293
1507
  button.viking-btn-outline:active:not(:disabled):not([aria-busy=true]) {
1294
1508
  transform: translateY(0) scale(var(--viking-state-active-scale));
1295
- box-shadow: var(--viking-shadow-sm);
1509
+ border-color: var(--viking-border-strong);
1510
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1296
1511
  }
1297
1512
 
1298
1513
  .viking-btn-danger,
@@ -1309,7 +1524,7 @@ button.viking-btn-danger {
1309
1524
  gap: var(--viking-space-1);
1310
1525
  min-height: var(--viking-control-height);
1311
1526
  padding: 0 var(--viking-control-padding-x);
1312
- border-radius: var(--viking-radius);
1527
+ border-radius: var(--viking-radius-lg);
1313
1528
  border: 1px solid transparent;
1314
1529
  cursor: pointer;
1315
1530
  text-decoration: none;
@@ -1318,8 +1533,12 @@ button.viking-btn-danger {
1318
1533
  min-width: var(--viking-btn-min-width, 120px);
1319
1534
  white-space: nowrap;
1320
1535
  position: relative;
1536
+ background-clip: padding-box;
1537
+ isolation: isolate;
1321
1538
  user-select: none;
1322
1539
  -webkit-tap-highlight-color: transparent;
1540
+ overflow: hidden;
1541
+ box-shadow: var(--viking-shadow-sm);
1323
1542
  }
1324
1543
  .viking-btn-danger:focus-visible,
1325
1544
  a.viking-btn-danger:focus-visible,
@@ -1328,6 +1547,30 @@ button.viking-btn-danger:focus-visible {
1328
1547
  outline-offset: var(--viking-ring-offset);
1329
1548
  z-index: 1;
1330
1549
  }
1550
+ .viking-btn-danger::before,
1551
+ a.viking-btn-danger::before,
1552
+ button.viking-btn-danger::before {
1553
+ content: "";
1554
+ position: absolute;
1555
+ inset: 1px 1px auto 1px;
1556
+ height: 1px;
1557
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1558
+ pointer-events: none;
1559
+ opacity: 0.82;
1560
+ transition: var(--viking-transition-interactive);
1561
+ }
1562
+ .viking-btn-danger::after,
1563
+ a.viking-btn-danger::after,
1564
+ button.viking-btn-danger::after {
1565
+ content: "";
1566
+ position: absolute;
1567
+ inset: auto 0 0 0;
1568
+ height: 1px;
1569
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1570
+ pointer-events: none;
1571
+ opacity: 0.45;
1572
+ transition: var(--viking-transition-interactive);
1573
+ }
1331
1574
  .viking-btn-danger:disabled, .viking-btn-danger[aria-busy=true],
1332
1575
  a.viking-btn-danger:disabled,
1333
1576
  a.viking-btn-danger[aria-busy=true],
@@ -1338,19 +1581,44 @@ button.viking-btn-danger[aria-busy=true] {
1338
1581
  transform: none !important;
1339
1582
  box-shadow: none !important;
1340
1583
  }
1341
- .viking-btn-danger[aria-busy=true] .viking-btn-label,
1584
+ .viking-btn-danger[aria-busy=true]::before, .viking-btn-danger[aria-busy=true] .viking-btn-label,
1585
+ a.viking-btn-danger[aria-busy=true]::before,
1342
1586
  a.viking-btn-danger[aria-busy=true] .viking-btn-label,
1587
+ button.viking-btn-danger[aria-busy=true]::before,
1343
1588
  button.viking-btn-danger[aria-busy=true] .viking-btn-label {
1344
1589
  opacity: 0.85;
1590
+ transform: translateY(1px);
1345
1591
  }
1346
1592
  .viking-btn-danger viking-icon,
1347
1593
  .viking-btn-danger .viking-icon,
1594
+ .viking-btn-danger [data-viking-icon],
1348
1595
  a.viking-btn-danger viking-icon,
1349
1596
  a.viking-btn-danger .viking-icon,
1597
+ a.viking-btn-danger [data-viking-icon],
1350
1598
  button.viking-btn-danger viking-icon,
1351
- button.viking-btn-danger .viking-icon {
1599
+ button.viking-btn-danger .viking-icon,
1600
+ button.viking-btn-danger [data-viking-icon] {
1352
1601
  flex-shrink: 0;
1602
+ display: inline-flex;
1603
+ align-items: center;
1604
+ justify-content: center;
1605
+ width: var(--viking-icon-size-md);
1606
+ height: var(--viking-icon-size-md);
1607
+ line-height: 1;
1353
1608
  pointer-events: none;
1609
+ flex: 0 0 auto;
1610
+ }
1611
+ .viking-btn-danger .viking-btn-label,
1612
+ a.viking-btn-danger .viking-btn-label,
1613
+ button.viking-btn-danger .viking-btn-label {
1614
+ display: inline-flex;
1615
+ align-items: center;
1616
+ gap: var(--viking-space-1);
1617
+ line-height: 1.2;
1618
+ min-width: 0;
1619
+ justify-content: center;
1620
+ text-align: center;
1621
+ white-space: nowrap;
1354
1622
  }
1355
1623
  .viking-btn-danger,
1356
1624
  a.viking-btn-danger,
@@ -1373,6 +1641,8 @@ button.viking-btn-danger:hover:not(:disabled):not([aria-busy=true]) {
1373
1641
  a.viking-btn-danger:active:not(:disabled):not([aria-busy=true]),
1374
1642
  button.viking-btn-danger:active:not(:disabled):not([aria-busy=true]) {
1375
1643
  transform: translateY(0) scale(var(--viking-state-active-scale));
1644
+ border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
1645
+ background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
1376
1646
  box-shadow: var(--viking-shadow-sm);
1377
1647
  }
1378
1648
 
@@ -1390,7 +1660,7 @@ button.viking-btn-ghost {
1390
1660
  gap: var(--viking-space-1);
1391
1661
  min-height: var(--viking-control-height);
1392
1662
  padding: 0 var(--viking-control-padding-x);
1393
- border-radius: var(--viking-radius);
1663
+ border-radius: var(--viking-radius-lg);
1394
1664
  border: 1px solid transparent;
1395
1665
  cursor: pointer;
1396
1666
  text-decoration: none;
@@ -1399,8 +1669,12 @@ button.viking-btn-ghost {
1399
1669
  min-width: var(--viking-btn-min-width, 120px);
1400
1670
  white-space: nowrap;
1401
1671
  position: relative;
1672
+ background-clip: padding-box;
1673
+ isolation: isolate;
1402
1674
  user-select: none;
1403
1675
  -webkit-tap-highlight-color: transparent;
1676
+ overflow: hidden;
1677
+ box-shadow: var(--viking-shadow-sm);
1404
1678
  }
1405
1679
  .viking-btn-ghost:focus-visible,
1406
1680
  a.viking-btn-ghost:focus-visible,
@@ -1409,6 +1683,30 @@ button.viking-btn-ghost:focus-visible {
1409
1683
  outline-offset: var(--viking-ring-offset);
1410
1684
  z-index: 1;
1411
1685
  }
1686
+ .viking-btn-ghost::before,
1687
+ a.viking-btn-ghost::before,
1688
+ button.viking-btn-ghost::before {
1689
+ content: "";
1690
+ position: absolute;
1691
+ inset: 1px 1px auto 1px;
1692
+ height: 1px;
1693
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1694
+ pointer-events: none;
1695
+ opacity: 0.82;
1696
+ transition: var(--viking-transition-interactive);
1697
+ }
1698
+ .viking-btn-ghost::after,
1699
+ a.viking-btn-ghost::after,
1700
+ button.viking-btn-ghost::after {
1701
+ content: "";
1702
+ position: absolute;
1703
+ inset: auto 0 0 0;
1704
+ height: 1px;
1705
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1706
+ pointer-events: none;
1707
+ opacity: 0.45;
1708
+ transition: var(--viking-transition-interactive);
1709
+ }
1412
1710
  .viking-btn-ghost:disabled, .viking-btn-ghost[aria-busy=true],
1413
1711
  a.viking-btn-ghost:disabled,
1414
1712
  a.viking-btn-ghost[aria-busy=true],
@@ -1419,19 +1717,44 @@ button.viking-btn-ghost[aria-busy=true] {
1419
1717
  transform: none !important;
1420
1718
  box-shadow: none !important;
1421
1719
  }
1422
- .viking-btn-ghost[aria-busy=true] .viking-btn-label,
1720
+ .viking-btn-ghost[aria-busy=true]::before, .viking-btn-ghost[aria-busy=true] .viking-btn-label,
1721
+ a.viking-btn-ghost[aria-busy=true]::before,
1423
1722
  a.viking-btn-ghost[aria-busy=true] .viking-btn-label,
1723
+ button.viking-btn-ghost[aria-busy=true]::before,
1424
1724
  button.viking-btn-ghost[aria-busy=true] .viking-btn-label {
1425
1725
  opacity: 0.85;
1726
+ transform: translateY(1px);
1426
1727
  }
1427
1728
  .viking-btn-ghost viking-icon,
1428
1729
  .viking-btn-ghost .viking-icon,
1730
+ .viking-btn-ghost [data-viking-icon],
1429
1731
  a.viking-btn-ghost viking-icon,
1430
1732
  a.viking-btn-ghost .viking-icon,
1733
+ a.viking-btn-ghost [data-viking-icon],
1431
1734
  button.viking-btn-ghost viking-icon,
1432
- button.viking-btn-ghost .viking-icon {
1735
+ button.viking-btn-ghost .viking-icon,
1736
+ button.viking-btn-ghost [data-viking-icon] {
1433
1737
  flex-shrink: 0;
1738
+ display: inline-flex;
1739
+ align-items: center;
1740
+ justify-content: center;
1741
+ width: var(--viking-icon-size-md);
1742
+ height: var(--viking-icon-size-md);
1743
+ line-height: 1;
1434
1744
  pointer-events: none;
1745
+ flex: 0 0 auto;
1746
+ }
1747
+ .viking-btn-ghost .viking-btn-label,
1748
+ a.viking-btn-ghost .viking-btn-label,
1749
+ button.viking-btn-ghost .viking-btn-label {
1750
+ display: inline-flex;
1751
+ align-items: center;
1752
+ gap: var(--viking-space-1);
1753
+ line-height: 1.2;
1754
+ min-width: 0;
1755
+ justify-content: center;
1756
+ text-align: center;
1757
+ white-space: nowrap;
1435
1758
  }
1436
1759
  .viking-btn-ghost,
1437
1760
  a.viking-btn-ghost,
@@ -1451,7 +1774,9 @@ button.viking-btn-ghost:hover:not(:disabled):not([aria-busy=true]) {
1451
1774
  .viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1452
1775
  a.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]),
1453
1776
  button.viking-btn-ghost:active:not(:disabled):not([aria-busy=true]) {
1454
- transform: scale(var(--viking-state-active-scale));
1777
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1778
+ background: var(--viking-accent-soft);
1779
+ color: var(--viking-accent-strong);
1455
1780
  }
1456
1781
 
1457
1782
  .viking-btn-subtle,
@@ -1468,7 +1793,7 @@ button.viking-btn-subtle {
1468
1793
  gap: var(--viking-space-1);
1469
1794
  min-height: var(--viking-control-height);
1470
1795
  padding: 0 var(--viking-control-padding-x);
1471
- border-radius: var(--viking-radius);
1796
+ border-radius: var(--viking-radius-lg);
1472
1797
  border: 1px solid transparent;
1473
1798
  cursor: pointer;
1474
1799
  text-decoration: none;
@@ -1477,8 +1802,12 @@ button.viking-btn-subtle {
1477
1802
  min-width: var(--viking-btn-min-width, 120px);
1478
1803
  white-space: nowrap;
1479
1804
  position: relative;
1805
+ background-clip: padding-box;
1806
+ isolation: isolate;
1480
1807
  user-select: none;
1481
1808
  -webkit-tap-highlight-color: transparent;
1809
+ overflow: hidden;
1810
+ box-shadow: var(--viking-shadow-sm);
1482
1811
  }
1483
1812
  .viking-btn-subtle:focus-visible,
1484
1813
  a.viking-btn-subtle:focus-visible,
@@ -1487,6 +1816,30 @@ button.viking-btn-subtle:focus-visible {
1487
1816
  outline-offset: var(--viking-ring-offset);
1488
1817
  z-index: 1;
1489
1818
  }
1819
+ .viking-btn-subtle::before,
1820
+ a.viking-btn-subtle::before,
1821
+ button.viking-btn-subtle::before {
1822
+ content: "";
1823
+ position: absolute;
1824
+ inset: 1px 1px auto 1px;
1825
+ height: 1px;
1826
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 45%, transparent), transparent);
1827
+ pointer-events: none;
1828
+ opacity: 0.82;
1829
+ transition: var(--viking-transition-interactive);
1830
+ }
1831
+ .viking-btn-subtle::after,
1832
+ a.viking-btn-subtle::after,
1833
+ button.viking-btn-subtle::after {
1834
+ content: "";
1835
+ position: absolute;
1836
+ inset: auto 0 0 0;
1837
+ height: 1px;
1838
+ background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--viking-metallic-100) 18%, transparent), transparent);
1839
+ pointer-events: none;
1840
+ opacity: 0.45;
1841
+ transition: var(--viking-transition-interactive);
1842
+ }
1490
1843
  .viking-btn-subtle:disabled, .viking-btn-subtle[aria-busy=true],
1491
1844
  a.viking-btn-subtle:disabled,
1492
1845
  a.viking-btn-subtle[aria-busy=true],
@@ -1497,19 +1850,44 @@ button.viking-btn-subtle[aria-busy=true] {
1497
1850
  transform: none !important;
1498
1851
  box-shadow: none !important;
1499
1852
  }
1500
- .viking-btn-subtle[aria-busy=true] .viking-btn-label,
1853
+ .viking-btn-subtle[aria-busy=true]::before, .viking-btn-subtle[aria-busy=true] .viking-btn-label,
1854
+ a.viking-btn-subtle[aria-busy=true]::before,
1501
1855
  a.viking-btn-subtle[aria-busy=true] .viking-btn-label,
1856
+ button.viking-btn-subtle[aria-busy=true]::before,
1502
1857
  button.viking-btn-subtle[aria-busy=true] .viking-btn-label {
1503
1858
  opacity: 0.85;
1859
+ transform: translateY(1px);
1504
1860
  }
1505
1861
  .viking-btn-subtle viking-icon,
1506
1862
  .viking-btn-subtle .viking-icon,
1863
+ .viking-btn-subtle [data-viking-icon],
1507
1864
  a.viking-btn-subtle viking-icon,
1508
1865
  a.viking-btn-subtle .viking-icon,
1866
+ a.viking-btn-subtle [data-viking-icon],
1509
1867
  button.viking-btn-subtle viking-icon,
1510
- button.viking-btn-subtle .viking-icon {
1868
+ button.viking-btn-subtle .viking-icon,
1869
+ button.viking-btn-subtle [data-viking-icon] {
1511
1870
  flex-shrink: 0;
1871
+ display: inline-flex;
1872
+ align-items: center;
1873
+ justify-content: center;
1874
+ width: var(--viking-icon-size-md);
1875
+ height: var(--viking-icon-size-md);
1876
+ line-height: 1;
1512
1877
  pointer-events: none;
1878
+ flex: 0 0 auto;
1879
+ }
1880
+ .viking-btn-subtle .viking-btn-label,
1881
+ a.viking-btn-subtle .viking-btn-label,
1882
+ button.viking-btn-subtle .viking-btn-label {
1883
+ display: inline-flex;
1884
+ align-items: center;
1885
+ gap: var(--viking-space-1);
1886
+ line-height: 1.2;
1887
+ min-width: 0;
1888
+ justify-content: center;
1889
+ text-align: center;
1890
+ white-space: nowrap;
1513
1891
  }
1514
1892
  .viking-btn-subtle,
1515
1893
  a.viking-btn-subtle,
@@ -1530,7 +1908,10 @@ button.viking-btn-subtle:hover:not(:disabled):not([aria-busy=true]) {
1530
1908
  .viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1531
1909
  a.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]),
1532
1910
  button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1533
- transform: scale(var(--viking-state-active-scale));
1911
+ transform: translateY(0) scale(var(--viking-state-active-scale));
1912
+ border-color: var(--viking-border);
1913
+ background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
1914
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
1534
1915
  }
1535
1916
 
1536
1917
  .viking-btn.viking-outline {
@@ -1548,7 +1929,8 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1548
1929
  }
1549
1930
  .viking-btn.viking-outline:active:not(:disabled):not([aria-busy=true]) {
1550
1931
  transform: translateY(0) scale(var(--viking-state-active-scale));
1551
- box-shadow: var(--viking-shadow-sm);
1932
+ border-color: var(--viking-border-strong);
1933
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1552
1934
  }
1553
1935
 
1554
1936
  .viking-btn.viking-primary {
@@ -1566,7 +1948,8 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1566
1948
  }
1567
1949
  .viking-btn.viking-primary:active:not(:disabled):not([aria-busy=true]) {
1568
1950
  transform: translateY(0) scale(var(--viking-state-active-scale));
1569
- box-shadow: var(--viking-shadow-sm);
1951
+ border-color: color-mix(in srgb, var(--viking-accent) 82%, var(--viking-black));
1952
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1570
1953
  }
1571
1954
 
1572
1955
  .viking-btn.viking-secondary {
@@ -1584,7 +1967,8 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1584
1967
  }
1585
1968
  .viking-btn.viking-secondary:active:not(:disabled):not([aria-busy=true]) {
1586
1969
  transform: translateY(0) scale(var(--viking-state-active-scale));
1587
- box-shadow: var(--viking-shadow-sm);
1970
+ border-color: color-mix(in srgb, var(--viking-accent-secondary) 82%, var(--viking-black));
1971
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 28%, transparent), var(--viking-shadow-sm);
1588
1972
  }
1589
1973
 
1590
1974
  .viking-btn.viking-filled {
@@ -1601,6 +1985,9 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1601
1985
  }
1602
1986
  .viking-btn.viking-filled:active:not(:disabled):not([aria-busy=true]) {
1603
1987
  transform: translateY(0) scale(var(--viking-state-active-scale));
1988
+ box-shadow: var(--viking-shadow-sm);
1989
+ border-color: color-mix(in srgb, var(--viking-accent) 20%, var(--viking-border));
1990
+ background: color-mix(in srgb, var(--viking-surface-alt) 84%, var(--viking-accent));
1604
1991
  }
1605
1992
 
1606
1993
  .viking-btn.viking-danger {
@@ -1618,6 +2005,8 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1618
2005
  }
1619
2006
  .viking-btn.viking-danger:active:not(:disabled):not([aria-busy=true]) {
1620
2007
  transform: translateY(0) scale(var(--viking-state-active-scale));
2008
+ border-color: color-mix(in srgb, var(--viking-danger) 72%, var(--viking-black));
2009
+ background: color-mix(in srgb, var(--viking-danger) 84%, var(--viking-black));
1621
2010
  box-shadow: var(--viking-shadow-sm);
1622
2011
  }
1623
2012
 
@@ -1633,7 +2022,9 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1633
2022
  color: var(--viking-accent-strong);
1634
2023
  }
1635
2024
  .viking-btn.viking-ghost:active:not(:disabled):not([aria-busy=true]) {
1636
- transform: scale(var(--viking-state-active-scale));
2025
+ transform: translateY(0) scale(var(--viking-state-active-scale));
2026
+ background: var(--viking-accent-soft);
2027
+ color: var(--viking-accent-strong);
1637
2028
  }
1638
2029
 
1639
2030
  .viking-btn.viking-subtle {
@@ -1649,7 +2040,10 @@ button.viking-btn-subtle:active:not(:disabled):not([aria-busy=true]) {
1649
2040
  border-color: var(--viking-border-strong);
1650
2041
  }
1651
2042
  .viking-btn.viking-subtle:active:not(:disabled):not([aria-busy=true]) {
1652
- transform: scale(var(--viking-state-active-scale));
2043
+ transform: translateY(0) scale(var(--viking-state-active-scale));
2044
+ border-color: var(--viking-border);
2045
+ background: color-mix(in srgb, var(--viking-accent-soft) 70%, var(--viking-surface));
2046
+ box-shadow: inset 0 1px 2px color-mix(in srgb, var(--viking-black) 24%, transparent);
1653
2047
  }
1654
2048
 
1655
2049
  .viking-btn.viking-compact {