@hawiyah/styles 0.0.0-stage → 0.2.1

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 (135) hide show
  1. package/LICENSE +73 -0
  2. package/NOTICE +34 -0
  3. package/README.md +246 -2
  4. package/dist/accordion-motion.css +18 -0
  5. package/dist/assets/external-link.svg +1 -0
  6. package/dist/assets/favicon.svg +4 -0
  7. package/dist/assets/fonts/riyal-LICENSE.txt +93 -0
  8. package/dist/assets/fonts/riyal-provenance.json +47 -0
  9. package/dist/assets/fonts/riyal.woff2 +0 -0
  10. package/dist/assets/hawiyah-loader-256.gif +0 -0
  11. package/dist/assets/hawiyah-loader-white-256.gif +0 -0
  12. package/dist/assets/hawiyah-loader-white.gif +0 -0
  13. package/dist/assets/hawiyah-loader.gif +0 -0
  14. package/dist/assets/hawiyah-lockup-ar-mono.svg +4 -0
  15. package/dist/assets/hawiyah-lockup-ar-reverse.svg +4 -0
  16. package/dist/assets/hawiyah-lockup-ar-white.svg +4 -0
  17. package/dist/assets/hawiyah-lockup-ar.svg +4 -0
  18. package/dist/assets/hawiyah-lockup-bilingual-mono.svg +4 -0
  19. package/dist/assets/hawiyah-lockup-bilingual-reverse.svg +4 -0
  20. package/dist/assets/hawiyah-lockup-bilingual-white.svg +4 -0
  21. package/dist/assets/hawiyah-lockup-bilingual.svg +4 -0
  22. package/dist/assets/hawiyah-lockup-en-mono.svg +4 -0
  23. package/dist/assets/hawiyah-lockup-en-reverse.svg +4 -0
  24. package/dist/assets/hawiyah-lockup-en-white.svg +4 -0
  25. package/dist/assets/hawiyah-lockup-en.svg +4 -0
  26. package/dist/assets/hawiyah-pattern.svg +4 -0
  27. package/dist/assets/hawiyah-symbol-mono.svg +4 -0
  28. package/dist/assets/hawiyah-symbol-reverse.svg +4 -0
  29. package/dist/assets/hawiyah-symbol-white.svg +4 -0
  30. package/dist/assets/hawiyah-symbol.svg +4 -0
  31. package/dist/assets/hawiyah-wordmark-loader-256.gif +0 -0
  32. package/dist/assets/hawiyah-wordmark-loader-white-256.gif +0 -0
  33. package/dist/assets/hawiyah-wordmark-loader-white.gif +0 -0
  34. package/dist/assets/hawiyah-wordmark-loader.gif +0 -0
  35. package/dist/assets/hawiyah-wordmark-mono.svg +4 -0
  36. package/dist/assets/hawiyah-wordmark-reverse.svg +4 -0
  37. package/dist/assets/hawiyah-wordmark-white.svg +4 -0
  38. package/dist/assets/hawiyah-wordmark.svg +4 -0
  39. package/dist/assets/icons/LICENSE +21 -0
  40. package/dist/assets/icons/add-01.svg +4 -0
  41. package/dist/assets/icons/alert-02.svg +5 -0
  42. package/dist/assets/icons/arrow-data-transfer-vertical.svg +4 -0
  43. package/dist/assets/icons/arrow-down-01.svg +3 -0
  44. package/dist/assets/icons/arrow-down-02.svg +4 -0
  45. package/dist/assets/icons/arrow-left-01.svg +3 -0
  46. package/dist/assets/icons/arrow-left-02.svg +4 -0
  47. package/dist/assets/icons/arrow-right-01.svg +3 -0
  48. package/dist/assets/icons/arrow-right-02.svg +4 -0
  49. package/dist/assets/icons/arrow-up-01.svg +3 -0
  50. package/dist/assets/icons/arrow-up-02.svg +4 -0
  51. package/dist/assets/icons/arrow-up-right-01.svg +3 -0
  52. package/dist/assets/icons/calendar-03.svg +6 -0
  53. package/dist/assets/icons/cancel-01.svg +3 -0
  54. package/dist/assets/icons/cancel-circle.svg +4 -0
  55. package/dist/assets/icons/checkmark-circle-02.svg +4 -0
  56. package/dist/assets/icons/exclamation-mark.svg +4 -0
  57. package/dist/assets/icons/filter-horizontal.svg +8 -0
  58. package/dist/assets/icons/home-01.svg +3 -0
  59. package/dist/assets/icons/information-circle.svg +5 -0
  60. package/dist/assets/icons/link-04.svg +4 -0
  61. package/dist/assets/icons/link-square-02.svg +4 -0
  62. package/dist/assets/icons/lock-password.svg +7 -0
  63. package/dist/assets/icons/menu-01.svg +5 -0
  64. package/dist/assets/icons/minus-sign-circle.svg +4 -0
  65. package/dist/assets/icons/minus-sign.svg +3 -0
  66. package/dist/assets/icons/provenance.json +403 -0
  67. package/dist/assets/icons/search-01.svg +4 -0
  68. package/dist/assets/icons/sorting-05.svg +8 -0
  69. package/dist/assets/icons/star.svg +3 -0
  70. package/dist/assets/icons/thumbs-down.svg +4 -0
  71. package/dist/assets/icons/thumbs-up.svg +4 -0
  72. package/dist/assets/icons/tick-02.svg +3 -0
  73. package/dist/assets/icons/view-off-slash.svg +5 -0
  74. package/dist/assets/icons/view.svg +4 -0
  75. package/dist/assets/notifications/danger-outline.svg +3 -0
  76. package/dist/assets/notifications/danger.svg +4 -0
  77. package/dist/assets/notifications/info-outline.svg +3 -0
  78. package/dist/assets/notifications/info.svg +4 -0
  79. package/dist/assets/notifications/neutral-outline.svg +3 -0
  80. package/dist/assets/notifications/neutral.svg +4 -0
  81. package/dist/assets/notifications/success-outline.svg +3 -0
  82. package/dist/assets/notifications/success.svg +4 -0
  83. package/dist/assets/notifications/warning-outline.svg +3 -0
  84. package/dist/assets/notifications/warning.svg +4 -0
  85. package/dist/assets/pagination-arrow.svg +1 -0
  86. package/dist/assets/select-down.svg +4 -0
  87. package/dist/assets/select-up.svg +4 -0
  88. package/dist/brand-loader.css +12 -0
  89. package/dist/components.css +335 -0
  90. package/dist/content-navigation.css +44 -0
  91. package/dist/date-picker.css +50 -0
  92. package/dist/dga.css +316 -0
  93. package/dist/direction.css +14 -0
  94. package/dist/extended.css +310 -0
  95. package/dist/feedback.css +48 -0
  96. package/dist/file-upload-list.css +64 -0
  97. package/dist/icons.css +67 -0
  98. package/dist/layout.css +129 -0
  99. package/dist/link-composition.css +10 -0
  100. package/dist/mobile-navigation.css +43 -0
  101. package/dist/mobile-top-bar.css +15 -0
  102. package/dist/navigation-drawer.css +104 -0
  103. package/dist/nic-accordion.css +97 -0
  104. package/dist/nic-avatars.css +33 -0
  105. package/dist/nic-badges.css +56 -0
  106. package/dist/nic-buttons.css +80 -0
  107. package/dist/nic-cards.css +77 -0
  108. package/dist/nic-carousel.css +77 -0
  109. package/dist/nic-choices.css +64 -0
  110. package/dist/nic-footer.css +73 -0
  111. package/dist/nic-foundations.css +115 -0
  112. package/dist/nic-icons.css +72 -0
  113. package/dist/nic-input-groups.css +35 -0
  114. package/dist/nic-links.css +61 -0
  115. package/dist/nic-lists.css +68 -0
  116. package/dist/nic-notification-dialog.css +115 -0
  117. package/dist/nic-notifications.css +126 -0
  118. package/dist/nic-pagination.css +73 -0
  119. package/dist/nic-rating.css +53 -0
  120. package/dist/nic-search.css +70 -0
  121. package/dist/nic-segmented.css +117 -0
  122. package/dist/nic-select.css +51 -0
  123. package/dist/nic-tables.css +68 -0
  124. package/dist/nic-tabs.css +86 -0
  125. package/dist/password-field.css +16 -0
  126. package/dist/portal-branches.css +52 -0
  127. package/dist/portal.css +24 -0
  128. package/dist/reset.css +12 -0
  129. package/dist/riyal.css +32 -0
  130. package/dist/search-field.css +11 -0
  131. package/dist/site-verification.css +36 -0
  132. package/dist/stepper.css +46 -0
  133. package/dist/styles.css +49 -0
  134. package/dist/tooltip-placement.css +65 -0
  135. package/package.json +51 -3
@@ -0,0 +1,310 @@
1
+ /* Extended native controls and platform compositions. These recipes never
2
+ provide interaction semantics on their own; use the native adapters. */
3
+ :where(.hw-input-group, .hw-password-field, .hw-search-field, .hw-number-field,
4
+ .hw-range-slider, .hw-rating, .hw-tag-input, .hw-multi-select, .hw-calendar,
5
+ .hw-date-picker, .hw-file-dropzone, .hw-toggle-group, .hw-popover, .hw-menu,
6
+ .hw-drawer, .hw-toast-region, .hw-collapsible, .hw-tree-view, .hw-carousel,
7
+ .hw-description-list, .hw-stat, .hw-meter, .hw-avatar-group, .hw-data-table,
8
+ .hw-service-card, .hw-service-details, .hw-portal-header, .hw-portal-footer,
9
+ .hw-feedback, .hw-cookie-consent, .hw-notification-list) {
10
+ box-sizing: border-box;
11
+ min-inline-size: 0;
12
+ color: var(--hw-color-text);
13
+ font-family: var(--hw-font-sans);
14
+ font-size: var(--hw-text-md);
15
+ line-height: var(--hw-leading-normal);
16
+ }
17
+ :where(.hw-link, .hw-icon-button, .hw-slider, .hw-calendar-day,
18
+ .hw-toggle-group button, .hw-menu-item, :is(.hw-tree-item, .hw-tree-view [role='treeitem']),
19
+ .hw-data-table th button, .hw-collapsible-trigger,
20
+ .hw-collapsible > summary, .hw-collapsible > button,
21
+ .hw-carousel button, .hw-portal-header a, .hw-portal-footer a,
22
+ .hw-file-dropzone input, .hw-notification a):focus-visible {
23
+ outline: var(--hw-focus-width) solid var(--hw-color-focus);
24
+ outline-offset: var(--hw-focus-offset);
25
+ }
26
+
27
+ /* Input compositions preserve native inputs, labels and form semantics. */
28
+ .hw-input-group { display: flex; align-items: stretch; inline-size: 100%; }
29
+ .hw-input-group > :where(.hw-input, .hw-select, input, select, .hw-field) { position: relative; flex: 1 1 0%; min-inline-size: 0; }
30
+ .hw-input-group > :not(:first-child) { margin-inline-start: -1px; border-start-start-radius: 0; border-end-start-radius: 0; }
31
+ .hw-input-group > :not(:last-child) { border-start-end-radius: 0; border-end-end-radius: 0; }
32
+ .hw-input-group > :focus-visible, .hw-input-group > :focus-within { z-index: 1; }
33
+ .hw-input-addon { display: inline-flex; flex: none; align-items: center; justify-content: center; gap: var(--hw-space-2); padding-inline: var(--hw-space-3); border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-md); background: var(--hw-color-surface-muted); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); white-space: nowrap; }
34
+ .hw-input-group > .hw-button { flex: none; }
35
+ :is(.hw-password-field, .hw-search-field, .hw-date-picker):not(.hw-field) { display: flex; align-items: end; gap: var(--hw-space-2); }
36
+ :is(.hw-password-field, .hw-search-field, .hw-date-picker) > :is(.hw-field, .hw-input) { flex: 1; min-inline-size: 0; }
37
+ .hw-number-field input, input.hw-number-field { font-variant-numeric: tabular-nums; }
38
+ .hw-slider, .hw-range-slider input[type='range'] { box-sizing: border-box; appearance: none; display: block; inline-size: 100%; min-inline-size: 0; block-size: var(--hw-control-height); margin: 0; padding: 0; border: 0; border-radius: var(--hw-radius-sm); background: transparent; color: var(--hw-color-primary); accent-color: var(--hw-color-primary); cursor: pointer; }
39
+ :is(.hw-slider, .hw-range-slider input[type='range'])::-webkit-slider-runnable-track { block-size: 0.375rem; border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); }
40
+ :is(.hw-slider, .hw-range-slider input[type='range'])::-webkit-slider-thumb { appearance: none; inline-size: 1.25rem; block-size: 1.25rem; margin-block-start: -0.5rem; border: 2px solid var(--hw-color-surface); border-radius: 50%; background: var(--hw-color-primary); box-shadow: 0 0 0 1px var(--hw-color-primary); }
41
+ :is(.hw-slider, .hw-range-slider input[type='range'])::-moz-range-track { block-size: 0.25rem; border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); }
42
+ :is(.hw-slider, .hw-range-slider input[type='range'])::-moz-range-progress { block-size: 0.375rem; border-radius: var(--hw-radius-full); background: var(--hw-color-primary); }
43
+ :is(.hw-slider, .hw-range-slider input[type='range'])::-moz-range-thumb { inline-size: 1rem; block-size: 1rem; border: 2px solid var(--hw-color-surface); border-radius: 50%; background: var(--hw-color-primary); box-shadow: 0 0 0 1px var(--hw-color-primary); }
44
+ :is(.hw-slider, .hw-range-slider input[type='range']):disabled { opacity: 0.5; cursor: not-allowed; }
45
+ .hw-range-slider { display: grid; gap: var(--hw-density-gap); margin: 0; padding: 0; border: 0; }
46
+ .hw-range-slider legend { padding: 0; margin-block-end: var(--hw-space-2); }
47
+ .hw-range-slider :is(label, output) { font-size: var(--hw-text-sm); font-variant-numeric: tabular-nums; }
48
+ .hw-range-slider output { display: block; color: var(--hw-color-text-muted); }
49
+ .hw-rating { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-1); margin: 0; padding: 0; border: 0; }
50
+ .hw-rating > legend { padding: 0; margin-block-end: var(--hw-space-2); }
51
+ .hw-rating label { position: relative; display: inline-grid; place-items: center; min-inline-size: 2.5rem; min-block-size: var(--hw-control-height); border-radius: var(--hw-radius-sm); color: var(--hw-color-primary-text); font-size: 1.75rem; line-height: 1; cursor: pointer; }
52
+ .hw-rating label input { position: absolute; inline-size: 1px; block-size: 1px; margin: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
53
+ .hw-rating label:has(input:focus-visible) { outline: var(--hw-focus-width) solid var(--hw-color-focus); outline-offset: 1px; }
54
+ .hw-rating label > span[aria-hidden='true'] { color: var(--hw-color-text-muted); }
55
+ .hw-rating label:is(:has(input:checked), :has(~ label input:checked)) { background: var(--hw-color-primary-subtle); }
56
+ .hw-rating label:is(:has(input:checked), :has(~ label input:checked)) > span[aria-hidden='true'] { color: var(--hw-color-primary-text); }
57
+ @media (hover: hover) {
58
+ .hw-rating:not([data-hw-readonly='true']):not([aria-readonly='true']):has(label:hover input:not(:disabled)) label { background: transparent; }
59
+ .hw-rating:not([data-hw-readonly='true']):not([aria-readonly='true']):has(label:hover input:not(:disabled)) label > span[aria-hidden='true'] { color: var(--hw-color-text-muted); }
60
+ .hw-rating:not([data-hw-readonly='true']):not([aria-readonly='true']):has(label:hover input:not(:disabled)) label:is(:hover, :has(~ label:hover input:not(:disabled))) { background: var(--hw-color-primary-subtle); }
61
+ .hw-rating:not([data-hw-readonly='true']):not([aria-readonly='true']):has(label:hover input:not(:disabled)) label:is(:hover, :has(~ label:hover input:not(:disabled))) > span[aria-hidden='true'] { color: var(--hw-color-primary-text); }
62
+ }
63
+ .hw-rating:is([data-hw-readonly='true'], [aria-readonly='true']) label { cursor: default; }
64
+ .hw-rating label:has(input:disabled) { opacity: 0.5; cursor: not-allowed; }
65
+ .hw-rating > :is(.hw-hint, .hw-error) { flex-basis: 100%; }
66
+ input.hw-pin-input, .hw-pin-input input:not([type='hidden']) { inline-size: min(100%, 23ch); min-block-size: var(--hw-control-height-lg); padding-inline: var(--hw-space-4); direction: ltr; font-family: var(--hw-font-mono); font-size: var(--hw-text-xl); font-variant-numeric: tabular-nums; letter-spacing: 0.6em; text-align: center; }
67
+ .hw-pin-input[data-size='sm'] { min-block-size: var(--hw-control-height); font-size: var(--hw-text-md); }
68
+ .hw-tag-input { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); min-block-size: var(--hw-control-height); padding: var(--hw-space-2); border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-md); background: var(--hw-color-surface); }
69
+ .hw-tag-input:focus-within { outline: 2px solid var(--hw-color-focus); outline-offset: -2px; border-color: var(--hw-color-primary); }
70
+ .hw-tag-input:has([aria-invalid='true']) { border-color: var(--hw-color-danger); }
71
+ .hw-tag-input > ul { display: contents; margin: 0; padding: 0; list-style: none; }
72
+ .hw-tag-input > input:not([type='hidden']) { flex: 1 1 8rem; inline-size: auto; min-inline-size: min(100%, 8rem); min-block-size: 2rem; padding: var(--hw-space-1); border: 0; border-radius: var(--hw-radius-sm); background: transparent; }
73
+ .hw-tag-input > input:focus-visible { outline: none; box-shadow: none; }
74
+ .hw-tag-input:has(input:disabled) { background: var(--hw-color-disabled); }
75
+ .hw-tag-input .hw-chip { max-inline-size: 100%; overflow-wrap: anywhere; }
76
+ .hw-multi-select { display: grid; gap: var(--hw-space-3); margin: 0; padding: var(--hw-space-4); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }
77
+ .hw-multi-select > legend { padding-inline: var(--hw-space-1); }
78
+ .hw-multi-select-options, .hw-multi-select > [role='group'] { position: relative; display: grid; gap: var(--hw-space-1); max-block-size: 16rem; overflow: auto; overscroll-behavior: contain; margin: 0; padding: 3px; }
79
+ .hw-multi-select-options > label { padding-inline: var(--hw-space-2); border-radius: var(--hw-radius-sm); font-size: var(--hw-text-sm); }
80
+ .hw-multi-select-options > label:has(input:checked) { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }
81
+ .hw-multi-select-options > label:hover:not(:has(input:disabled)) { background: var(--hw-color-surface-muted); }
82
+ .hw-multi-select > p { margin: 0; font-size: var(--hw-text-sm); color: var(--hw-color-text-muted); }
83
+ .hw-file-dropzone { display: grid; justify-items: center; gap: var(--hw-space-3); padding: var(--hw-space-8) var(--hw-space-5); border: 1.5px dashed var(--hw-color-border-strong); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); text-align: center; transition: background-color var(--hw-duration-fast), border-color var(--hw-duration-fast); }
84
+ .hw-file-dropzone p { max-inline-size: 100%; margin: 0; overflow-wrap: anywhere; }
85
+ .hw-file-dropzone > :is(svg, .hw-file-dropzone-icon) { color: var(--hw-color-primary); }
86
+ .hw-file-dropzone input[type='file'] { max-inline-size: 100%; font-size: var(--hw-text-sm); }
87
+ .hw-file-dropzone :is(.hw-hint, [role='status']) { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
88
+ .hw-file-dropzone:focus-within, .hw-file-dropzone[data-dragging='true'], .hw-file-dropzone[data-state='dragging'] { border-color: var(--hw-color-primary); background: var(--hw-color-primary-subtle); }
89
+ .hw-file-dropzone[data-state='error'], .hw-file-dropzone:has([aria-invalid='true']) { border-color: var(--hw-color-danger); }
90
+ .hw-file-dropzone:has(input:disabled) { border-style: solid; background: var(--hw-color-disabled); color: var(--hw-color-on-disabled); }
91
+
92
+ /* Calendar has seven stable columns and no fixed pixel width assumption. */
93
+ .hw-calendar { inline-size: min(100%, 23rem); padding: var(--hw-space-4); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }
94
+ .hw-calendar-header, .hw-calendar-toolbar { display: flex; align-items: center; justify-content: space-between; gap: var(--hw-space-2); margin-block-end: var(--hw-space-3); }
95
+ :is(.hw-calendar-header, .hw-calendar-toolbar) > :is(h2, h3, span, strong) { flex: 1; min-inline-size: 0; margin: 0; font-size: var(--hw-text-md); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); text-align: center; overflow-wrap: anywhere; }
96
+ :is(.hw-calendar-header, .hw-calendar-toolbar) .hw-button { min-inline-size: 2.75rem; min-block-size: 2.75rem; max-inline-size: 32%; padding: var(--hw-space-1) var(--hw-space-2); font-size: var(--hw-text-sm); overflow-wrap: anywhere; }
97
+ .hw-calendar :is(.hw-calendar-prev, .hw-calendar-next) { flex: none; inline-size: 2.75rem; max-inline-size: 2.75rem; padding: 0; gap: 0; font-size: 0; }
98
+ .hw-calendar :is(.hw-calendar-prev, .hw-calendar-next)::before { content: ''; display: block; inline-size: 1.5rem; block-size: 1.5rem; background-color: currentColor; -webkit-mask: var(--hw-calendar-arrow) center / contain no-repeat; mask: var(--hw-calendar-arrow) center / contain no-repeat; }
99
+ .hw-calendar-prev { --hw-calendar-arrow: url('./assets/icons/arrow-left-01.svg'); }
100
+ .hw-calendar-next { --hw-calendar-arrow: url('./assets/icons/arrow-right-01.svg'); }
101
+ .hw-calendar :is(.hw-calendar-prev, .hw-calendar-next)::before { --_hw-mirror: var(--_hw-rtl-only) scaleX(-1); transform: var(--_hw-mirror, none); }
102
+ @media (forced-colors: active) {
103
+ .hw-calendar :is(.hw-calendar-prev, .hw-calendar-next)::before { forced-color-adjust: none; background-color: ButtonText; }
104
+ .hw-calendar :is(.hw-calendar-prev, .hw-calendar-next):disabled::before { background-color: GrayText; }
105
+ }
106
+ .hw-calendar-grid, .hw-calendar > table { inline-size: 100%; table-layout: fixed; border-collapse: separate; border-spacing: 0.125rem; }
107
+ :is(.hw-calendar-grid, .hw-calendar > table) :is(th, td) { padding: 0; text-align: center; vertical-align: middle; }
108
+ :is(.hw-calendar-grid, .hw-calendar > table) th, .hw-calendar-weekday { padding-block: var(--hw-space-2); color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); font-weight: var(--hw-weight-medium); white-space: nowrap; }
109
+ .hw-calendar-day { position: relative; box-sizing: border-box; display: inline-grid; place-items: center; inline-size: 100%; min-block-size: 2.75rem; padding: var(--hw-space-1); border: 1px solid transparent; border-radius: var(--hw-radius-sm); background: transparent; color: var(--hw-color-text); font: inherit; font-size: var(--hw-text-md); font-variant-numeric: tabular-nums; cursor: pointer; }
110
+ .hw-calendar-day:hover:not(:disabled, [aria-disabled='true']) { background: var(--hw-color-surface-muted); }
111
+ .hw-calendar-day[data-outside='true'], .hw-calendar-day[data-outside=''] { color: var(--hw-color-text-subtle); }
112
+ .hw-calendar-day:is([data-today='true'], [data-today=''], [aria-current='date']) { border-color: var(--hw-color-primary); font-weight: var(--hw-weight-semibold); }
113
+ .hw-calendar-day:is([aria-selected='true'], [data-selected='true']), [aria-selected='true'] > .hw-calendar-day { background: var(--hw-color-primary); color: var(--hw-color-on-primary); font-weight: var(--hw-weight-semibold); }
114
+ .hw-calendar-day:is([aria-selected='true'], [data-selected='true']):hover:not(:disabled), [aria-selected='true'] > .hw-calendar-day:hover:not(:disabled) { background: var(--hw-color-primary-hover); }
115
+ .hw-calendar-day:disabled { opacity: 0.45; text-decoration: line-through; cursor: not-allowed; }
116
+ .hw-calendar-day[aria-disabled='true'] { cursor: default; }
117
+ .hw-calendar-day:focus-visible { z-index: 1; outline-offset: -3px; }
118
+ .hw-date-picker:not(.hw-field) { flex-wrap: wrap; }
119
+ .hw-date-picker > :is(.hw-input-group, .hw-date-picker-value, .hw-error) { flex: 0 0 100%; min-inline-size: 0; }
120
+ .hw-date-picker-value { overflow-wrap: anywhere; }
121
+ .hw-date-picker .hw-dialog { inline-size: min(26rem, calc(100vw - 2rem)); white-space: normal; }
122
+ .hw-date-picker .hw-dialog-header { align-items: center; }
123
+ .hw-date-picker .hw-dialog-header > h2 { min-inline-size: 0; overflow-wrap: anywhere; }
124
+ .hw-date-picker .hw-dialog-header > .hw-button { flex: none; min-inline-size: 2.75rem; min-block-size: 2.75rem; }
125
+ .hw-date-picker .hw-dialog .hw-calendar { inline-size: 100%; margin-inline: auto; padding: 0; border: 0; background: transparent; }
126
+ .hw-calendar-system { display: grid; gap: var(--hw-space-1); margin-block-end: var(--hw-space-3); }
127
+ .hw-calendar-range { display: grid; gap: var(--hw-space-1); text-align: center; }
128
+ .hw-calendar-range > bdi { white-space: nowrap; }
129
+ .hw-date-picker .hw-dialog-body > .hw-field { margin-block-end: var(--hw-space-3); }
130
+ @media (max-width: 25rem) {
131
+ .hw-date-picker :is(.hw-dialog-header, .hw-dialog-body) { padding-inline: var(--hw-space-3); }
132
+ }
133
+
134
+ /* Selection, disclosure, overlays and live feedback. */
135
+ .hw-toggle-group { display: inline-flex; flex-wrap: wrap; gap: var(--hw-space-1); max-inline-size: 100%; margin: 0; padding: var(--hw-space-1); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-md); background: var(--hw-color-surface-muted); }
136
+ .hw-toggle-group > legend { padding-inline: var(--hw-space-1); font-size: var(--hw-text-sm); font-weight: var(--hw-weight-semibold); }
137
+ .hw-toggle-group > :is(button, label) { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: var(--hw-space-2); min-block-size: var(--hw-control-height-sm); padding: var(--hw-space-1) var(--hw-space-3); border: 1px solid transparent; border-radius: var(--hw-radius-sm); background: transparent; color: var(--hw-color-text-muted); font: inherit; font-size: var(--hw-text-sm); font-weight: var(--hw-weight-medium); cursor: pointer; }
138
+ .hw-toggle-group > label input { position: absolute; inline-size: 1px; block-size: 1px; clip-path: inset(50%); }
139
+ .hw-toggle-group > label:has(input:focus-visible) { outline: var(--hw-focus-width) solid var(--hw-color-focus); outline-offset: 1px; }
140
+ .hw-toggle-group > :is([aria-pressed='true'], label:has(input:checked)) { border-color: var(--hw-color-border); background: var(--hw-color-surface); color: var(--hw-color-primary-text); box-shadow: var(--hw-shadow-sm); }
141
+ .hw-toggle-group > :is(button, label):hover:not(:disabled, :has(input:disabled)) { color: var(--hw-color-primary-text); }
142
+ .hw-toggle-group > :is(button:disabled, label:has(input:disabled)) { color: var(--hw-color-on-disabled); cursor: not-allowed; }
143
+ .hw-toggle-group[data-variant='outline'] { gap: 0; padding: 0; background: var(--hw-color-surface); border-color: var(--hw-color-border-strong); }
144
+ .hw-toggle-group[data-variant='outline'] > :is(button, label) { border-radius: 0; border: 0; }
145
+ .hw-toggle-group[data-variant='outline'] > :is(button, label) + :is(button, label) { border-inline-start: 1px solid var(--hw-color-border); }
146
+ .hw-toggle-group[data-variant='outline'] > :is([aria-pressed='true'], label:has(input:checked)) { background: var(--hw-color-primary-subtle); box-shadow: none; }
147
+ .hw-popover, .hw-menu { position: relative; display: inline-block; max-inline-size: 100%; }
148
+ .hw-popover > :is([data-hw-panel], .hw-popover-content, .hw-popover-panel, [data-hw-popover-panel]), .hw-menu > :is([role='menu'], [data-hw-panel], .hw-menu-content) { position: absolute; z-index: var(--hw-z-popover); inset-block-start: calc(100% + var(--hw-space-2)); inset-inline-start: 0; inline-size: max-content; max-inline-size: min(24rem, calc(100vw - 2rem)); margin: 0; padding: var(--hw-space-4); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface-raised); color: var(--hw-color-text); box-shadow: var(--hw-shadow-md); }
149
+ .hw-popover[data-side='top'] > :is([data-hw-panel], .hw-popover-content, .hw-popover-panel), .hw-menu[data-side='top'] > :is([role='menu'], [data-hw-panel], .hw-menu-content) { inset-block-start: auto; inset-block-end: calc(100% + var(--hw-space-2)); }
150
+ :is(.hw-popover, .hw-menu)[data-align='end'] > :is([data-hw-panel], .hw-popover-content, .hw-popover-panel, [role='menu'], .hw-menu-content) { inset-inline-start: auto; inset-inline-end: 0; }
151
+ .hw-popover-content > :first-child { margin-block-start: 0; }.hw-popover-content > :last-child { margin-block-end: 0; }
152
+ .hw-menu > :is([role='menu'], [data-hw-panel], .hw-menu-content) { min-inline-size: 12rem; padding: var(--hw-space-1); border-radius: var(--hw-radius-md); list-style: none; }
153
+ .hw-menu-item, .hw-menu [role='menuitem'], .hw-menu [role='menuitemcheckbox'], .hw-menu [role='menuitemradio'] { display: flex; align-items: center; gap: var(--hw-space-3); inline-size: 100%; min-block-size: var(--hw-control-height-sm); padding: var(--hw-space-2) var(--hw-space-3); border: 0; border-radius: var(--hw-radius-sm); background: transparent; color: var(--hw-color-text); font: inherit; font-size: var(--hw-text-sm); text-align: start; text-decoration: none; cursor: pointer; }
154
+ .hw-menu-item:hover:not(:disabled, [aria-disabled='true']), .hw-menu [role^='menuitem']:hover:not(:disabled, [aria-disabled='true']), .hw-menu [role^='menuitem']:focus-visible { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }
155
+ .hw-menu :is([role='separator'], hr) { margin-block: var(--hw-space-1); border: 0; border-block-start: 1px solid var(--hw-color-border); }
156
+ .hw-menu :is([aria-disabled='true'], :disabled) { color: var(--hw-color-on-disabled); cursor: not-allowed; }
157
+ .hw-menu-item[data-tone='danger'] { color: var(--hw-color-danger); }
158
+ .hw-drawer { position: fixed; inset-block: 0; inset-inline: auto 0; inline-size: min(28rem, calc(100vw - 1rem)); max-inline-size: none; block-size: 100dvh; max-block-size: 100dvh; margin: 0; padding: 0; overflow: auto; overscroll-behavior: contain; border: 1px solid var(--hw-color-border); border-radius: 0; background: var(--hw-color-surface-raised); color: var(--hw-color-text); box-shadow: var(--hw-shadow-lg); }
159
+ .hw-drawer::backdrop { background: var(--hw-color-overlay); backdrop-filter: blur(3px); }
160
+ .hw-drawer[data-side='start'] { inset-inline-start: 0; inset-inline-end: auto; }
161
+ .hw-drawer[data-side='bottom'] { inset-block-start: auto; inset-block-end: 0; inset-inline: 0; inline-size: 100%; block-size: auto; max-block-size: 85dvh; border-start-start-radius: var(--hw-radius-xl); border-start-end-radius: var(--hw-radius-xl); }
162
+ .hw-drawer[open] { animation: hw-drawer-in var(--hw-duration-normal) var(--hw-ease-standard); }
163
+ .hw-drawer > :is(header, .hw-drawer-header) { display: flex; align-items: start; justify-content: space-between; gap: var(--hw-space-4); padding: var(--hw-space-6); border-block-end: 1px solid var(--hw-color-border); }
164
+ .hw-drawer-body { padding: var(--hw-space-6); }.hw-drawer-footer { display: flex; flex-wrap: wrap; gap: var(--hw-space-3); padding: var(--hw-space-5) var(--hw-space-6); border-block-start: 1px solid var(--hw-color-border); }
165
+ @keyframes hw-drawer-in { from { opacity: 0; translate: 0 0.5rem; } to { opacity: 1; translate: 0; } }
166
+ .hw-toast-region { position: fixed; z-index: var(--hw-z-toast); inset-block-end: var(--hw-space-5); inset-inline-end: var(--hw-space-5); display: grid; gap: var(--hw-space-3); inline-size: min(25rem, calc(100vw - 2.5rem)); max-block-size: calc(100dvh - 2.5rem); overflow: auto; padding: var(--hw-space-1); list-style: none; }
167
+ .hw-toast-region[data-position='top-end'], .hw-toast-region[data-position='top-start'] { inset-block-start: var(--hw-space-5); inset-block-end: auto; }
168
+ .hw-toast-region[data-position='top-start'], .hw-toast-region[data-position='bottom-start'] { inset-inline-start: var(--hw-space-5); inset-inline-end: auto; }
169
+ .hw-toast-region[data-variant='inline'] { position: static; inline-size: 100%; max-block-size: none; overflow: visible; padding: 0; }
170
+ .hw-toast { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: var(--hw-space-3); padding: var(--hw-space-4); border: 1px solid var(--hw-color-border); border-inline-start: 3px solid var(--hw-color-primary); border-radius: var(--hw-radius-md); background: var(--hw-color-surface-raised); color: var(--hw-color-text); box-shadow: var(--hw-shadow-md); font-size: var(--hw-text-sm); }
171
+ .hw-toast > :is(.hw-toast-content, div) { flex: 1; min-inline-size: 0; }.hw-toast :is(h2, h3, p) { margin: 0; font-size: inherit; }.hw-toast :is(h2, h3, strong) { font-weight: var(--hw-weight-semibold); }.hw-toast p { color: var(--hw-color-text-muted); }.hw-toast [data-hw-dismiss] { margin-inline-start: auto; }
172
+ .hw-toast[data-tone='neutral'] { border-inline-start-color: var(--hw-color-text-muted); }
173
+ .hw-toast[data-tone='danger'] { border-inline-start-color: var(--hw-color-danger); }.hw-toast[data-tone='warning'] { border-inline-start-color: var(--hw-color-warning); }.hw-toast[data-tone='success'] { border-inline-start-color: var(--hw-color-success); }.hw-toast[data-tone='info'] { border-inline-start-color: var(--hw-color-info); }
174
+ .hw-collapsible { border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-md); background: var(--hw-color-surface); }
175
+ .hw-collapsible > :is(summary, .hw-collapsible-trigger, [data-hw-trigger]) { display: flex; align-items: center; justify-content: space-between; gap: var(--hw-space-3); inline-size: 100%; min-block-size: var(--hw-control-height); padding: var(--hw-space-3) var(--hw-space-4); border: 0; border-radius: var(--hw-radius-md); background: transparent; color: var(--hw-color-text); font: inherit; font-weight: var(--hw-weight-medium); text-align: start; list-style: none; cursor: pointer; }
176
+ .hw-collapsible > summary::-webkit-details-marker { display: none; }
177
+ .hw-collapsible > summary::after { content: ''; display: inline-block; flex: none; inline-size: 1.25rem; block-size: 1.25rem; color: var(--hw-color-text-muted); background: currentColor; mask: url('./assets/icons/add-01.svg') center / contain no-repeat; }.hw-collapsible[open] > summary::after { mask-image: url('./assets/icons/minus-sign.svg'); }
178
+ .hw-collapsible-content, .hw-collapsible > :is([data-hw-panel], div, p, section) { padding: var(--hw-space-4); border-block-start: 1px solid var(--hw-color-border); }
179
+ .hw-tree-view, .hw-tree-view [role='group'] { margin: 0; padding: 0; list-style: none; }
180
+ .hw-tree-view { padding: var(--hw-space-2); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-md); background: var(--hw-color-surface); }
181
+ .hw-tree-view [role='group'] { margin-inline-start: var(--hw-space-3); padding-inline-start: var(--hw-space-3); border-inline-start: 1px solid var(--hw-color-border); }
182
+ :is(.hw-tree-item, .hw-tree-view [role='treeitem']) { position: relative; display: flex; align-items: center; flex-wrap: wrap; gap: var(--hw-space-2); min-block-size: var(--hw-control-height-sm); padding: var(--hw-space-2); border-radius: var(--hw-radius-sm); color: var(--hw-color-text); font-size: var(--hw-text-sm); cursor: pointer; }
183
+ :is(.hw-tree-item, .hw-tree-view [role='treeitem'])[aria-selected='true'] { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }
184
+ :is(.hw-tree-item, .hw-tree-view [role='treeitem'])[aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
185
+ :is(.hw-tree-item, .hw-tree-view [role='treeitem']):focus-visible { outline-offset: -2px; }:is(.hw-tree-item, .hw-tree-view [role='treeitem']) > [role='group'] { margin-block-start: var(--hw-space-2); background: var(--hw-color-surface); color: var(--hw-color-text); }
186
+ .hw-tree-row { display: flex; align-items: center; gap: var(--hw-space-2); }:is(.hw-tree-item, .hw-tree-view [role='treeitem']) button { color: inherit; }
187
+ .hw-carousel { position: relative; min-inline-size: 0; }.hw-carousel-viewport, .hw-carousel-slides { min-inline-size: 0; overflow: hidden; border-radius: var(--hw-radius-lg); }
188
+ .hw-carousel-slide, .hw-carousel > [role='group'] { min-inline-size: 0; padding: var(--hw-space-5); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }
189
+ .hw-carousel-slide > :is(img, video) { display: block; max-inline-size: 100%; block-size: auto; border-radius: var(--hw-radius-md); }
190
+ .hw-carousel-controls, .hw-carousel > .hw-inline { display: flex; align-items: center; justify-content: space-between; gap: var(--hw-space-3); margin-block-start: var(--hw-space-3); }
191
+ .hw-carousel-status { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); font-variant-numeric: tabular-nums; }
192
+
193
+ /* Composable content; visual variants do not change behavior. */
194
+ .hw-link { border-radius: 2px; color: var(--hw-color-primary-text); font-family: var(--hw-font-sans); text-decoration: underline; text-underline-offset: 0.2em; text-decoration-thickness: 1px; }
195
+ .hw-link:hover { text-decoration-thickness: 2px; }.hw-link[aria-current] { font-weight: var(--hw-weight-semibold); }.hw-link[data-variant='subtle'] { color: var(--hw-color-text-muted); text-decoration: none; }.hw-link[data-variant='subtle']:hover { color: var(--hw-color-primary-text); text-decoration: underline; }.hw-link[data-variant='standalone'] { display: inline-flex; align-items: center; gap: var(--hw-space-2); font-weight: var(--hw-weight-medium); text-decoration: none; }.hw-link[aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
196
+ .hw-icon-button { display: inline-flex; flex: none; align-items: center; justify-content: center; inline-size: var(--hw-control-height); min-block-size: var(--hw-control-height); padding: var(--hw-space-2); }
197
+ .hw-icon-button[data-size='sm'] { inline-size: var(--hw-control-height-sm); min-block-size: var(--hw-control-height-sm); }.hw-icon-button[data-size='lg'] { inline-size: var(--hw-control-height-lg); min-block-size: var(--hw-control-height-lg); }.hw-icon-button > span { display: inline-flex; align-items: center; justify-content: center; }.hw-icon-button[aria-pressed='true'] { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }
198
+ .hw-button-group { display: inline-flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); max-inline-size: 100%; }.hw-button-group[data-orientation='vertical'] { flex-direction: column; align-items: stretch; }.hw-button-group[data-variant='attached'] { gap: 0; }.hw-button-group[data-variant='attached'] > .hw-button + .hw-button { margin-inline-start: -1px; }.hw-button-group[data-variant='attached'] > .hw-button:not(:first-child) { border-start-start-radius: 0; border-end-start-radius: 0; }.hw-button-group[data-variant='attached'] > .hw-button:not(:last-child) { border-start-end-radius: 0; border-end-end-radius: 0; }.hw-button-group > .hw-button:focus-visible { position: relative; z-index: 1; }
199
+ .hw-chip[data-tone='success'] { --hw-tone: var(--hw-color-success); --hw-tone-bg: var(--hw-color-success-subtle); }.hw-chip[data-tone='warning'] { --hw-tone: var(--hw-color-warning); --hw-tone-bg: var(--hw-color-warning-subtle); }.hw-chip[data-tone='danger'] { --hw-tone: var(--hw-color-danger); --hw-tone-bg: var(--hw-color-danger-subtle); }.hw-chip[data-tone='info'] { --hw-tone: var(--hw-color-info); --hw-tone-bg: var(--hw-color-info-subtle); }
200
+ :is(.hw-badge, .hw-chip)[data-variant='outline'] { border-color: currentColor; background: transparent; }.hw-badge[data-variant='dot']::before { content: ''; inline-size: 0.375rem; block-size: 0.375rem; border-radius: 50%; background: currentColor; }.hw-chip[data-size='sm'] { min-block-size: 1.75rem; padding-inline: var(--hw-space-2); }.hw-chip[data-size='lg'] { min-block-size: var(--hw-control-height); font-size: var(--hw-text-sm); }
201
+ .hw-description-list { display: grid; gap: 0; margin: 0; }.hw-description-list > div { min-inline-size: 0; padding-block: var(--hw-space-4); border-block-end: 1px solid var(--hw-color-border); }.hw-description-list dt { margin: 0 0 var(--hw-space-1); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-description-list dd { margin: 0; overflow-wrap: anywhere; color: var(--hw-color-text); font-weight: var(--hw-weight-medium); }
202
+ .hw-description-list[data-variant='horizontal'] > div { display: grid; grid-template-columns: minmax(7rem, 1fr) minmax(0, 2fr); align-items: baseline; gap: var(--hw-space-5); }.hw-description-list[data-variant='horizontal'] dt { margin: 0; }.hw-description-list[data-variant='compact'] > div { padding-block: var(--hw-space-2); }
203
+ .hw-stat { position: relative; display: grid; gap: var(--hw-space-2); padding: var(--hw-space-5); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }.hw-stat-label { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-stat-value { font-size: var(--hw-text-3xl); font-weight: var(--hw-weight-semibold); font-variant-numeric: tabular-nums; line-height: var(--hw-leading-heading); }.hw-stat-description { margin: 0; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-stat[data-tone='success'] .hw-stat-value { color: var(--hw-color-success); }.hw-stat[data-tone='danger'] .hw-stat-value { color: var(--hw-color-danger); }.hw-stat[data-variant='plain'] { padding: 0; border: 0; border-radius: 0; background: transparent; }
204
+ .hw-timeline-item h3 { margin-block: 0 var(--hw-space-1); font-size: var(--hw-text-md); font-weight: var(--hw-weight-medium); }.hw-timeline-item p { margin: 0; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-timeline > li[data-state='current']::before { background: var(--hw-color-primary); box-shadow: 0 0 0 3px var(--hw-color-primary-subtle); }
205
+ .hw-meter { display: grid; gap: var(--hw-space-2); font-size: var(--hw-text-sm); }.hw-meter meter, meter.hw-meter { display: block; inline-size: 100%; block-size: 0.75rem; border: 0; border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); accent-color: var(--hw-color-primary); }.hw-meter meter::-webkit-meter-bar, meter.hw-meter::-webkit-meter-bar { block-size: 0.5rem; border: 0; border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); }.hw-meter meter::-webkit-meter-optimum-value, meter.hw-meter::-webkit-meter-optimum-value { border-radius: var(--hw-radius-full); background: var(--hw-color-success); }.hw-meter meter::-webkit-meter-suboptimum-value, meter.hw-meter::-webkit-meter-suboptimum-value { background: var(--hw-color-warning); }.hw-meter meter::-webkit-meter-even-less-good-value, meter.hw-meter::-webkit-meter-even-less-good-value { background: var(--hw-color-danger); }.hw-meter meter::-moz-meter-bar, meter.hw-meter::-moz-meter-bar { border-radius: var(--hw-radius-full); background: var(--hw-color-primary); }
206
+ .hw-avatar-group { display: inline-flex; align-items: center; padding-inline-start: var(--hw-space-2); }.hw-avatar-group > * { position: relative; margin-inline-start: calc(-1 * var(--hw-space-2)); border-radius: var(--hw-radius-full); }.hw-avatar-group .hw-avatar { border: 2px solid var(--hw-color-surface); }.hw-avatar-group > :focus-within { z-index: 1; }
207
+ .hw-data-table, .hw-table-wrap { position: relative; }.hw-data-table th button { display: inline-flex; align-items: center; gap: var(--hw-space-2); min-block-size: 2rem; margin: -0.25rem; padding: 0.25rem; border: 0; border-radius: var(--hw-radius-sm); background: transparent; color: inherit; font: inherit; font-weight: inherit; text-align: start; cursor: pointer; }.hw-data-table th button:hover { color: var(--hw-color-primary-text); }.hw-data-table [aria-sort='ascending'], .hw-data-table [aria-sort='descending'] { color: var(--hw-color-primary-text); }
208
+ .hw-table[data-variant='striped'] tbody tr:nth-child(even) { background: var(--hw-color-canvas); }.hw-table[data-variant='bordered'] :is(th, td) + :is(th, td) { border-inline-start: 1px solid var(--hw-color-border); }.hw-table[data-size='sm'] :is(th, td) { padding-block: var(--hw-space-2); font-size: var(--hw-text-xs); }.hw-table[data-size='lg'] :is(th, td) { padding-block: var(--hw-space-5); }
209
+
210
+ /* Configurable Saudi-platform patterns. Brand and trust content stay caller-owned. */
211
+ .hw-service-card { display: flex; flex-direction: column; align-items: start; gap: var(--hw-space-3); padding: var(--hw-space-5); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); transition: border-color var(--hw-duration-normal), box-shadow var(--hw-duration-normal); }
212
+ .hw-service-card-icon { display: inline-grid; place-items: center; inline-size: 3rem; block-size: 3rem; margin-block-end: var(--hw-space-2); border-radius: var(--hw-radius-md); background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }.hw-service-card-icon:empty { display: none; }
213
+ .hw-service-card h3, .hw-service-card h2 { margin: 0; font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }.hw-service-card h3 a, .hw-service-card h2 a { color: inherit; text-decoration: none; }.hw-service-card h3 a:hover, .hw-service-card h2 a:hover { color: var(--hw-color-primary-text); text-decoration: underline; }
214
+ .hw-service-card > p { margin: 0; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-service-card > .hw-badge { flex: none; }.hw-service-card > p:not(.hw-badge) { flex: 1; }.hw-service-card-meta { display: flex; flex-wrap: wrap; gap: var(--hw-space-3); inline-size: 100%; margin-block: var(--hw-space-2); color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); }.hw-service-card-meta > span + span { padding-inline-start: var(--hw-space-3); border-inline-start: 1px solid var(--hw-color-border); }.hw-service-card > .hw-button { align-self: stretch; margin-block-start: auto; }
215
+ .hw-service-card[data-variant='featured'] { border-color: var(--hw-color-primary); box-shadow: inset 0 3px 0 var(--hw-color-primary); }.hw-service-card[data-variant='compact'] { gap: var(--hw-space-2); padding: var(--hw-space-4); }.hw-service-card:focus-within { border-color: var(--hw-color-primary); }
216
+ .hw-service-details { display: grid; gap: var(--hw-space-5); }.hw-service-details > header :is(h1, h2) { margin: 0 0 var(--hw-space-3); font-size: var(--hw-text-2xl); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }.hw-service-details > header p { margin: 0; max-inline-size: 65ch; color: var(--hw-color-text-muted); }.hw-service-details > h3 { margin: 0; font-size: var(--hw-text-lg); }.hw-service-details > ul { margin: 0; padding-inline-start: var(--hw-space-6); color: var(--hw-color-text-muted); }.hw-service-details > ul li + li { margin-block-start: var(--hw-space-2); }
217
+ .hw-portal-header { position: relative; display: flex; align-items: center; flex-wrap: wrap; gap: var(--hw-space-5); min-block-size: 5rem; padding: var(--hw-space-4) clamp(1rem, 4vw, 3rem); border-block-end: 1px solid var(--hw-color-border); background: var(--hw-color-surface); }
218
+ .hw-portal-brand { display: inline-flex; align-items: center; gap: var(--hw-space-3); flex: none; color: var(--hw-color-text); font-size: var(--hw-text-xl); font-weight: var(--hw-weight-semibold); text-decoration: none; }.hw-portal-brand :is(img, svg) { max-inline-size: 10rem; max-block-size: 3rem; }.hw-portal-header nav { display: flex; flex: 1; flex-wrap: wrap; gap: var(--hw-space-4); }.hw-portal-header nav ul { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-4); margin: 0; padding: 0; list-style: none; }.hw-portal-header nav a { display: inline-flex; align-items: center; min-block-size: var(--hw-control-height); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); text-decoration: none; }.hw-portal-header nav a[aria-current='page'] { color: var(--hw-color-primary-text); text-decoration: underline; text-decoration-thickness: 2px; text-underline-offset: 0.6em; }.hw-portal-header-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); margin-inline-start: auto; }.hw-portal-menu-toggle { display: none; }.hw-portal-header[data-variant='sticky'] { position: sticky; z-index: var(--hw-z-sticky); inset-block-start: 0; }
219
+ .hw-skip-link { position: absolute; z-index: var(--hw-z-popover); inset-inline-start: var(--hw-space-4); inset-block-start: var(--hw-space-2); padding: var(--hw-space-2) var(--hw-space-4); transform: translateY(-200%); border-radius: var(--hw-radius-sm); background: var(--hw-color-primary); color: var(--hw-color-on-primary); font-weight: var(--hw-weight-medium); }.hw-skip-link:focus { transform: none; }
220
+ .hw-portal-footer { display: flex; flex-wrap: wrap; gap: var(--hw-space-8); justify-content: space-between; padding: var(--hw-space-8) clamp(1rem, 4vw, 3rem); border-block-start: 1px solid var(--hw-color-border); background: var(--hw-color-canvas); color: var(--hw-color-text); }.hw-portal-footer > div { flex: 1 1 16rem; }.hw-portal-footer strong { font-size: var(--hw-text-lg); }.hw-portal-footer nav { display: flex; flex-wrap: wrap; gap: var(--hw-space-4); }.hw-portal-footer nav ul { display: flex; flex-wrap: wrap; gap: var(--hw-space-4); margin: 0; padding: 0; list-style: none; }.hw-portal-footer nav a { font-size: var(--hw-text-sm); }.hw-portal-footer > p { flex-basis: 100%; margin: 0; padding-block-start: var(--hw-space-4); border-block-start: 1px solid var(--hw-color-border); color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); }
221
+ .hw-feedback { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-4); padding: var(--hw-space-5); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-canvas); }.hw-feedback > p { margin: 0; font-size: var(--hw-text-sm); }.hw-feedback > p:first-child { flex: 1 1 12rem; font-weight: var(--hw-weight-medium); }.hw-feedback [aria-pressed='true'] { outline: 2px solid var(--hw-color-primary); outline-offset: 3px; }.hw-feedback [role='status'] { flex-basis: 100%; color: var(--hw-color-primary-text); }.hw-feedback [role='status']:empty { flex-basis: 0; }
222
+ .hw-cookie-consent { display: grid; gap: var(--hw-space-3); padding: var(--hw-space-5); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface-raised); box-shadow: var(--hw-shadow-md); }.hw-cookie-consent h2 { margin: 0; font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); }.hw-cookie-consent p { margin: 0; max-inline-size: 75ch; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-cookie-consent > .hw-button-group { margin-block-start: var(--hw-space-2); }.hw-cookie-consent[data-variant='banner'] { position: fixed; z-index: var(--hw-z-toast); inset-inline: var(--hw-space-4); inset-block-end: var(--hw-space-4); max-inline-size: var(--hw-content-max); margin-inline: auto; }
223
+ .hw-notification-list { border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }.hw-notification-list > ul { margin: 0; padding: 0; list-style: none; }.hw-notification, :is(.hw-notification-list > ul > li, .hw-notification-list > li) { position: relative; display: flex; align-items: start; gap: var(--hw-space-3); padding: var(--hw-space-4); }.hw-notification + .hw-notification { border-block-start: 1px solid var(--hw-color-border); }.hw-notification > div { flex: 1; min-inline-size: 0; }.hw-notification :is(strong, a) { font-size: var(--hw-text-sm); font-weight: var(--hw-weight-semibold); }.hw-notification p { margin-block: var(--hw-space-1); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-notification :is(time, div > span:not(.hw-sr-only)) { color: var(--hw-color-text-subtle); font-size: var(--hw-text-xs); }.hw-notification[data-unread='true'] { background: var(--hw-color-primary-subtle); }.hw-notification[data-unread='true']::before { content: ''; flex: none; inline-size: 0.375rem; block-size: 0.375rem; margin-block-start: 0.6rem; border-radius: 50%; background: var(--hw-color-primary); }.hw-notification:first-child { border-start-start-radius: var(--hw-radius-lg); border-start-end-radius: var(--hw-radius-lg); }.hw-notification:last-child { border-end-start-radius: var(--hw-radius-lg); border-end-end-radius: var(--hw-radius-lg); }
224
+
225
+ /* Alternative native adapter anatomy uses the same visual contract. */
226
+ .hw-popover-panel > :first-child { margin-block-start: 0; }.hw-popover-panel > :last-child { margin-block-end: 0; }
227
+ .hw-popover-panel > :is(h2, h3) { margin-block-end: var(--hw-space-3); font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); }
228
+ .hw-toggle-group > :is(.hw-hint, .hw-error) { flex-basis: 100%; margin-block: var(--hw-space-2) 0; }
229
+ .hw-pin-slots { display: flex; flex-wrap: wrap; gap: var(--hw-space-2); direction: ltr; }
230
+ .hw-pin-slots > span { display: grid; place-items: center; inline-size: 2.5rem; min-block-size: 2.75rem; border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-md); background: var(--hw-color-surface-muted); font-family: var(--hw-font-mono); font-size: var(--hw-text-lg); }
231
+ .hw-tag-input.hw-field > :is(.hw-label, .hw-hint, .hw-error) { flex-basis: 100%; }
232
+ .hw-tag-input > .hw-inline { gap: var(--hw-space-2); }
233
+ .hw-tree-toggle { display: inline-grid; flex: none; place-items: center; min-inline-size: 1.75rem; min-block-size: 1.75rem; border-radius: var(--hw-radius-sm); color: var(--hw-color-text-muted); }
234
+ :is(.hw-tree-item, .hw-tree-view [role='treeitem']) > [role='group'] { flex-basis: 100%; }
235
+ .hw-carousel-controls > [role='status'], .hw-carousel > .hw-inline > [role='status'] { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); text-align: center; }
236
+ .hw-carousel-slide > :is(h2, h3) { margin-block: var(--hw-space-3) var(--hw-space-2); }.hw-carousel-slide > p { margin: 0; color: var(--hw-color-text-muted); }
237
+ .hw-toast-region > :is([role='status'], [role='alert']) { display: grid; gap: var(--hw-space-3); }
238
+ .hw-toast > :is(strong, h2, h3, p, div) { grid-column: 1; }
239
+ .hw-toast > button { grid-column: 2; grid-row: 1 / span 2; align-self: start; }
240
+ .hw-stat dl, .hw-stat dd { margin: 0; }.hw-stat dt { margin-block-end: var(--hw-space-2); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }.hw-stat > p, .hw-stat-trend { margin: 0; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
241
+ .hw-service-card > :is(.hw-card-header, .hw-card-body, .hw-card-footer) { inline-size: 100%; padding: 0; }
242
+ .hw-service-card > .hw-card-body { flex: 1; }
243
+ .hw-service-card > .hw-card-header { justify-content: start; }
244
+ .hw-service-card > .hw-card-footer { margin-block-start: auto; padding-block-start: var(--hw-space-4); }
245
+ .hw-service-card .hw-card-body > p { margin: 0; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
246
+ .hw-service-card .hw-card-body > ul { display: flex; flex-wrap: wrap; gap: var(--hw-space-3); margin-block: var(--hw-space-4) 0; padding: 0; list-style: none; color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); }
247
+ .hw-service-details > section > h3 { margin: 0; font-size: var(--hw-text-lg); }.hw-service-details > section > ul { padding-inline-start: var(--hw-space-6); color: var(--hw-color-text-muted); }
248
+ .hw-portal-header-main { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hw-space-5); inline-size: 100%; min-inline-size: 0; }
249
+ .hw-portal-notice { flex-basis: 100%; inline-size: 100%; padding-block-end: var(--hw-space-3); border-block-end: 1px solid var(--hw-color-border); color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
250
+ .hw-portal-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); margin-inline-start: auto; }
251
+ .hw-portal-footer > small { flex-basis: 100%; color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); }.hw-portal-footer nav a { color: var(--hw-color-primary-text); text-underline-offset: 0.2em; }
252
+ .hw-feedback > h2 { flex: 1 1 12rem; margin: 0; font-size: var(--hw-text-md); font-weight: var(--hw-weight-semibold); }
253
+ .hw-feedback > div:not(.hw-button-group, .hw-inline, .hw-feedback-actions) { display: grid; gap: var(--hw-space-3); flex-basis: 100%; }
254
+ .hw-notification-list > :is(h2, p) { margin: 0; padding: var(--hw-space-4); }.hw-notification-list > h2 { border-block-end: 1px solid var(--hw-color-border); font-size: var(--hw-text-lg); }
255
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--hw-space-2) var(--hw-space-3); }
256
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) + li { border-block-start: 1px solid var(--hw-color-border); }
257
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) > :is(h3, p, time, div) { grid-column: 1; min-inline-size: 0; margin: 0; }
258
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) > h3 { font-size: var(--hw-text-sm); font-weight: var(--hw-weight-semibold); }
259
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) > :is(p, time) { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
260
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) > button { grid-column: 2; max-inline-size: 12rem; align-self: start; }
261
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li) > .hw-badge { grid-column: 2; justify-self: start; }
262
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li):is([data-unread='true'], [data-read='false'], [data-state='unread']) { background: var(--hw-color-primary-subtle); }
263
+ :is(.hw-notification-list > ul > li, .hw-notification-list > li):is([data-unread='true'], [data-read='false'], [data-state='unread']) :is(p, time, div > span:not(.hw-sr-only)) { color: var(--hw-color-primary-text); }
264
+ .hw-notification[data-unread='true']::before { position: absolute; inset-inline-start: var(--hw-space-2); inset-block-start: var(--hw-space-4); }
265
+
266
+ /* Shared variation knobs for established primitives. */
267
+ .hw-button[data-variant='soft'] { --hw-button-bg: var(--hw-color-primary-subtle); --hw-button-fg: var(--hw-color-primary-text); --hw-button-hover: var(--hw-color-surface-muted); }.hw-button[data-variant='outline'] { --hw-button-bg: transparent; --hw-button-fg: var(--hw-color-primary-text); --hw-button-border: var(--hw-color-primary); --hw-button-hover: var(--hw-color-primary-subtle); }.hw-button[data-variant='link'] { --hw-button-bg: transparent; --hw-button-fg: var(--hw-color-primary-text); --hw-button-hover: transparent; padding-inline: var(--hw-space-1); text-decoration: underline; text-underline-offset: 0.25em; }
268
+ :is(.hw-input, .hw-textarea, .hw-select)[data-size='sm'] { min-block-size: var(--hw-control-height-sm); padding-block: var(--hw-space-1); font-size: var(--hw-text-sm); }:is(.hw-input, .hw-textarea, .hw-select)[data-size='lg'] { min-block-size: var(--hw-control-height-lg); padding-inline: var(--hw-space-4); font-size: var(--hw-text-lg); }:is(.hw-input, .hw-textarea, .hw-select)[data-variant='filled'] { border-color: transparent; background: var(--hw-color-surface-muted); }:is(.hw-input, .hw-textarea, .hw-select)[data-variant='filled']:focus-visible { border-color: var(--hw-color-primary); }
269
+ .hw-card[data-variant='flat'] { box-shadow: none; }.hw-card[data-variant='elevated'] { box-shadow: var(--hw-shadow-md); }.hw-card[data-variant='outlined'] { border-color: var(--hw-color-border-strong); box-shadow: none; }.hw-card[data-variant='ghost'] { border-color: transparent; background: transparent; box-shadow: none; }
270
+ .hw-alert[data-variant='outline'] { background: transparent; border-color: var(--hw-tone); }.hw-alert[data-variant='minimal'] { padding-inline: 0; border: 0; background: transparent; }.hw-tabs[data-variant='pills'] .hw-tab-list { gap: var(--hw-space-2); padding: 3px; border: 0; }.hw-tabs[data-variant='pills'] .hw-tab { border-radius: var(--hw-radius-full); }.hw-tabs[data-variant='pills'] .hw-tab::after { display: none; }.hw-tabs[data-variant='pills'] .hw-tab[aria-selected='true'] { background: var(--hw-color-primary-subtle); }
271
+ .hw-avatar[data-size='sm'] { inline-size: 2rem; block-size: 2rem; font-size: var(--hw-text-xs); }.hw-avatar[data-size='lg'] { inline-size: 3.5rem; block-size: 3.5rem; font-size: var(--hw-text-lg); }.hw-avatar[data-size='xl'] { inline-size: 5rem; block-size: 5rem; font-size: var(--hw-text-2xl); }.hw-avatar img { inline-size: 100%; block-size: 100%; }.hw-avatar[data-variant='square'] { border-radius: var(--hw-radius-md); }
272
+ .hw-skeleton[data-variant='circle'] { aspect-ratio: 1; border-radius: 50%; }.hw-skeleton[data-variant='text'] { min-block-size: 0.75em; border-radius: 0.2em; }.hw-progress[data-size='sm'] { block-size: 0.25rem; }.hw-progress[data-size='lg'] { block-size: 0.75rem; }.hw-spinner[data-size='sm'] { inline-size: 1rem; block-size: 1rem; }.hw-spinner[data-size='lg'] { inline-size: 2rem; block-size: 2rem; border-width: 3px; }
273
+ .hw-tooltip-anchor { position: relative; display: inline-flex; }
274
+ @media (max-width: 47.999rem) {
275
+ .hw-portal-header { gap: var(--hw-space-3); }
276
+ .hw-portal-menu-toggle { display: inline-flex; margin-inline-start: auto; }
277
+ .hw-portal-header > nav, .hw-portal-header-main > nav { order: 3; flex-basis: 100%; }
278
+ .hw-portal-header > nav[data-open='false'] { display: none; }
279
+ .hw-portal-header > nav ul, .hw-portal-header-main > nav ul { align-items: stretch; flex-direction: column; gap: var(--hw-space-1); }
280
+ .hw-portal-header > nav a, .hw-portal-header-main > nav a { inline-size: 100%; padding-inline: var(--hw-space-2); }
281
+ .hw-portal-header-actions:empty { display: none; }
282
+ .hw-portal-footer { gap: var(--hw-space-5); }
283
+ }
284
+ @media (max-width: 39.999rem) {
285
+ .hw-description-list[data-variant='horizontal'] > div { grid-template-columns: minmax(0, 1fr); gap: var(--hw-space-1); }
286
+ .hw-cookie-consent .hw-button-group { display: grid; inline-size: 100%; }
287
+ .hw-calendar { padding: var(--hw-space-3); }
288
+ .hw-rating label { min-inline-size: 2.25rem; }
289
+ .hw-service-card { padding: var(--hw-space-4); }
290
+ }
291
+ @media (prefers-reduced-motion: reduce) {
292
+ .hw-file-dropzone, .hw-service-card { transition: none; }
293
+ .hw-drawer[open] { animation: none; }
294
+ }
295
+ @media (forced-colors: active) {
296
+ .hw-slider, .hw-range-slider input[type='range'] { appearance: auto; }
297
+ .hw-rating label:has(input:checked), .hw-toggle-group > :is([aria-pressed='true'], label:has(input:checked)), .hw-calendar-day:is([aria-selected='true'], [data-selected='true']), [aria-selected='true'] > .hw-calendar-day, :is(.hw-tree-item, .hw-tree-view [role='treeitem'])[aria-selected='true'] { outline: 2px solid Highlight; outline-offset: -2px; }
298
+ .hw-rating label:has(~ label input:checked) { outline: 2px solid Highlight; outline-offset: -2px; }
299
+ .hw-rating label:has(input:focus-visible) { outline: 3px solid CanvasText; outline-offset: 2px; }
300
+ .hw-input-addon, .hw-toast, .hw-cookie-consent { border-color: CanvasText; }
301
+ .hw-notification[data-unread='true']::before { background: Highlight; }
302
+ .hw-drawer::backdrop { background: Canvas; opacity: 0.7; }
303
+ .hw-menu :is([aria-disabled='true'], :disabled), .hw-toggle-group > :disabled { color: GrayText; }
304
+ }
305
+
306
+ .hw-notification-list:is(ul, ol) { margin: 0; padding: 0; list-style: none; }
307
+ .hw-notification-list > li > a { grid-column: 1; min-inline-size: 0; font-size: var(--hw-text-sm); }
308
+ .hw-timeline-item[aria-current='step']::before { background: var(--hw-color-primary); box-shadow: 0 0 0 3px var(--hw-color-primary-subtle); }
309
+ .hw-stat-trend[data-tone='success'] { color: var(--hw-color-success); }.hw-stat-trend[data-tone='danger'] { color: var(--hw-color-danger); }
310
+ .hw-cookie-consent > h3 { margin: 0; font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); }
@@ -0,0 +1,48 @@
1
+ /* Choice presentation is independent of each adapter's feedback data contract. */
2
+ .hw-feedback > .hw-inline, .hw-feedback .hw-feedback-actions {
3
+ display: flex;
4
+ flex-direction: row;
5
+ flex-wrap: wrap;
6
+ align-items: center;
7
+ gap: var(--hw-space-2);
8
+ flex-basis: auto;
9
+ }
10
+ .hw-feedback > fieldset { flex: 1 1 100%; min-inline-size: 0; border: 0; padding: 0; margin: 0; }
11
+ .hw-feedback > fieldset > legend { padding: 0; font-weight: var(--hw-weight-medium); }
12
+ .hw-feedback > fieldset > .hw-button { margin-block-start: var(--hw-space-3); }
13
+ .hw-feedback > fieldset > .hw-feedback-actions { margin-block: var(--hw-space-3); }
14
+ .hw-feedback-actions > .hw-field { min-inline-size: 0; }
15
+ .hw-feedback-actions .hw-choice {
16
+ box-sizing: border-box;
17
+ position: relative;
18
+ min-block-size: var(--hw-control-height);
19
+ padding: var(--hw-space-2) var(--hw-space-4);
20
+ border-radius: var(--hw-profile-control-radius, var(--hw-radius-md));
21
+ background: var(--hw-color-action-secondary);
22
+ color: var(--hw-color-on-action-secondary);
23
+ cursor: pointer;
24
+ }
25
+ .hw-feedback-actions .hw-choice:hover:not(:has(:disabled)) { background: var(--hw-color-action-secondary-hover); }
26
+ .hw-feedback-actions .hw-choice:has(:checked) { outline: 2px solid var(--hw-color-primary); outline-offset: 3px; }
27
+ .hw-feedback-actions .hw-choice:has(:focus-visible) { outline: 2px solid var(--hw-color-focus-contrast); outline-offset: 3px; }
28
+ .hw-feedback-actions .hw-choice:has(:disabled) { background: var(--hw-color-disabled); color: var(--hw-color-on-disabled); cursor: not-allowed; }
29
+ .hw-feedback-actions .hw-radio,
30
+ .hw-feedback[data-choice-variant='icon'] .hw-feedback-label {
31
+ position: absolute;
32
+ inline-size: 1px;
33
+ block-size: 1px;
34
+ padding: 0;
35
+ margin: -1px;
36
+ overflow: hidden;
37
+ clip-path: inset(50%);
38
+ white-space: nowrap;
39
+ border: 0;
40
+ }
41
+ .hw-feedback .hw-feedback-icon { display: none; }
42
+ .hw-feedback:is([data-choice-variant='icon'], [data-choice-variant='icon-text']) .hw-feedback-icon { display: inline-block; }
43
+ .hw-feedback[data-choice-variant='icon'] .hw-feedback-actions :is(.hw-button, .hw-choice) { min-inline-size: var(--hw-control-height); padding-inline: var(--hw-space-2); }
44
+ @media (forced-colors: active) {
45
+ .hw-feedback-actions .hw-choice { border: 1px solid ButtonText; }
46
+ .hw-feedback-actions .hw-choice:has(:checked, :focus-visible) { outline-color: Highlight; }
47
+ .hw-feedback-actions .hw-choice:has(:disabled) { border-color: GrayText; color: GrayText; }
48
+ }
@@ -0,0 +1,64 @@
1
+ /* Mobile Components local uploaded-row definitions 5698:34512 / 10705:1294. */
2
+ .hw-upload-list { display: grid; gap: var(--hw-space-2); margin: 0; padding: 0; list-style: none; }
3
+ .hw-upload-item {
4
+ position: relative;
5
+ box-sizing: border-box;
6
+ display: grid;
7
+ grid-template-columns: 20px minmax(0, 1fr) auto;
8
+ align-items: center;
9
+ column-gap: var(--hw-space-2);
10
+ row-gap: var(--hw-space-2);
11
+ min-block-size: 36px;
12
+ padding: calc(var(--hw-space-2) - 1px);
13
+ border: 1px solid var(--hw-color-border);
14
+ border-radius: var(--hw-radius-sm);
15
+ background: var(--hw-color-surface-muted);
16
+ color: var(--hw-color-text);
17
+ }
18
+ .hw-upload-item::before {
19
+ content: '';
20
+ grid-column: 1;
21
+ grid-row: 1;
22
+ box-sizing: border-box;
23
+ inline-size: 20px;
24
+ block-size: 20px;
25
+ border: 1.5px solid var(--hw-color-text-muted);
26
+ border-radius: 50%;
27
+ }
28
+ .hw-upload-item[data-status='complete']::before {
29
+ border: 0;
30
+ border-radius: 0;
31
+ background: var(--hw-color-success);
32
+ mask: url('./assets/icons/checkmark-circle-02.svg') center / contain no-repeat;
33
+ }
34
+ .hw-upload-item[data-status='error']::before { border-color: var(--hw-color-danger); }
35
+ .hw-upload-name { grid-column: 2; grid-row: 1; min-inline-size: 0; overflow-wrap: anywhere; font-size: 0.875rem; line-height: 1.25rem; font-weight: var(--hw-weight-medium); }
36
+ .hw-upload-status { grid-column: 2 / -1; color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
37
+ .hw-upload-item:not([data-message])[data-status]:is([data-status='selected'], [data-status='complete']) > .hw-upload-status {
38
+ position: absolute; inline-size: 1px; block-size: 1px; padding: 0; margin: -1px;
39
+ overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
40
+ }
41
+ .hw-upload-item[data-status='error'] .hw-upload-status { color: var(--hw-color-danger); }
42
+ .hw-upload-item[data-status='complete'] .hw-upload-status { color: var(--hw-color-success); }
43
+ .hw-upload-item > button {
44
+ position: relative; grid-column: 3; grid-row: 1; align-self: center;
45
+ inline-size: 20px; block-size: 20px; min-inline-size: 20px; min-block-size: 20px;
46
+ padding: 0; border: 0; font-size: 0; line-height: 1; background: transparent;
47
+ color: var(--hw-color-text);
48
+ }
49
+ .hw-upload-item > button:disabled { color: var(--hw-color-on-disabled); }
50
+ .hw-upload-item > button::before {
51
+ content: ''; inline-size: 20px; block-size: 20px;
52
+ background: currentColor; mask: url('./assets/icons/cancel-01.svg') center / contain no-repeat;
53
+ }
54
+ /* Expand the pointer target inside the row without changing the source glyph box. */
55
+ .hw-upload-item > button::after { content: ''; position: absolute; inset: -4px; }
56
+ @media (pointer: coarse) {
57
+ .hw-upload-item > button::after { inset-block: -12px; inset-inline: -16px -8px; }
58
+ }
59
+ .hw-upload-item > progress { grid-column: 2 / -1; inline-size: 100%; accent-color: var(--hw-color-primary); }
60
+ @media (forced-colors: active) {
61
+ .hw-upload-item::before { border-color: CanvasText; }
62
+ .hw-upload-item[data-status='complete']::before, .hw-upload-item > button::before { background: ButtonText; forced-color-adjust: none; }
63
+ .hw-upload-item > button:disabled::before { background: GrayText; }
64
+ }
package/dist/icons.css ADDED
@@ -0,0 +1,67 @@
1
+ /* Artwork remains unchanged; the alpha mask adopts the surrounding text color. */
2
+ .hw-icon {
3
+ display: inline-block;
4
+ flex: none;
5
+ inline-size: var(--hw-icon-size, var(--hw-icon-context-size, 1.5rem));
6
+ block-size: var(--hw-icon-size, var(--hw-icon-context-size, 1.5rem));
7
+ vertical-align: middle;
8
+ background-color: currentColor;
9
+ -webkit-mask: var(--hw-icon-image, none) center / contain no-repeat;
10
+ mask: var(--hw-icon-image, none) center / contain no-repeat;
11
+ }
12
+ .hw-icon[hidden] { display: none; }
13
+ .hw-icon[data-icon='search-01'] { --hw-icon-image: url('./assets/icons/search-01.svg'); }
14
+ .hw-icon[data-icon='menu-01'] { --hw-icon-image: url('./assets/icons/menu-01.svg'); }
15
+ .hw-icon[data-icon='cancel-01'] { --hw-icon-image: url('./assets/icons/cancel-01.svg'); }
16
+ .hw-icon[data-icon='arrow-left-01'] { --hw-icon-image: url('./assets/icons/arrow-left-01.svg'); }
17
+ .hw-icon[data-icon='arrow-right-01'] { --hw-icon-image: url('./assets/icons/arrow-right-01.svg'); }
18
+ .hw-icon[data-icon='arrow-down-01'] { --hw-icon-image: url('./assets/icons/arrow-down-01.svg'); }
19
+ .hw-icon[data-icon='filter-horizontal'] { --hw-icon-image: url('./assets/icons/filter-horizontal.svg'); }
20
+ .hw-icon[data-icon='sorting-05'] { --hw-icon-image: url('./assets/icons/sorting-05.svg'); }
21
+ .hw-icon[data-icon='home-01'] { --hw-icon-image: url('./assets/icons/home-01.svg'); }
22
+ .hw-icon[data-icon='checkmark-circle-02'] { --hw-icon-image: url('./assets/icons/checkmark-circle-02.svg'); }
23
+ .hw-icon[data-icon='thumbs-up'] { --hw-icon-image: url('./assets/icons/thumbs-up.svg'); }
24
+ .hw-icon[data-icon='thumbs-down'] { --hw-icon-image: url('./assets/icons/thumbs-down.svg'); }
25
+
26
+ /* Opt in only for semantic forward/back; physical directions retain their meaning. */
27
+ .hw-icon:is([data-icon='arrow-left-01'], [data-icon='arrow-right-01'], [data-icon='arrow-left-02'], [data-icon='arrow-right-02'])[data-directional='true'] {
28
+ --_hw-mirror: var(--_hw-rtl-only) scaleX(-1);
29
+ transform: var(--_hw-mirror, none);
30
+ }
31
+ @media (forced-colors: active) {
32
+ .hw-icon {
33
+ forced-color-adjust: none;
34
+ background-color: CanvasText;
35
+ }
36
+ :where(button, a)[aria-disabled='true'] .hw-icon,
37
+ button:disabled .hw-icon { background-color: GrayText; }
38
+ }
39
+
40
+ .hw-icon[data-icon="link-04"] { --hw-icon-image: url("./assets/icons/link-04.svg"); }
41
+
42
+ .hw-icon[data-icon="lock-password"] { --hw-icon-image: url("./assets/icons/lock-password.svg"); }
43
+
44
+ .hw-icon[data-icon="arrow-up-01"] { --hw-icon-image: url("./assets/icons/arrow-up-01.svg"); }
45
+
46
+ .hw-icon[data-icon="arrow-up-right-01"] { --hw-icon-image: url("./assets/icons/arrow-up-right-01.svg"); }
47
+
48
+ .hw-icon[data-icon="link-square-02"] { --hw-icon-image: url("./assets/icons/link-square-02.svg"); }
49
+
50
+ .hw-icon[data-icon="information-circle"] { --hw-icon-image: url("./assets/icons/information-circle.svg"); }
51
+
52
+ .hw-icon[data-icon="alert-02"] { --hw-icon-image: url("./assets/icons/alert-02.svg"); }
53
+
54
+ .hw-icon[data-icon="cancel-circle"] { --hw-icon-image: url("./assets/icons/cancel-circle.svg"); }
55
+
56
+ .hw-icon[data-icon="minus-sign-circle"] { --hw-icon-image: url("./assets/icons/minus-sign-circle.svg"); }
57
+
58
+ .hw-icon[data-icon="add-01"] { --hw-icon-image: url("./assets/icons/add-01.svg"); }
59
+ .hw-icon[data-icon="minus-sign"] { --hw-icon-image: url("./assets/icons/minus-sign.svg"); }
60
+ .hw-icon[data-icon="tick-02"] { --hw-icon-image: url("./assets/icons/tick-02.svg"); }
61
+ .hw-icon[data-icon="exclamation-mark"] { --hw-icon-image: url("./assets/icons/exclamation-mark.svg"); }
62
+ .hw-icon[data-icon="arrow-up-02"] { --hw-icon-image: url("./assets/icons/arrow-up-02.svg"); }
63
+ .hw-icon[data-icon="arrow-down-02"] { --hw-icon-image: url("./assets/icons/arrow-down-02.svg"); }
64
+ .hw-icon[data-icon="arrow-left-02"] { --hw-icon-image: url("./assets/icons/arrow-left-02.svg"); }
65
+ .hw-icon[data-icon="arrow-right-02"] { --hw-icon-image: url("./assets/icons/arrow-right-02.svg"); }
66
+ .hw-icon[data-icon="arrow-data-transfer-vertical"] { --hw-icon-image: url("./assets/icons/arrow-data-transfer-vertical.svg"); }
67
+ .hw-icon[data-icon="star"] { --hw-icon-image: url("./assets/icons/star.svg"); }