@utrecht/component-library-css 1.0.0-alpha.208 → 1.0.0-alpha.209

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/bem.css CHANGED
@@ -342,7 +342,7 @@ ol.utrecht-breadcrumb__list {
342
342
  * Copyright (c) 2021 Robbert Broersma
343
343
  */
344
344
  /* stylelint-disable-next-line block-no-empty */
345
- .utrecht-button {
345
+ .utrecht-button, .utrecht-button-link {
346
346
  background-color: var(--utrecht-button-primary-action-background-color, var(--utrecht-button-background-color));
347
347
  border-color: var(--utrecht-button-border-color, transparent);
348
348
  border-radius: var(--utrecht-button-border-radius);
@@ -380,7 +380,7 @@ ol.utrecht-breadcrumb__list {
380
380
  cursor: var(--utrecht-action-busy-cursor);
381
381
  }
382
382
 
383
- .utrecht-button:disabled,
383
+ .utrecht-button:disabled, .utrecht-button-link:disabled,
384
384
  .utrecht-button--disabled {
385
385
  background-color: var(--utrecht-button-disabled-background-color, var(--utrecht-button-background-color));
386
386
  border-color: var(--utrecht-button-disabled-border-color, var(--utrecht-button-border-color));
@@ -388,14 +388,14 @@ ol.utrecht-breadcrumb__list {
388
388
  cursor: var(--utrecht-action-disabled-cursor);
389
389
  }
390
390
 
391
- .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
391
+ .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
392
392
  .utrecht-button--active {
393
393
  background-color: var(--utrecht-button-active-background-color, var(--utrecht-button-background-color));
394
394
  border-color: var(--utrecht-button-active-border-color, var(--utrecht-button-border-color));
395
395
  color: var(--utrecht-button-active-color, var(--utrecht-button-color));
396
396
  }
397
397
 
398
- .utrecht-button--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
398
+ .utrecht-button--focus-visible, .utrecht-button-link--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
399
399
  /* the pseudo-class for `:focus-visible` is implemented via the mixin */
400
400
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
401
401
  outline-color: var(--utrecht-focus-outline-color, transparent);
@@ -404,7 +404,7 @@ ol.utrecht-breadcrumb__list {
404
404
  outline-width: var(--utrecht-focus-outline-width, 0);
405
405
  }
406
406
 
407
- .utrecht-button--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
407
+ .utrecht-button--focus, .utrecht-button-link--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
408
408
  background-color: var(--utrecht-button-focus-background-color, var(--utrecht-button-background-color));
409
409
  border-color: var(--utrecht-button-focus-border-color, var(--utrecht-button-border-color));
410
410
  color: var(--utrecht-button-focus-color, var(--utrecht-button-color));
@@ -412,14 +412,15 @@ ol.utrecht-breadcrumb__list {
412
412
 
413
413
  /* override the `:focus` selector above */
414
414
  /* stylelint-disable-next-line no-descending-specificity */
415
- .utrecht-button:focus:not(:focus-visible) {
415
+ .utrecht-button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible) {
416
416
  /* undo focus ring */
417
417
  box-shadow: none;
418
418
  outline-style: none;
419
419
  }
420
420
 
421
- .utrecht-button--hover:not(:disabled),
422
- .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
421
+ .utrecht-button--hover:not(:disabled), .utrecht-button-link--hover:not(:disabled),
422
+ .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
423
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
423
424
  background-color: var(--utrecht-button-hover-background-color, var(--utrecht-button-background-color));
424
425
  border-color: var(--utrecht-button-hover-border-color, var(--utrecht-button-border-color));
425
426
  color: var(--utrecht-button-hover-color, var(--utrecht-button-color));
@@ -460,6 +461,112 @@ ol.utrecht-breadcrumb__list {
460
461
  gap: var(--utrecht-button-group-block-gap, 1em);
461
462
  }
462
463
 
464
+ /**
465
+ * @license EUPL-1.2
466
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
467
+ * Copyright (c) 2021 Gemeente Utrecht
468
+ */
469
+ /**
470
+ * @license EUPL-1.2
471
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
472
+ * Copyright (c) 2021 Gemeente Utrecht
473
+ */
474
+ /**
475
+ * @license EUPL-1.2
476
+ * Copyright (c) 2021 Gemeente Utrecht
477
+ * Copyright (c) 2021 Robbert Broersma
478
+ */
479
+ /* stylelint-disable-next-line block-no-empty */
480
+ .utrecht-button, .utrecht-button-link {
481
+ background-color: var(--utrecht-button-primary-action-background-color, var(--utrecht-button-background-color));
482
+ border-color: var(--utrecht-button-border-color, transparent);
483
+ border-radius: var(--utrecht-button-border-radius);
484
+ border-style: solid;
485
+ border-width: var(--utrecht-button-border-width, 0);
486
+ color: var(--utrecht-button-primary-action-color, var(--utrecht-button-color));
487
+ font-family: var(--utrecht-button-font-family, var(--utrecht-document-font-family));
488
+ font-size: var(--utrecht-button-font-size, var(--utrecht-document-font-family));
489
+ font-weight: var(--utrecht-button-font-weight);
490
+ inline-size: var(--utrecht-button-inline-size, auto);
491
+ letter-spacing: var(--utrecht-button-letter-spacing);
492
+ min-block-size: var(--utrecht-button-min-block-size, auto);
493
+ min-inline-size: var(--utrecht-button-min-inline-size, 0);
494
+ padding-block-end: var(--utrecht-button-padding-block-end);
495
+ padding-block-start: var(--utrecht-button-padding-block-start);
496
+ padding-inline-end: var(--utrecht-button-padding-inline-end);
497
+ padding-inline-start: var(--utrecht-button-padding-inline-start);
498
+ text-transform: var(--utrecht-button-text-transform);
499
+ user-select: none;
500
+ }
501
+
502
+ .utrecht-button--distanced {
503
+ margin-block-end: var(--utrecht-button-margin-block-end);
504
+ margin-block-start: var(--utrecht-button-margin-block-start);
505
+ margin-inline-end: var(--utrecht-button-margin-inline-end);
506
+ margin-inline-start: var(--utrecht-button-margin-inline-start);
507
+ }
508
+
509
+ .utrecht-button--submit {
510
+ /* lower priority specificty than busy and disabled cursor */
511
+ cursor: var(--utrecht-action-submit-cursor);
512
+ }
513
+
514
+ .utrecht-button--busy {
515
+ cursor: var(--utrecht-action-busy-cursor);
516
+ }
517
+
518
+ .utrecht-button:disabled, .utrecht-button-link:disabled,
519
+ .utrecht-button--disabled {
520
+ background-color: var(--utrecht-button-disabled-background-color, var(--utrecht-button-background-color));
521
+ border-color: var(--utrecht-button-disabled-border-color, var(--utrecht-button-border-color));
522
+ color: var(--utrecht-button-disabled-color, var(--utrecht-button-color));
523
+ cursor: var(--utrecht-action-disabled-cursor);
524
+ }
525
+
526
+ .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
527
+ .utrecht-button--active {
528
+ background-color: var(--utrecht-button-active-background-color, var(--utrecht-button-background-color));
529
+ border-color: var(--utrecht-button-active-border-color, var(--utrecht-button-border-color));
530
+ color: var(--utrecht-button-active-color, var(--utrecht-button-color));
531
+ }
532
+
533
+ .utrecht-button--focus-visible, .utrecht-button-link--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
534
+ /* the pseudo-class for `:focus-visible` is implemented via the mixin */
535
+ box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
536
+ outline-color: var(--utrecht-focus-outline-color, transparent);
537
+ outline-offset: var(--utrecht-focus-outline-offset, 0);
538
+ outline-style: var(--utrecht-focus-outline-style, solid);
539
+ outline-width: var(--utrecht-focus-outline-width, 0);
540
+ }
541
+
542
+ .utrecht-button--focus, .utrecht-button-link--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
543
+ background-color: var(--utrecht-button-focus-background-color, var(--utrecht-button-background-color));
544
+ border-color: var(--utrecht-button-focus-border-color, var(--utrecht-button-border-color));
545
+ color: var(--utrecht-button-focus-color, var(--utrecht-button-color));
546
+ }
547
+
548
+ /* override the `:focus` selector above */
549
+ /* stylelint-disable-next-line no-descending-specificity */
550
+ .utrecht-button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible) {
551
+ /* undo focus ring */
552
+ box-shadow: none;
553
+ outline-style: none;
554
+ }
555
+
556
+ .utrecht-button--hover:not(:disabled), .utrecht-button-link--hover:not(:disabled),
557
+ .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
558
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
559
+ background-color: var(--utrecht-button-hover-background-color, var(--utrecht-button-background-color));
560
+ border-color: var(--utrecht-button-hover-border-color, var(--utrecht-button-border-color));
561
+ color: var(--utrecht-button-hover-color, var(--utrecht-button-color));
562
+ transform: scale(var(--utrecht-button-focus-transform-scale, 1));
563
+ }
564
+
565
+ .utrecht-button-link {
566
+ cursor: var(--utrecht-action-navigate-cursor, pointer);
567
+ text-decoration: none;
568
+ }
569
+
463
570
  /**
464
571
  * @license EUPL-1.2
465
572
  * Copyright (c) 2021 Robbert Broersma
@@ -1230,6 +1337,170 @@ ol.utrecht-breadcrumb__list {
1230
1337
  height: 1em;
1231
1338
  }
1232
1339
 
1340
+ /**
1341
+ * @license EUPL-1.2
1342
+ * Copyright (c) 2022 Robbert Broersma
1343
+ */
1344
+ /**
1345
+ * @license EUPL-1.2
1346
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
1347
+ * Copyright (c) 2021 Gemeente Utrecht
1348
+ */
1349
+ /* stylelint-disable scss/no-global-function-names */
1350
+ /**
1351
+ * @license EUPL-1.2
1352
+ * Copyright (c) 2021 Gemeente Utrecht
1353
+ * Copyright (c) 2021 Robbert Broersma
1354
+ */
1355
+ /* stylelint-disable-next-line block-no-empty */
1356
+ /*
1357
+
1358
+ # CSS implementation
1359
+
1360
+ ## `text-decoration-skip`
1361
+
1362
+ `text-decoration-skip` can be helpful to avoid making some texts unreadable.
1363
+ For example by obscuring Arabic diacritics.
1364
+
1365
+ However, the combination of a greater thickness and skipping this thick underline
1366
+ leads to a very unappealing rendering of the underline. To avoid this,
1367
+ `text-decoration-skip` is disabled for interactive states.
1368
+
1369
+ For design token configurations that have identical thickness for normal and interactive
1370
+ states, this will lead to the (undesirable) effect that the focus/hover effect is switching
1371
+ from an interrupted to an uninterrupted underline (for some texts).
1372
+
1373
+ Apart from making `skip-ink` configurable for normal/focus/hover, there is no good solution yet.
1374
+
1375
+ ---
1376
+
1377
+ Disabling `text-decoration-skip` for interactive states obscures some texts, and we assume for now
1378
+ that moving the pointer away from a link or having focus elsewhere first is simple enough to
1379
+ not make this too inconvenient.
1380
+
1381
+ ---
1382
+
1383
+ Some folks implement the underline of links using `border-bottom` or even using a finely crafted
1384
+ `linear-gradient()` with a solid color at the bottom and transparent behind the text. These approaches
1385
+ would unfortunately not be able to provide the improved readability of `text-decoration-skip`.
1386
+
1387
+ ## `text-decoration-thickness`
1388
+
1389
+ Varying `text-decoration-thickness` can be used to distinguish interactive states.
1390
+
1391
+ ---
1392
+
1393
+ `text-decoration-thickness` appears to have rendering differences between Chrome and Safari.
1394
+ In Safari the line becomes thicker with extra pixels added to the bottom, while in Chrome
1395
+ the underline offset also seems to increase along with the thickness, which effectively means
1396
+ the underline is closer to the next line than in Safari.
1397
+
1398
+ ---
1399
+
1400
+ It might be nice to use font-relative units for `text-decoration-thickness`, and that is why we
1401
+ use the `max()` function to ensure the underline remains visible for every font size.
1402
+
1403
+ ## `transition`
1404
+
1405
+ `text-decoration-thickness` could be a candidate for animating between interactive states,
1406
+ however browsers don't seem to have implemented great looking supixel tweening yet.
1407
+
1408
+ `text-decoration-skip` also makes the transition more challenging to implement.
1409
+
1410
+ */
1411
+ .utrecht-link, .utrecht-link-button {
1412
+ color: var(--utrecht-link-color, blue);
1413
+ text-decoration: var(--utrecht-link-text-decoration, underline);
1414
+ text-decoration-skip-ink: all;
1415
+ text-decoration-thickness: max(var(--utrecht-link-text-decoration-thickness), 1px);
1416
+ text-underline-offset: var(--utrecht-link-text-underline-offset);
1417
+ }
1418
+
1419
+ .utrecht-link--icon-left {
1420
+ background-image: var(--utrecht-link-icon-left-background-image, none);
1421
+ background-position: 0 0.25em;
1422
+ background-repeat: no-repeat;
1423
+ color: var(--utrecht-link-color, blue);
1424
+ font-weight: var(--utrecht-typography-weight-scale-bold-font-weight);
1425
+ padding-inline-start: var(--utrecht-space-block-md);
1426
+ text-decoration: none;
1427
+ }
1428
+
1429
+ .utrecht-link:visited, .utrecht-link-button:visited,
1430
+ .utrecht-link--visited {
1431
+ color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
1432
+ }
1433
+
1434
+ .utrecht-link:hover, .utrecht-link-button:hover,
1435
+ .utrecht-link--hover,
1436
+ .utrecht-link-button--hover {
1437
+ color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
1438
+ text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
1439
+ text-decoration-skip: none;
1440
+ text-decoration-skip-ink: none;
1441
+ text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1442
+ }
1443
+
1444
+ .utrecht-link:active, .utrecht-link-button:active,
1445
+ .utrecht-link--active,
1446
+ .utrecht-link-button--active {
1447
+ color: var(--utrecht-link-active-color, var(--utrecht-link-color));
1448
+ }
1449
+
1450
+ .utrecht-link--focus, .utrecht-link-button--focus, .utrecht-link:focus, .utrecht-link-button:focus {
1451
+ color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
1452
+ text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
1453
+ text-decoration-skip: none;
1454
+ text-decoration-skip-ink: none;
1455
+ text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1456
+ }
1457
+
1458
+ .utrecht-link--focus-visible, .utrecht-link-button--focus-visible, .utrecht-link:focus, .utrecht-link-button:focus {
1459
+ box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
1460
+ outline-color: var(--utrecht-focus-outline-color, transparent);
1461
+ outline-offset: var(--utrecht-focus-outline-offset, 0);
1462
+ outline-style: var(--utrecht-focus-outline-style, solid);
1463
+ outline-width: var(--utrecht-focus-outline-width, 0);
1464
+ }
1465
+
1466
+ .utrecht-link:focus:not(:focus-visible), .utrecht-link-button:focus:not(:focus-visible) {
1467
+ /* undo focus ring */
1468
+ box-shadow: none;
1469
+ outline-style: none;
1470
+ }
1471
+
1472
+ /* stylelint-disable-next-line block-no-empty */
1473
+ /* stylelint-disable-next-line block-no-empty */
1474
+ .utrecht-link--telephone {
1475
+ white-space: nowrap;
1476
+ }
1477
+
1478
+ /* stylelint-disable-next-line block-no-empty */
1479
+ /* stylelint-disable-next-line block-no-empty */
1480
+ .utrecht-link-button {
1481
+ cursor: pointer;
1482
+ display: inline-flex;
1483
+ font-family: var(--utrecht-button-font-family, var(--utrecht-document-font-family));
1484
+ font-size: var(--utrecht-button-font-size, var(--utrecht-document-font-family));
1485
+ font-weight: var(--utrecht-button-font-weight);
1486
+ inline-size: var(--utrecht-button-inline-size, auto);
1487
+ letter-spacing: var(--utrecht-button-letter-spacing);
1488
+ min-block-size: var(--utrecht-button-min-block-size, auto);
1489
+ min-inline-size: var(--utrecht-button-min-inline-size, 0);
1490
+ padding-block-end: var(--utrecht-button-padding-block-end);
1491
+ padding-block-start: var(--utrecht-button-padding-block-start);
1492
+ padding-inline-end: var(--utrecht-button-padding-inline-end);
1493
+ padding-inline-start: var(--utrecht-button-padding-inline-start);
1494
+ text-transform: var(--utrecht-button-text-transform);
1495
+ user-select: none;
1496
+ }
1497
+
1498
+ .utrecht-link-button--html-button {
1499
+ background-color: transparent;
1500
+ /* reset <button> styling */
1501
+ border-width: 0;
1502
+ }
1503
+
1233
1504
  /**
1234
1505
  * @license EUPL-1.2
1235
1506
  * Copyright (c) 2021 Gemeente Utrecht
@@ -1316,7 +1587,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1316
1587
  `text-decoration-skip` also makes the transition more challenging to implement.
1317
1588
 
1318
1589
  */
1319
- .utrecht-link {
1590
+ .utrecht-link, .utrecht-link-button {
1320
1591
  color: var(--utrecht-link-color, blue);
1321
1592
  text-decoration: var(--utrecht-link-text-decoration, underline);
1322
1593
  text-decoration-skip-ink: all;
@@ -1334,13 +1605,14 @@ however browsers don't seem to have implemented great looking supixel tweening y
1334
1605
  text-decoration: none;
1335
1606
  }
1336
1607
 
1337
- .utrecht-link:visited,
1608
+ .utrecht-link:visited, .utrecht-link-button:visited,
1338
1609
  .utrecht-link--visited {
1339
1610
  color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
1340
1611
  }
1341
1612
 
1342
- .utrecht-link:hover,
1343
- .utrecht-link--hover {
1613
+ .utrecht-link:hover, .utrecht-link-button:hover,
1614
+ .utrecht-link--hover,
1615
+ .utrecht-link-button--hover {
1344
1616
  color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
1345
1617
  text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
1346
1618
  text-decoration-skip: none;
@@ -1348,12 +1620,13 @@ however browsers don't seem to have implemented great looking supixel tweening y
1348
1620
  text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1349
1621
  }
1350
1622
 
1351
- .utrecht-link:active,
1352
- .utrecht-link--active {
1623
+ .utrecht-link:active, .utrecht-link-button:active,
1624
+ .utrecht-link--active,
1625
+ .utrecht-link-button--active {
1353
1626
  color: var(--utrecht-link-active-color, var(--utrecht-link-color));
1354
1627
  }
1355
1628
 
1356
- .utrecht-link--focus, .utrecht-link:focus {
1629
+ .utrecht-link--focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus {
1357
1630
  color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
1358
1631
  text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
1359
1632
  text-decoration-skip: none;
@@ -1361,7 +1634,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1361
1634
  text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1362
1635
  }
1363
1636
 
1364
- .utrecht-link--focus-visible, .utrecht-link:focus {
1637
+ .utrecht-link--focus-visible, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus-visible {
1365
1638
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
1366
1639
  outline-color: var(--utrecht-focus-outline-color, transparent);
1367
1640
  outline-offset: var(--utrecht-focus-outline-offset, 0);
@@ -1369,7 +1642,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1369
1642
  outline-width: var(--utrecht-focus-outline-width, 0);
1370
1643
  }
1371
1644
 
1372
- .utrecht-link:focus:not(:focus-visible) {
1645
+ .utrecht-link:focus:not(:focus-visible), .utrecht-link-button:focus:not(:focus-visible) {
1373
1646
  /* undo focus ring */
1374
1647
  box-shadow: none;
1375
1648
  outline-style: none;
package/dist/index.css CHANGED
@@ -354,7 +354,7 @@ ol.utrecht-breadcrumb__list {
354
354
  .utrecht-button, .utrecht-html input[type=button i],
355
355
  .utrecht-html input[type=reset i],
356
356
  .utrecht-html input[type=submit i],
357
- .utrecht-html button {
357
+ .utrecht-html button, .utrecht-button-link {
358
358
  background-color: var(--utrecht-button-primary-action-background-color, var(--utrecht-button-background-color));
359
359
  border-color: var(--utrecht-button-border-color, transparent);
360
360
  border-radius: var(--utrecht-button-border-radius);
@@ -401,7 +401,7 @@ ol.utrecht-breadcrumb__list {
401
401
  .utrecht-button:disabled, .utrecht-html input[type=button i]:disabled,
402
402
  .utrecht-html input[type=reset i]:disabled,
403
403
  .utrecht-html input[type=submit i]:disabled,
404
- .utrecht-html button:disabled,
404
+ .utrecht-html button:disabled, .utrecht-button-link:disabled,
405
405
  .utrecht-button--disabled,
406
406
  .utrecht-html button[aria-disabled=true] {
407
407
  background-color: var(--utrecht-button-disabled-background-color, var(--utrecht-button-background-color));
@@ -412,7 +412,7 @@ ol.utrecht-breadcrumb__list {
412
412
 
413
413
  .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
414
414
  .utrecht-html input[type=reset i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
415
- .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
415
+ .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
416
416
  .utrecht-button--active,
417
417
  .utrecht-html button:active:not([aria-disabled=true]):not(:disabled) {
418
418
  background-color: var(--utrecht-button-active-background-color, var(--utrecht-button-background-color));
@@ -420,10 +420,10 @@ ol.utrecht-breadcrumb__list {
420
420
  color: var(--utrecht-button-active-color, var(--utrecht-button-color));
421
421
  }
422
422
 
423
- .utrecht-button--focus-visible, .utrecht-html button:focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
423
+ .utrecht-button--focus-visible, .utrecht-html button:focus-visible, .utrecht-button-link--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
424
424
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
425
425
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
426
- .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
426
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
427
427
  /* the pseudo-class for `:focus-visible` is implemented via the mixin */
428
428
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
429
429
  outline-color: var(--utrecht-focus-outline-color, transparent);
@@ -432,10 +432,10 @@ ol.utrecht-breadcrumb__list {
432
432
  outline-width: var(--utrecht-focus-outline-width, 0);
433
433
  }
434
434
 
435
- .utrecht-button--focus, .utrecht-html button:focus:not([aria-disabled=true]):not(:disabled), .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
435
+ .utrecht-button--focus, .utrecht-html button:focus:not([aria-disabled=true]):not(:disabled), .utrecht-button-link--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
436
436
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
437
437
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
438
- .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
438
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
439
439
  background-color: var(--utrecht-button-focus-background-color, var(--utrecht-button-background-color));
440
440
  border-color: var(--utrecht-button-focus-border-color, var(--utrecht-button-border-color));
441
441
  color: var(--utrecht-button-focus-color, var(--utrecht-button-color));
@@ -446,17 +446,18 @@ ol.utrecht-breadcrumb__list {
446
446
  .utrecht-button:focus:not(:focus-visible), .utrecht-html input[type=button i]:focus:not(:focus-visible),
447
447
  .utrecht-html input[type=reset i]:focus:not(:focus-visible),
448
448
  .utrecht-html input[type=submit i]:focus:not(:focus-visible),
449
- .utrecht-html button:focus:not(:focus-visible) {
449
+ .utrecht-html button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible) {
450
450
  /* undo focus ring */
451
451
  box-shadow: none;
452
452
  outline-style: none;
453
453
  }
454
454
 
455
- .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]),
455
+ .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]), .utrecht-button-link--hover:not(:disabled),
456
456
  .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
457
457
  .utrecht-html input[type=button i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
458
458
  .utrecht-html input[type=reset i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
459
- .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
459
+ .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
460
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
460
461
  background-color: var(--utrecht-button-hover-background-color, var(--utrecht-button-background-color));
461
462
  border-color: var(--utrecht-button-hover-border-color, var(--utrecht-button-border-color));
462
463
  color: var(--utrecht-button-hover-color, var(--utrecht-button-color));
@@ -497,6 +498,140 @@ ol.utrecht-breadcrumb__list {
497
498
  gap: var(--utrecht-button-group-block-gap, 1em);
498
499
  }
499
500
 
501
+ /**
502
+ * @license EUPL-1.2
503
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
504
+ * Copyright (c) 2021 Gemeente Utrecht
505
+ */
506
+ /**
507
+ * @license EUPL-1.2
508
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
509
+ * Copyright (c) 2021 Gemeente Utrecht
510
+ */
511
+ /**
512
+ * @license EUPL-1.2
513
+ * Copyright (c) 2021 Gemeente Utrecht
514
+ * Copyright (c) 2021 Robbert Broersma
515
+ */
516
+ /* stylelint-disable-next-line block-no-empty */
517
+ .utrecht-button, .utrecht-html input[type=button i],
518
+ .utrecht-html input[type=reset i],
519
+ .utrecht-html input[type=submit i],
520
+ .utrecht-html button, .utrecht-button-link {
521
+ background-color: var(--utrecht-button-primary-action-background-color, var(--utrecht-button-background-color));
522
+ border-color: var(--utrecht-button-border-color, transparent);
523
+ border-radius: var(--utrecht-button-border-radius);
524
+ border-style: solid;
525
+ border-width: var(--utrecht-button-border-width, 0);
526
+ color: var(--utrecht-button-primary-action-color, var(--utrecht-button-color));
527
+ font-family: var(--utrecht-button-font-family, var(--utrecht-document-font-family));
528
+ font-size: var(--utrecht-button-font-size, var(--utrecht-document-font-family));
529
+ font-weight: var(--utrecht-button-font-weight);
530
+ inline-size: var(--utrecht-button-inline-size, auto);
531
+ letter-spacing: var(--utrecht-button-letter-spacing);
532
+ min-block-size: var(--utrecht-button-min-block-size, auto);
533
+ min-inline-size: var(--utrecht-button-min-inline-size, 0);
534
+ padding-block-end: var(--utrecht-button-padding-block-end);
535
+ padding-block-start: var(--utrecht-button-padding-block-start);
536
+ padding-inline-end: var(--utrecht-button-padding-inline-end);
537
+ padding-inline-start: var(--utrecht-button-padding-inline-start);
538
+ text-transform: var(--utrecht-button-text-transform);
539
+ user-select: none;
540
+ }
541
+
542
+ .utrecht-button--distanced, .utrecht-html input[type=button i],
543
+ .utrecht-html input[type=reset i],
544
+ .utrecht-html input[type=submit i],
545
+ .utrecht-html button {
546
+ margin-block-end: var(--utrecht-button-margin-block-end);
547
+ margin-block-start: var(--utrecht-button-margin-block-start);
548
+ margin-inline-end: var(--utrecht-button-margin-inline-end);
549
+ margin-inline-start: var(--utrecht-button-margin-inline-start);
550
+ }
551
+
552
+ .utrecht-button--submit, .utrecht-html button[type=submit i],
553
+ .utrecht-html input[type=submit i] {
554
+ /* lower priority specificty than busy and disabled cursor */
555
+ cursor: var(--utrecht-action-submit-cursor);
556
+ }
557
+
558
+ .utrecht-button--busy, .utrecht-html button[aria-busy=true],
559
+ .utrecht-html button[aria-disabled=true][aria-busy=true],
560
+ .utrecht-html button:disabled[aria-busy=true] {
561
+ cursor: var(--utrecht-action-busy-cursor);
562
+ }
563
+
564
+ .utrecht-button:disabled, .utrecht-html input[type=button i]:disabled,
565
+ .utrecht-html input[type=reset i]:disabled,
566
+ .utrecht-html input[type=submit i]:disabled,
567
+ .utrecht-html button:disabled, .utrecht-button-link:disabled,
568
+ .utrecht-button--disabled,
569
+ .utrecht-html button[aria-disabled=true] {
570
+ background-color: var(--utrecht-button-disabled-background-color, var(--utrecht-button-background-color));
571
+ border-color: var(--utrecht-button-disabled-border-color, var(--utrecht-button-border-color));
572
+ color: var(--utrecht-button-disabled-color, var(--utrecht-button-color));
573
+ cursor: var(--utrecht-action-disabled-cursor);
574
+ }
575
+
576
+ .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
577
+ .utrecht-html input[type=reset i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
578
+ .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
579
+ .utrecht-button--active,
580
+ .utrecht-html button:active:not([aria-disabled=true]):not(:disabled) {
581
+ background-color: var(--utrecht-button-active-background-color, var(--utrecht-button-background-color));
582
+ border-color: var(--utrecht-button-active-border-color, var(--utrecht-button-border-color));
583
+ color: var(--utrecht-button-active-color, var(--utrecht-button-color));
584
+ }
585
+
586
+ .utrecht-button--focus-visible, .utrecht-html button:focus-visible, .utrecht-button-link--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
587
+ .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
588
+ .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
589
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
590
+ /* the pseudo-class for `:focus-visible` is implemented via the mixin */
591
+ box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
592
+ outline-color: var(--utrecht-focus-outline-color, transparent);
593
+ outline-offset: var(--utrecht-focus-outline-offset, 0);
594
+ outline-style: var(--utrecht-focus-outline-style, solid);
595
+ outline-width: var(--utrecht-focus-outline-width, 0);
596
+ }
597
+
598
+ .utrecht-button--focus, .utrecht-html button:focus:not([aria-disabled=true]):not(:disabled), .utrecht-button-link--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
599
+ .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
600
+ .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
601
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
602
+ background-color: var(--utrecht-button-focus-background-color, var(--utrecht-button-background-color));
603
+ border-color: var(--utrecht-button-focus-border-color, var(--utrecht-button-border-color));
604
+ color: var(--utrecht-button-focus-color, var(--utrecht-button-color));
605
+ }
606
+
607
+ /* override the `:focus` selector above */
608
+ /* stylelint-disable-next-line no-descending-specificity */
609
+ .utrecht-button:focus:not(:focus-visible), .utrecht-html input[type=button i]:focus:not(:focus-visible),
610
+ .utrecht-html input[type=reset i]:focus:not(:focus-visible),
611
+ .utrecht-html input[type=submit i]:focus:not(:focus-visible),
612
+ .utrecht-html button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible) {
613
+ /* undo focus ring */
614
+ box-shadow: none;
615
+ outline-style: none;
616
+ }
617
+
618
+ .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]), .utrecht-button-link--hover:not(:disabled),
619
+ .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
620
+ .utrecht-html input[type=button i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
621
+ .utrecht-html input[type=reset i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
622
+ .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
623
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
624
+ background-color: var(--utrecht-button-hover-background-color, var(--utrecht-button-background-color));
625
+ border-color: var(--utrecht-button-hover-border-color, var(--utrecht-button-border-color));
626
+ color: var(--utrecht-button-hover-color, var(--utrecht-button-color));
627
+ transform: scale(var(--utrecht-button-focus-transform-scale, 1));
628
+ }
629
+
630
+ .utrecht-button-link {
631
+ cursor: var(--utrecht-action-navigate-cursor, pointer);
632
+ text-decoration: none;
633
+ }
634
+
500
635
  /**
501
636
  * @license EUPL-1.2
502
637
  * Copyright (c) 2021 Robbert Broersma
@@ -1267,6 +1402,173 @@ ol.utrecht-breadcrumb__list {
1267
1402
  height: 1em;
1268
1403
  }
1269
1404
 
1405
+ /**
1406
+ * @license EUPL-1.2
1407
+ * Copyright (c) 2022 Robbert Broersma
1408
+ */
1409
+ /**
1410
+ * @license EUPL-1.2
1411
+ * Copyright (c) 2021 The Knights Who Say NIH! B.V.
1412
+ * Copyright (c) 2021 Gemeente Utrecht
1413
+ */
1414
+ /* stylelint-disable scss/no-global-function-names */
1415
+ /**
1416
+ * @license EUPL-1.2
1417
+ * Copyright (c) 2021 Gemeente Utrecht
1418
+ * Copyright (c) 2021 Robbert Broersma
1419
+ */
1420
+ /* stylelint-disable-next-line block-no-empty */
1421
+ /*
1422
+
1423
+ # CSS implementation
1424
+
1425
+ ## `text-decoration-skip`
1426
+
1427
+ `text-decoration-skip` can be helpful to avoid making some texts unreadable.
1428
+ For example by obscuring Arabic diacritics.
1429
+
1430
+ However, the combination of a greater thickness and skipping this thick underline
1431
+ leads to a very unappealing rendering of the underline. To avoid this,
1432
+ `text-decoration-skip` is disabled for interactive states.
1433
+
1434
+ For design token configurations that have identical thickness for normal and interactive
1435
+ states, this will lead to the (undesirable) effect that the focus/hover effect is switching
1436
+ from an interrupted to an uninterrupted underline (for some texts).
1437
+
1438
+ Apart from making `skip-ink` configurable for normal/focus/hover, there is no good solution yet.
1439
+
1440
+ ---
1441
+
1442
+ Disabling `text-decoration-skip` for interactive states obscures some texts, and we assume for now
1443
+ that moving the pointer away from a link or having focus elsewhere first is simple enough to
1444
+ not make this too inconvenient.
1445
+
1446
+ ---
1447
+
1448
+ Some folks implement the underline of links using `border-bottom` or even using a finely crafted
1449
+ `linear-gradient()` with a solid color at the bottom and transparent behind the text. These approaches
1450
+ would unfortunately not be able to provide the improved readability of `text-decoration-skip`.
1451
+
1452
+ ## `text-decoration-thickness`
1453
+
1454
+ Varying `text-decoration-thickness` can be used to distinguish interactive states.
1455
+
1456
+ ---
1457
+
1458
+ `text-decoration-thickness` appears to have rendering differences between Chrome and Safari.
1459
+ In Safari the line becomes thicker with extra pixels added to the bottom, while in Chrome
1460
+ the underline offset also seems to increase along with the thickness, which effectively means
1461
+ the underline is closer to the next line than in Safari.
1462
+
1463
+ ---
1464
+
1465
+ It might be nice to use font-relative units for `text-decoration-thickness`, and that is why we
1466
+ use the `max()` function to ensure the underline remains visible for every font size.
1467
+
1468
+ ## `transition`
1469
+
1470
+ `text-decoration-thickness` could be a candidate for animating between interactive states,
1471
+ however browsers don't seem to have implemented great looking supixel tweening yet.
1472
+
1473
+ `text-decoration-skip` also makes the transition more challenging to implement.
1474
+
1475
+ */
1476
+ .utrecht-link, .utrecht-html a:link, .utrecht-link-button {
1477
+ color: var(--utrecht-link-color, blue);
1478
+ text-decoration: var(--utrecht-link-text-decoration, underline);
1479
+ text-decoration-skip-ink: all;
1480
+ text-decoration-thickness: max(var(--utrecht-link-text-decoration-thickness), 1px);
1481
+ text-underline-offset: var(--utrecht-link-text-underline-offset);
1482
+ }
1483
+
1484
+ .utrecht-link--icon-left {
1485
+ background-image: var(--utrecht-link-icon-left-background-image, none);
1486
+ background-position: 0 0.25em;
1487
+ background-repeat: no-repeat;
1488
+ color: var(--utrecht-link-color, blue);
1489
+ font-weight: var(--utrecht-typography-weight-scale-bold-font-weight);
1490
+ padding-inline-start: var(--utrecht-space-block-md);
1491
+ text-decoration: none;
1492
+ }
1493
+
1494
+ .utrecht-link:visited, .utrecht-link-button:visited,
1495
+ .utrecht-link--visited,
1496
+ .utrecht-html a:visited {
1497
+ color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
1498
+ }
1499
+
1500
+ .utrecht-link:hover, .utrecht-link-button:hover,
1501
+ .utrecht-link--hover,
1502
+ .utrecht-html a:hover,
1503
+ .utrecht-link-button--hover {
1504
+ color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
1505
+ text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
1506
+ text-decoration-skip: none;
1507
+ text-decoration-skip-ink: none;
1508
+ text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1509
+ }
1510
+
1511
+ .utrecht-link:active, .utrecht-link-button:active,
1512
+ .utrecht-link--active,
1513
+ .utrecht-html a:active,
1514
+ .utrecht-link-button--active {
1515
+ color: var(--utrecht-link-active-color, var(--utrecht-link-color));
1516
+ }
1517
+
1518
+ .utrecht-link--focus, .utrecht-html a:focus, .utrecht-link-button--focus, .utrecht-link:focus, .utrecht-link-button:focus {
1519
+ color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
1520
+ text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
1521
+ text-decoration-skip: none;
1522
+ text-decoration-skip-ink: none;
1523
+ text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1524
+ }
1525
+
1526
+ .utrecht-link--focus-visible, .utrecht-html a:focus, .utrecht-link-button--focus-visible, .utrecht-link:focus, .utrecht-link-button:focus {
1527
+ box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
1528
+ outline-color: var(--utrecht-focus-outline-color, transparent);
1529
+ outline-offset: var(--utrecht-focus-outline-offset, 0);
1530
+ outline-style: var(--utrecht-focus-outline-style, solid);
1531
+ outline-width: var(--utrecht-focus-outline-width, 0);
1532
+ }
1533
+
1534
+ .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link, .utrecht-link-button:focus:not(:focus-visible) {
1535
+ /* undo focus ring */
1536
+ box-shadow: none;
1537
+ outline-style: none;
1538
+ }
1539
+
1540
+ /* stylelint-disable-next-line block-no-empty */
1541
+ /* stylelint-disable-next-line block-no-empty */
1542
+ .utrecht-link--telephone, .utrecht-html a[href^="tel:" i] {
1543
+ white-space: nowrap;
1544
+ }
1545
+
1546
+ /* stylelint-disable-next-line block-no-empty */
1547
+ /* stylelint-disable-next-line block-no-empty */
1548
+ .utrecht-link-button {
1549
+ cursor: pointer;
1550
+ display: inline-flex;
1551
+ font-family: var(--utrecht-button-font-family, var(--utrecht-document-font-family));
1552
+ font-size: var(--utrecht-button-font-size, var(--utrecht-document-font-family));
1553
+ font-weight: var(--utrecht-button-font-weight);
1554
+ inline-size: var(--utrecht-button-inline-size, auto);
1555
+ letter-spacing: var(--utrecht-button-letter-spacing);
1556
+ min-block-size: var(--utrecht-button-min-block-size, auto);
1557
+ min-inline-size: var(--utrecht-button-min-inline-size, 0);
1558
+ padding-block-end: var(--utrecht-button-padding-block-end);
1559
+ padding-block-start: var(--utrecht-button-padding-block-start);
1560
+ padding-inline-end: var(--utrecht-button-padding-inline-end);
1561
+ padding-inline-start: var(--utrecht-button-padding-inline-start);
1562
+ text-transform: var(--utrecht-button-text-transform);
1563
+ user-select: none;
1564
+ }
1565
+
1566
+ .utrecht-link-button--html-button {
1567
+ background-color: transparent;
1568
+ /* reset <button> styling */
1569
+ border-width: 0;
1570
+ }
1571
+
1270
1572
  /**
1271
1573
  * @license EUPL-1.2
1272
1574
  * Copyright (c) 2021 Gemeente Utrecht
@@ -1353,7 +1655,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1353
1655
  `text-decoration-skip` also makes the transition more challenging to implement.
1354
1656
 
1355
1657
  */
1356
- .utrecht-link, .utrecht-html a:link {
1658
+ .utrecht-link, .utrecht-html a:link, .utrecht-link-button {
1357
1659
  color: var(--utrecht-link-color, blue);
1358
1660
  text-decoration: var(--utrecht-link-text-decoration, underline);
1359
1661
  text-decoration-skip-ink: all;
@@ -1371,15 +1673,16 @@ however browsers don't seem to have implemented great looking supixel tweening y
1371
1673
  text-decoration: none;
1372
1674
  }
1373
1675
 
1374
- .utrecht-link:visited,
1676
+ .utrecht-link:visited, .utrecht-link-button:visited,
1375
1677
  .utrecht-link--visited,
1376
1678
  .utrecht-html a:visited {
1377
1679
  color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
1378
1680
  }
1379
1681
 
1380
- .utrecht-link:hover,
1682
+ .utrecht-link:hover, .utrecht-link-button:hover,
1381
1683
  .utrecht-link--hover,
1382
- .utrecht-html a:hover {
1684
+ .utrecht-html a:hover,
1685
+ .utrecht-link-button--hover {
1383
1686
  color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
1384
1687
  text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
1385
1688
  text-decoration-skip: none;
@@ -1387,13 +1690,14 @@ however browsers don't seem to have implemented great looking supixel tweening y
1387
1690
  text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1388
1691
  }
1389
1692
 
1390
- .utrecht-link:active,
1693
+ .utrecht-link:active, .utrecht-link-button:active,
1391
1694
  .utrecht-link--active,
1392
- .utrecht-html a:active {
1695
+ .utrecht-html a:active,
1696
+ .utrecht-link-button--active {
1393
1697
  color: var(--utrecht-link-active-color, var(--utrecht-link-color));
1394
1698
  }
1395
1699
 
1396
- .utrecht-link--focus, .utrecht-html a:focus, .utrecht-link:focus {
1700
+ .utrecht-link--focus, .utrecht-html a:focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus {
1397
1701
  color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
1398
1702
  text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
1399
1703
  text-decoration-skip: none;
@@ -1401,7 +1705,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1401
1705
  text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
1402
1706
  }
1403
1707
 
1404
- .utrecht-link--focus-visible, .utrecht-html a:focus, .utrecht-link:focus {
1708
+ .utrecht-link--focus-visible, .utrecht-html a:focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus-visible {
1405
1709
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
1406
1710
  outline-color: var(--utrecht-focus-outline-color, transparent);
1407
1711
  outline-offset: var(--utrecht-focus-outline-offset, 0);
@@ -1409,7 +1713,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
1409
1713
  outline-width: var(--utrecht-focus-outline-width, 0);
1410
1714
  }
1411
1715
 
1412
- .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link {
1716
+ .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link, .utrecht-link-button:focus:not(:focus-visible) {
1413
1717
  /* undo focus ring */
1414
1718
  box-shadow: none;
1415
1719
  outline-style: none;
@@ -2809,7 +3113,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
2809
3113
  .utrecht-button, .utrecht-html input[type=button i],
2810
3114
  .utrecht-html input[type=reset i],
2811
3115
  .utrecht-html input[type=submit i],
2812
- .utrecht-html button {
3116
+ .utrecht-html button, .utrecht-button-link {
2813
3117
  background-color: var(--utrecht-button-primary-action-background-color, var(--utrecht-button-background-color));
2814
3118
  border-color: var(--utrecht-button-border-color, transparent);
2815
3119
  border-radius: var(--utrecht-button-border-radius);
@@ -2856,7 +3160,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
2856
3160
  .utrecht-button:disabled, .utrecht-html input[type=button i]:disabled,
2857
3161
  .utrecht-html input[type=reset i]:disabled,
2858
3162
  .utrecht-html input[type=submit i]:disabled,
2859
- .utrecht-html button:disabled,
3163
+ .utrecht-html button:disabled, .utrecht-button-link:disabled,
2860
3164
  .utrecht-button--disabled,
2861
3165
  .utrecht-html button[aria-disabled=true] {
2862
3166
  background-color: var(--utrecht-button-disabled-background-color, var(--utrecht-button-background-color));
@@ -2867,7 +3171,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
2867
3171
 
2868
3172
  .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2869
3173
  .utrecht-html input[type=reset i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2870
- .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3174
+ .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2871
3175
  .utrecht-button--active,
2872
3176
  .utrecht-html button:active:not([aria-disabled=true]):not(:disabled) {
2873
3177
  background-color: var(--utrecht-button-active-background-color, var(--utrecht-button-background-color));
@@ -2878,7 +3182,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
2878
3182
  .utrecht-button--focus-visible, .utrecht-html button:focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2879
3183
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2880
3184
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2881
- .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
3185
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link--focus-visible {
2882
3186
  /* the pseudo-class for `:focus-visible` is implemented via the mixin */
2883
3187
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
2884
3188
  outline-color: var(--utrecht-focus-outline-color, transparent);
@@ -2890,7 +3194,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
2890
3194
  .utrecht-button--focus, .utrecht-html button:focus:not([aria-disabled=true]):not(:disabled), .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2891
3195
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2892
3196
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2893
- .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
3197
+ .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link--focus {
2894
3198
  background-color: var(--utrecht-button-focus-background-color, var(--utrecht-button-background-color));
2895
3199
  border-color: var(--utrecht-button-focus-border-color, var(--utrecht-button-border-color));
2896
3200
  color: var(--utrecht-button-focus-color, var(--utrecht-button-color));
@@ -2901,17 +3205,18 @@ however browsers don't seem to have implemented great looking supixel tweening y
2901
3205
  .utrecht-button:focus:not(:focus-visible), .utrecht-html input[type=button i]:focus:not(:focus-visible),
2902
3206
  .utrecht-html input[type=reset i]:focus:not(:focus-visible),
2903
3207
  .utrecht-html input[type=submit i]:focus:not(:focus-visible),
2904
- .utrecht-html button:focus:not(:focus-visible) {
3208
+ .utrecht-html button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible) {
2905
3209
  /* undo focus ring */
2906
3210
  box-shadow: none;
2907
3211
  outline-style: none;
2908
3212
  }
2909
3213
 
2910
- .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]),
3214
+ .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]), .utrecht-button-link--hover:not(:disabled),
2911
3215
  .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2912
3216
  .utrecht-html input[type=button i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2913
3217
  .utrecht-html input[type=reset i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
2914
- .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
3218
+ .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3219
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
2915
3220
  background-color: var(--utrecht-button-hover-background-color, var(--utrecht-button-background-color));
2916
3221
  border-color: var(--utrecht-button-hover-border-color, var(--utrecht-button-border-color));
2917
3222
  color: var(--utrecht-button-hover-color, var(--utrecht-button-color));
@@ -3313,7 +3618,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3313
3618
  * Copyright (c) 2021 Robbert Broersma
3314
3619
  */
3315
3620
  /* stylelint-disable-next-line block-no-empty */
3316
- .utrecht-button, .utrecht-html input[type=button i],
3621
+ .utrecht-button, .utrecht-button-link, .utrecht-html input[type=button i],
3317
3622
  .utrecht-html input[type=reset i],
3318
3623
  .utrecht-html input[type=submit i],
3319
3624
  .utrecht-html button {
@@ -3360,7 +3665,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3360
3665
  cursor: var(--utrecht-action-busy-cursor);
3361
3666
  }
3362
3667
 
3363
- .utrecht-button:disabled, .utrecht-html input[type=button i]:disabled,
3668
+ .utrecht-button:disabled, .utrecht-button-link:disabled, .utrecht-html input[type=button i]:disabled,
3364
3669
  .utrecht-html input[type=reset i]:disabled,
3365
3670
  .utrecht-html input[type=submit i]:disabled,
3366
3671
  .utrecht-html button:disabled,
@@ -3372,7 +3677,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3372
3677
  cursor: var(--utrecht-action-disabled-cursor);
3373
3678
  }
3374
3679
 
3375
- .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3680
+ .utrecht-button:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3376
3681
  .utrecht-html input[type=reset i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3377
3682
  .utrecht-html input[type=submit i]:active:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3378
3683
  .utrecht-button--active,
@@ -3382,7 +3687,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3382
3687
  color: var(--utrecht-button-active-color, var(--utrecht-button-color));
3383
3688
  }
3384
3689
 
3385
- .utrecht-button--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3690
+ .utrecht-button--focus-visible, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link--focus-visible, .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3386
3691
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3387
3692
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3388
3693
  .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html button:focus-visible {
@@ -3394,7 +3699,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3394
3699
  outline-width: var(--utrecht-focus-outline-width, 0);
3395
3700
  }
3396
3701
 
3397
- .utrecht-button--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3702
+ .utrecht-button--focus, .utrecht-button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-button-link--focus, .utrecht-html input[type=button i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3398
3703
  .utrecht-html input[type=reset i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3399
3704
  .utrecht-html input[type=submit i]:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3400
3705
  .utrecht-html button:focus:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled), .utrecht-html button:focus:not([aria-disabled=true]):not(:disabled) {
@@ -3405,7 +3710,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3405
3710
 
3406
3711
  /* override the `:focus` selector above */
3407
3712
  /* stylelint-disable-next-line no-descending-specificity */
3408
- .utrecht-button:focus:not(:focus-visible), .utrecht-html input[type=button i]:focus:not(:focus-visible),
3713
+ .utrecht-button:focus:not(:focus-visible), .utrecht-button-link:focus:not(:focus-visible), .utrecht-html input[type=button i]:focus:not(:focus-visible),
3409
3714
  .utrecht-html input[type=reset i]:focus:not(:focus-visible),
3410
3715
  .utrecht-html input[type=submit i]:focus:not(:focus-visible),
3411
3716
  .utrecht-html button:focus:not(:focus-visible) {
@@ -3414,8 +3719,9 @@ however browsers don't seem to have implemented great looking supixel tweening y
3414
3719
  outline-style: none;
3415
3720
  }
3416
3721
 
3417
- .utrecht-button--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]),
3722
+ .utrecht-button--hover:not(:disabled), .utrecht-button-link--hover:not(:disabled), .utrecht-html button:not(:disabled):hover:not([aria-disabled=true]),
3418
3723
  .utrecht-button:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3724
+ .utrecht-button-link:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3419
3725
  .utrecht-html input[type=button i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3420
3726
  .utrecht-html input[type=reset i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled),
3421
3727
  .utrecht-html input[type=submit i]:hover:not(:disabled):not([aria-disabled=true]):not(.utrecht-button--disabled) {
@@ -3801,7 +4107,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3801
4107
  `text-decoration-skip` also makes the transition more challenging to implement.
3802
4108
 
3803
4109
  */
3804
- .utrecht-link, .utrecht-html a:link {
4110
+ .utrecht-link, .utrecht-html a:link, .utrecht-link-button {
3805
4111
  color: var(--utrecht-link-color, blue);
3806
4112
  text-decoration: var(--utrecht-link-text-decoration, underline);
3807
4113
  text-decoration-skip-ink: all;
@@ -3819,15 +4125,16 @@ however browsers don't seem to have implemented great looking supixel tweening y
3819
4125
  text-decoration: none;
3820
4126
  }
3821
4127
 
3822
- .utrecht-link:visited,
4128
+ .utrecht-link:visited, .utrecht-link-button:visited,
3823
4129
  .utrecht-link--visited,
3824
4130
  .utrecht-html a:visited {
3825
4131
  color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
3826
4132
  }
3827
4133
 
3828
- .utrecht-link:hover,
4134
+ .utrecht-link:hover, .utrecht-link-button:hover,
3829
4135
  .utrecht-link--hover,
3830
- .utrecht-html a:hover {
4136
+ .utrecht-html a:hover,
4137
+ .utrecht-link-button--hover {
3831
4138
  color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
3832
4139
  text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
3833
4140
  text-decoration-skip: none;
@@ -3835,13 +4142,14 @@ however browsers don't seem to have implemented great looking supixel tweening y
3835
4142
  text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
3836
4143
  }
3837
4144
 
3838
- .utrecht-link:active,
4145
+ .utrecht-link:active, .utrecht-link-button:active,
3839
4146
  .utrecht-link--active,
3840
- .utrecht-html a:active {
4147
+ .utrecht-html a:active,
4148
+ .utrecht-link-button--active {
3841
4149
  color: var(--utrecht-link-active-color, var(--utrecht-link-color));
3842
4150
  }
3843
4151
 
3844
- .utrecht-link--focus, .utrecht-html a:focus, .utrecht-link:focus {
4152
+ .utrecht-link--focus, .utrecht-html a:focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus {
3845
4153
  color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
3846
4154
  text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
3847
4155
  text-decoration-skip: none;
@@ -3849,7 +4157,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3849
4157
  text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
3850
4158
  }
3851
4159
 
3852
- .utrecht-link--focus-visible, .utrecht-html a:focus, .utrecht-link:focus {
4160
+ .utrecht-link--focus-visible, .utrecht-html a:focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus-visible {
3853
4161
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
3854
4162
  outline-color: var(--utrecht-focus-outline-color, transparent);
3855
4163
  outline-offset: var(--utrecht-focus-outline-offset, 0);
@@ -3857,7 +4165,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
3857
4165
  outline-width: var(--utrecht-focus-outline-width, 0);
3858
4166
  }
3859
4167
 
3860
- .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link {
4168
+ .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link, .utrecht-link-button:focus:not(:focus-visible) {
3861
4169
  /* undo focus ring */
3862
4170
  box-shadow: none;
3863
4171
  outline-style: none;
@@ -4511,7 +4819,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
4511
4819
  `text-decoration-skip` also makes the transition more challenging to implement.
4512
4820
 
4513
4821
  */
4514
- .utrecht-link, .utrecht-html a:link {
4822
+ .utrecht-link, .utrecht-link-button, .utrecht-html a:link {
4515
4823
  color: var(--utrecht-link-color, blue);
4516
4824
  text-decoration: var(--utrecht-link-text-decoration, underline);
4517
4825
  text-decoration-skip-ink: all;
@@ -4529,14 +4837,15 @@ however browsers don't seem to have implemented great looking supixel tweening y
4529
4837
  text-decoration: none;
4530
4838
  }
4531
4839
 
4532
- .utrecht-link:visited,
4840
+ .utrecht-link:visited, .utrecht-link-button:visited,
4533
4841
  .utrecht-link--visited,
4534
4842
  .utrecht-html a:visited {
4535
4843
  color: var(--utrecht-link-visited-color, var(--utrecht-link-color));
4536
4844
  }
4537
4845
 
4538
- .utrecht-link:hover,
4846
+ .utrecht-link:hover, .utrecht-link-button:hover,
4539
4847
  .utrecht-link--hover,
4848
+ .utrecht-link-button--hover,
4540
4849
  .utrecht-html a:hover {
4541
4850
  color: var(--utrecht-link-hover-color, var(--utrecht-link-color));
4542
4851
  text-decoration: var(--utrecht-link-hover-text-decoration, var(--utrecht-link-text-decoration, underline));
@@ -4545,13 +4854,14 @@ however browsers don't seem to have implemented great looking supixel tweening y
4545
4854
  text-decoration-thickness: max(var(--utrecht-link-hover-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
4546
4855
  }
4547
4856
 
4548
- .utrecht-link:active,
4857
+ .utrecht-link:active, .utrecht-link-button:active,
4549
4858
  .utrecht-link--active,
4859
+ .utrecht-link-button--active,
4550
4860
  .utrecht-html a:active {
4551
4861
  color: var(--utrecht-link-active-color, var(--utrecht-link-color));
4552
4862
  }
4553
4863
 
4554
- .utrecht-link--focus, .utrecht-link:focus, .utrecht-html a:focus {
4864
+ .utrecht-link--focus, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus, .utrecht-html a:focus {
4555
4865
  color: var(--utrecht-link-focus-color, var(--utrecht-link-color));
4556
4866
  text-decoration: var(--utrecht-link-focus-text-decoration, var(--utrecht-link-text-decoration, underline));
4557
4867
  text-decoration-skip: none;
@@ -4559,7 +4869,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
4559
4869
  text-decoration-thickness: max(var(--utrecht-link-focus-text-decoration-thickness, var(--utrecht-link-text-decoration-thickness)), 1px);
4560
4870
  }
4561
4871
 
4562
- .utrecht-link--focus-visible, .utrecht-link:focus, .utrecht-html a:focus {
4872
+ .utrecht-link--focus-visible, .utrecht-link:focus, .utrecht-link-button:focus, .utrecht-link-button--focus-visible, .utrecht-html a:focus {
4563
4873
  box-shadow: 0 0 0 var(--utrecht-focus-box-shadow-spread-radius, 0) var(--utrecht-focus-box-shadow-color, transparent);
4564
4874
  outline-color: var(--utrecht-focus-outline-color, transparent);
4565
4875
  outline-offset: var(--utrecht-focus-outline-offset, 0);
@@ -4567,7 +4877,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
4567
4877
  outline-width: var(--utrecht-focus-outline-width, 0);
4568
4878
  }
4569
4879
 
4570
- .utrecht-link:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link {
4880
+ .utrecht-link:focus:not(:focus-visible), .utrecht-link-button:focus:not(:focus-visible), .utrecht-html a:focus:not(:focus-visible):link {
4571
4881
  /* undo focus ring */
4572
4882
  box-shadow: none;
4573
4883
  outline-style: none;
@@ -5234,7 +5544,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
5234
5544
  /* Collection of CSS variables for Utrecht theme applied to `:root` */
5235
5545
  /**
5236
5546
  * Do not edit directly
5237
- * Generated on Sat, 14 May 2022 12:04:02 GMT
5547
+ * Generated on Sat, 14 May 2022 13:56:55 GMT
5238
5548
  */
5239
5549
  .utrecht-theme {
5240
5550
  --denhaag-process-steps-sub-step-heading-font-weight: utrecht.typography.weight-scale.normal.font-weight;
@@ -5580,6 +5890,7 @@ however browsers don't seem to have implemented great looking supixel tweening y
5580
5890
  --utrecht-space-block-3xs: 2px;
5581
5891
  /* Extra Small 3 */
5582
5892
  --utrecht-action-submit-cursor: pointer;
5893
+ --utrecht-action-navigate-cursor: pointer;
5583
5894
  --utrecht-action-disabled-cursor: not-allowed;
5584
5895
  --utrecht-action-busy-cursor: wait;
5585
5896
  --utrecht-button-focus-transform-scale: 1.02;
@@ -5,7 +5,7 @@
5
5
  /* Collection of CSS variables for Utrecht theme applied to `:root` */
6
6
  /**
7
7
  * Do not edit directly
8
- * Generated on Sat, 14 May 2022 12:04:02 GMT
8
+ * Generated on Sat, 14 May 2022 13:56:55 GMT
9
9
  */
10
10
  .utrecht-theme {
11
11
  --denhaag-process-steps-sub-step-heading-font-weight: utrecht.typography.weight-scale.normal.font-weight;
@@ -351,6 +351,7 @@
351
351
  --utrecht-space-block-3xs: 2px;
352
352
  /* Extra Small 3 */
353
353
  --utrecht-action-submit-cursor: pointer;
354
+ --utrecht-action-navigate-cursor: pointer;
354
355
  --utrecht-action-disabled-cursor: not-allowed;
355
356
  --utrecht-action-busy-cursor: wait;
356
357
  --utrecht-button-focus-transform-scale: 1.02;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-alpha.208",
2
+ "version": "1.0.0-alpha.209",
3
3
  "author": "Community for NL Design System",
4
4
  "description": "Component library bundle for the Municipality of Utrecht based on the NL Design System architecture",
5
5
  "license": "EUPL-1.2",
@@ -16,7 +16,7 @@
16
16
  "url": "git@github.com:nl-design-system/utrecht.git"
17
17
  },
18
18
  "devDependencies": {
19
- "@utrecht/design-tokens": "1.0.0-alpha.201",
19
+ "@utrecht/design-tokens": "1.0.0-alpha.202",
20
20
  "node-sass-package-importer": "5.3.2",
21
21
  "rimraf": "3.0.2",
22
22
  "sass": "1.50.1"
@@ -26,5 +26,5 @@
26
26
  "build": "sass src/:dist/ --load-path=../../node_modules/ --no-source-map",
27
27
  "clean": "rimraf dist/"
28
28
  },
29
- "gitHead": "6cdfa3731ad2ef4e2e43add8c193d9f311e045c8"
29
+ "gitHead": "2cf2c1bc155fc767995dedf10f623a4dc5eb6c81"
30
30
  }
package/src/bem.scss CHANGED
@@ -25,6 +25,7 @@
25
25
  @import "../../../components/breadcrumb/css";
26
26
  @import "../../../components/button/bem";
27
27
  @import "../../../components/button-group/css";
28
+ @import "../../../components/button-link/css";
28
29
  @import "../../../components/checkbox/css";
29
30
  @import "../../../components/custom-checkbox/css";
30
31
  @import "../../../components/digid-button/css";
@@ -47,6 +48,7 @@
47
48
  @import "../../../components/heading-5/bem";
48
49
  @import "../../../components/heading-6/bem";
49
50
  @import "../../../components/link-list/css";
51
+ @import "../../../components/link-button/css";
50
52
  @import "../../../components/link-social/css";
51
53
  @import "../../../components/link/css";
52
54
  @import "../../../components/logo-button/css";