@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,335 @@
1
+ /* Hawiyah components are opt-in. Import reset.css separately for new applications. */
2
+ :where(.hw-button, .hw-field, .hw-input, .hw-textarea, .hw-select, .hw-tabs,
3
+ .hw-dialog, .hw-combobox, .hw-listbox, .hw-card, .hw-badge, .hw-alert,
4
+ .hw-table, .hw-pagination, .hw-breadcrumb, .hw-accordion, .hw-avatar,
5
+ .hw-toolbar, .hw-chip, .hw-empty, .hw-stepper, .hw-timeline, .hw-upload,
6
+ .hw-tooltip, .hw-stack, .hw-cluster, .hw-container) {
7
+ box-sizing: border-box;
8
+ font-family: var(--hw-font-sans);
9
+ font-size: var(--hw-text-md);
10
+ line-height: var(--hw-leading-normal);
11
+ }
12
+ :where([class^='hw-'], [class*=' hw-'])::before,
13
+ :where([class^='hw-'], [class*=' hw-'])::after { box-sizing: border-box; }
14
+ :where(.hw-button, .hw-input, .hw-textarea, .hw-select, .hw-checkbox,
15
+ .hw-radio, .hw-switch, .hw-tab, .hw-accordion-trigger,
16
+ .hw-pagination a, .hw-pagination button, .hw-breadcrumb a,
17
+ .hw-chip button, .hw-upload input, .hw-tooltip-trigger):focus-visible {
18
+ outline: var(--hw-focus-width) solid var(--hw-color-focus);
19
+ outline-offset: var(--hw-focus-offset);
20
+ }
21
+
22
+ /* Actions */
23
+ .hw-button {
24
+ --hw-button-bg: var(--hw-color-primary);
25
+ --hw-button-fg: var(--hw-color-on-primary);
26
+ --hw-button-border: transparent;
27
+ --hw-button-hover: var(--hw-color-primary-hover);
28
+ display: inline-flex;
29
+ position: relative;
30
+ align-items: center;
31
+ justify-content: center;
32
+ gap: var(--hw-space-2);
33
+ min-block-size: var(--hw-control-height);
34
+ padding: var(--hw-space-2) var(--hw-control-padding-inline);
35
+ border: 1px solid var(--hw-button-border);
36
+ border-radius: var(--hw-radius-md);
37
+ background: var(--hw-button-bg);
38
+ color: var(--hw-button-fg);
39
+ font-size: var(--hw-text-sm);
40
+ font-weight: var(--hw-weight-semibold);
41
+ line-height: var(--hw-leading-heading);
42
+ text-align: center;
43
+ text-decoration: none;
44
+ vertical-align: middle;
45
+ cursor: pointer;
46
+ user-select: none;
47
+ -webkit-tap-highlight-color: transparent;
48
+ transition: background-color var(--hw-duration-fast), border-color var(--hw-duration-fast), box-shadow var(--hw-duration-fast);
49
+ }
50
+ .hw-button[data-variant='secondary'] {
51
+ --hw-button-bg: var(--hw-color-surface);
52
+ --hw-button-fg: var(--hw-color-text);
53
+ --hw-button-border: var(--hw-color-border-strong);
54
+ --hw-button-hover: var(--hw-color-surface-muted);
55
+ }
56
+ .hw-button[data-variant='ghost'] {
57
+ --hw-button-bg: transparent;
58
+ --hw-button-fg: var(--hw-color-primary-text);
59
+ --hw-button-hover: var(--hw-color-primary-subtle);
60
+ }
61
+ .hw-button[data-variant='danger'] {
62
+ --hw-button-bg: var(--hw-color-danger);
63
+ --hw-button-fg: var(--hw-color-surface);
64
+ --hw-button-hover: var(--hw-color-danger-hover);
65
+ }
66
+ .hw-button[data-size='sm'] { min-block-size: var(--hw-control-height-sm); padding: var(--hw-space-1) var(--hw-space-3); font-size: var(--hw-text-xs); }
67
+ .hw-button[data-size='lg'] { min-block-size: var(--hw-control-height-lg); padding-inline: var(--hw-space-6); font-size: var(--hw-text-md); }
68
+ .hw-button[data-icon-only] { inline-size: var(--hw-control-height); padding-inline: var(--hw-space-2); }
69
+ .hw-button[data-icon-only][data-size='sm'] { inline-size: var(--hw-control-height-sm); }
70
+ .hw-button[data-icon-only][data-size='lg'] { inline-size: var(--hw-control-height-lg); }
71
+ .hw-button > svg { flex: none; inline-size: 1.125em; block-size: 1.125em; }
72
+ @media (hover: hover) {
73
+ .hw-button:not(:disabled, [aria-disabled='true']):hover { background: var(--hw-button-hover); }
74
+ }
75
+ .hw-button:not(:disabled, [aria-disabled='true']):active { box-shadow: inset 0 0 0 100px rgb(0 0 0 / 0.06); }
76
+ .hw-button:where(:disabled, [aria-disabled='true']) {
77
+ background: var(--hw-color-disabled);
78
+ border-color: transparent;
79
+ color: var(--hw-color-on-disabled);
80
+ cursor: not-allowed;
81
+ box-shadow: none;
82
+ }
83
+ .hw-button[aria-busy='true'] { cursor: progress; }
84
+
85
+ /* Inputs and field anatomy */
86
+ /* Equal-height form rows must not distribute spare height into labels/inputs. */
87
+ .hw-field { display: grid; align-content: start; gap: var(--hw-space-2); min-inline-size: 0; color: var(--hw-color-text); }
88
+ .hw-label { display: block; color: var(--hw-color-text); font-size: var(--hw-text-sm); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-normal); }
89
+ .hw-label abbr[title] { color: var(--hw-color-danger); text-decoration: none; }
90
+ :where(.hw-input, .hw-textarea, .hw-select) {
91
+ display: block;
92
+ inline-size: 100%;
93
+ min-inline-size: 0;
94
+ min-block-size: var(--hw-control-height);
95
+ padding: var(--hw-space-2) var(--hw-space-3);
96
+ border: 1px solid var(--hw-color-border-strong);
97
+ border-radius: var(--hw-radius-md);
98
+ background: var(--hw-color-surface);
99
+ color: var(--hw-color-text);
100
+ font-weight: var(--hw-weight-regular);
101
+ transition: border-color var(--hw-duration-fast), box-shadow var(--hw-duration-fast);
102
+ }
103
+ :where(.hw-input, .hw-textarea)::placeholder { color: var(--hw-color-text-subtle); opacity: 1; }
104
+ :where(.hw-input, .hw-textarea, .hw-select):hover:not(:disabled, [readonly]) { border-color: var(--hw-color-primary); }
105
+ :where(.hw-input, .hw-textarea, .hw-select):focus-visible { border-color: var(--hw-color-primary); }
106
+ :where(.hw-input, .hw-textarea, .hw-select)[aria-invalid='true'] { border-color: var(--hw-color-danger); }
107
+ @supports selector(:user-invalid) {
108
+ :where(.hw-input, .hw-textarea, .hw-select):user-invalid { border-color: var(--hw-color-danger); }
109
+ }
110
+ :where(.hw-input, .hw-textarea, .hw-select):disabled { background: var(--hw-color-disabled); border-color: var(--hw-color-border); color: var(--hw-color-on-disabled); cursor: not-allowed; }
111
+ :where(.hw-input, .hw-textarea)[readonly] { background: var(--hw-color-surface-muted); }
112
+ .hw-input[type='search'] { appearance: none; }
113
+ .hw-input[type='number'] { font-variant-numeric: tabular-nums; }
114
+ .hw-input::file-selector-button { margin-inline-end: var(--hw-space-3); padding: var(--hw-space-1) var(--hw-space-3); border: 0; border-radius: var(--hw-radius-sm); background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); font: inherit; cursor: pointer; }
115
+ .hw-textarea { min-block-size: 7.5rem; resize: vertical; }
116
+ /* Retain the native select arrow, keyboard behavior, and platform picker. */
117
+ .hw-select { cursor: pointer; }
118
+ .hw-hint, .hw-error { margin: 0; font-size: var(--hw-text-sm); line-height: var(--hw-leading-normal); }
119
+ .hw-hint { color: var(--hw-color-text-muted); }
120
+ .hw-error { color: var(--hw-color-danger); }
121
+ .hw-choice { display: inline-flex; align-items: center; gap: var(--hw-space-3); min-block-size: var(--hw-control-height); color: var(--hw-color-text); font: inherit; cursor: pointer; }
122
+ :where(.hw-checkbox, .hw-radio) { box-sizing: border-box; flex: none; inline-size: 1.25rem; block-size: 1.25rem; margin: 0; accent-color: var(--hw-color-primary); vertical-align: middle; cursor: pointer; }
123
+ :where(.hw-checkbox, .hw-radio, .hw-switch):disabled { cursor: not-allowed; opacity: 0.6; }
124
+ .hw-switch {
125
+ box-sizing: border-box;
126
+ appearance: none;
127
+ position: relative;
128
+ flex: none;
129
+ inline-size: var(--hw-switch-width, 2.75rem);
130
+ block-size: var(--hw-switch-height, 1.625rem);
131
+ margin: 0;
132
+ border: 1px solid var(--hw-color-border-strong);
133
+ border-radius: var(--hw-radius-full);
134
+ background: var(--hw-color-text-subtle);
135
+ vertical-align: middle;
136
+ cursor: pointer;
137
+ transition: background-color var(--hw-duration-switch, var(--hw-duration-normal)) var(--hw-ease-switch-track, ease), border-color var(--hw-duration-switch, var(--hw-duration-normal)) var(--hw-ease-switch-track, ease);
138
+ }
139
+ .hw-switch::before {
140
+ content: '';
141
+ position: absolute;
142
+ inset-block-start: var(--hw-switch-thumb-offset, 0.1875rem);
143
+ inset-inline-start: var(--hw-switch-thumb-offset, 0.1875rem);
144
+ inline-size: var(--hw-switch-thumb-size, 1.125rem);
145
+ block-size: var(--hw-switch-thumb-size, 1.125rem);
146
+ border-radius: 50%;
147
+ background: var(--hw-color-surface);
148
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);
149
+ transition: inset-inline-start var(--hw-duration-switch, var(--hw-duration-normal)) var(--hw-ease-switch, var(--hw-ease-standard));
150
+ }
151
+ .hw-switch:checked { background: var(--hw-color-primary); border-color: var(--hw-color-primary); }
152
+ .hw-switch:checked::before { inset-inline-start: var(--hw-switch-thumb-offset-checked, 1.3125rem); background: var(--hw-color-on-primary); }
153
+
154
+ /* Navigation and disclosure */
155
+ .hw-tabs { min-inline-size: 0; color: var(--hw-color-text); }
156
+ .hw-tab-list { display: flex; gap: var(--hw-space-1); overflow-x: auto; padding: 3px 3px 0; border-block-end: 1px solid var(--hw-color-border); scrollbar-width: thin; }
157
+ .hw-tab { position: relative; flex: none; min-block-size: var(--hw-control-height); padding: var(--hw-space-3) var(--hw-space-4); border: 0; border-radius: var(--hw-radius-sm) var(--hw-radius-sm) 0 0; background: transparent; color: var(--hw-color-text-muted); font: inherit; font-size: var(--hw-text-sm); font-weight: var(--hw-weight-medium); cursor: pointer; }
158
+ .hw-tab::after { content: ''; position: absolute; inset-inline: var(--hw-space-3); inset-block-end: 0; block-size: 3px; border-radius: 3px 3px 0 0; background: transparent; }
159
+ .hw-tab:focus-visible { outline-offset: -4px; }
160
+ .hw-tab[aria-selected='true'] { color: var(--hw-color-primary-text); font-weight: var(--hw-weight-semibold); }
161
+ .hw-tab[aria-selected='true']::after { background: var(--hw-color-primary); }
162
+ .hw-tab:hover:not(:disabled) { background: var(--hw-color-surface-muted); }
163
+ .hw-tab:disabled, .hw-tab[aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
164
+ .hw-tab-panel { padding-block: var(--hw-space-5); outline-offset: -3px; }
165
+ .hw-tab-list[aria-orientation='vertical'] { flex-direction: column; border-block-end: 0; border-inline-end: 1px solid var(--hw-color-border); overflow: visible; }
166
+ .hw-tab-list[aria-orientation='vertical'] .hw-tab { text-align: start; border-radius: var(--hw-radius-sm); }
167
+ .hw-tab-list[aria-orientation='vertical'] .hw-tab::after { inset-inline-start: auto; inset-inline-end: -1px; inset-block: var(--hw-space-2); inline-size: 3px; block-size: auto; }
168
+ .hw-accordion { border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); color: var(--hw-color-text); }
169
+ .hw-accordion-item + .hw-accordion-item { border-block-start: 1px solid var(--hw-color-border); }
170
+ .hw-accordion-trigger { display: flex; align-items: center; justify-content: space-between; gap: var(--hw-space-4); padding: var(--hw-space-4) var(--hw-space-5); font-weight: var(--hw-weight-semibold); list-style: none; cursor: pointer; }
171
+ .hw-accordion-trigger::-webkit-details-marker { display: none; }
172
+ .hw-accordion-trigger::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; }
173
+ .hw-accordion-item[open] > .hw-accordion-trigger::after { mask-image: url('./assets/icons/minus-sign.svg'); }
174
+ .hw-accordion-trigger:hover { background: var(--hw-color-surface-muted); }
175
+ .hw-accordion-trigger:focus-visible { outline-offset: -4px; }
176
+ .hw-accordion-content, .hw-accordion-item > :not(summary) { padding: 0 var(--hw-space-5) var(--hw-space-5); color: var(--hw-color-text-muted); }
177
+ .hw-breadcrumb { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
178
+ .hw-breadcrumb :where(ol, ul) { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); margin: 0; padding: 0; list-style: none; }
179
+ .hw-breadcrumb li { display: inline-flex; align-items: center; gap: var(--hw-space-2); }
180
+ .hw-breadcrumb li + li::before { content: '/'; color: var(--hw-color-text-subtle); }
181
+ .hw-breadcrumb a { border-radius: 2px; color: inherit; text-underline-offset: 0.2em; text-decoration: none; }
182
+ .hw-breadcrumb a:hover { color: var(--hw-color-primary-text); text-decoration: underline; }
183
+ .hw-breadcrumb [aria-current='page'] { color: var(--hw-color-text); font-weight: var(--hw-weight-medium); }
184
+ .hw-pagination { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); }
185
+ .hw-pagination :where(button, a) { display: inline-flex; align-items: center; justify-content: center; min-inline-size: var(--hw-control-height-sm); 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-md); background: transparent; color: var(--hw-color-text-muted); font: inherit; font-size: var(--hw-text-sm); font-variant-numeric: tabular-nums; text-decoration: none; cursor: pointer; }
186
+ .hw-pagination :where(button, a):hover:not(:disabled, [aria-disabled='true']) { background: var(--hw-color-surface-muted); }
187
+ .hw-pagination [aria-current='page'] { border-color: var(--hw-color-primary); background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); font-weight: var(--hw-weight-semibold); }
188
+ .hw-pagination :where(:disabled, [aria-disabled='true']) { color: var(--hw-color-on-disabled); cursor: not-allowed; }
189
+
190
+ /* Overlay and search selection */
191
+ .hw-dialog {
192
+ position: fixed;
193
+ inline-size: min(36rem, calc(100vw - 2rem));
194
+ max-inline-size: none;
195
+ max-block-size: calc(100dvh - 3rem);
196
+ margin: auto;
197
+ padding: 0;
198
+ overflow: auto;
199
+ overscroll-behavior: contain;
200
+ border: 1px solid var(--hw-color-border);
201
+ border-radius: var(--hw-radius-xl);
202
+ background: var(--hw-color-surface-raised);
203
+ color: var(--hw-color-text);
204
+ box-shadow: var(--hw-shadow-lg);
205
+ }
206
+ .hw-dialog::backdrop { background: var(--hw-color-overlay); backdrop-filter: blur(3px); }
207
+ .hw-dialog[open] { animation: hw-dialog-in var(--hw-duration-normal) var(--hw-ease-standard); }
208
+ .hw-dialog-header { display: flex; align-items: start; justify-content: space-between; gap: var(--hw-space-4); padding: var(--hw-space-6) var(--hw-space-6) var(--hw-space-4); }
209
+ .hw-dialog-header :where(h1, h2, h3) { margin: 0; color: var(--hw-color-text); font-size: var(--hw-text-xl); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }
210
+ .hw-dialog-body { padding: 0 var(--hw-space-6) var(--hw-space-6); }
211
+ .hw-dialog-footer { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--hw-space-3); padding: var(--hw-space-4) var(--hw-space-6); border-block-start: 1px solid var(--hw-color-border); background: var(--hw-color-surface-muted); }
212
+ @keyframes hw-dialog-in { from { opacity: 0; transform: translateY(8px) scale(0.985); } to { opacity: 1; transform: none; } }
213
+ .hw-combobox { position: relative; min-inline-size: 0; }
214
+ .hw-listbox { position: absolute; z-index: var(--hw-z-popover); inset-inline: 0; inset-block-start: calc(100% + var(--hw-space-2)); max-block-size: 18rem; overflow: auto; overscroll-behavior: contain; 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-raised); color: var(--hw-color-text); box-shadow: var(--hw-shadow-md); list-style: none; }
215
+ .hw-option { display: flex; align-items: center; gap: var(--hw-space-2); min-block-size: var(--hw-control-height); padding: var(--hw-space-2) var(--hw-space-3); border-radius: var(--hw-radius-sm); font-size: var(--hw-text-sm); cursor: pointer; }
216
+ .hw-option:hover:not([aria-disabled='true']), .hw-option[data-active] { background: var(--hw-color-surface-muted); }
217
+ .hw-option[aria-selected='true'] { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); font-weight: var(--hw-weight-semibold); }
218
+ .hw-option[data-active] { outline: 2px solid var(--hw-color-focus); outline-offset: -2px; }
219
+ .hw-option[aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
220
+ .hw-tooltip { position: absolute; z-index: var(--hw-z-tooltip); inset-block-end: calc(100% + var(--hw-space-2)); inset-inline-start: 0; inline-size: max-content; max-inline-size: min(20rem, calc(100vw - 2rem)); padding: var(--hw-space-2) var(--hw-space-3); border-radius: var(--hw-radius-sm); background: var(--hw-color-inverse); color: var(--hw-color-on-inverse); font-size: var(--hw-text-xs); font-weight: var(--hw-weight-medium); box-shadow: var(--hw-shadow-sm); }
221
+ [data-hw='tooltip'], .hw-tooltip-anchor { position: relative; display: inline-flex; }
222
+
223
+ /* Content surfaces */
224
+ .hw-card { min-inline-size: 0; border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); color: var(--hw-color-text); box-shadow: var(--hw-shadow-sm); }
225
+ .hw-card-header { display: flex; align-items: start; justify-content: space-between; gap: var(--hw-space-4); padding: var(--hw-space-5) var(--hw-space-5) 0; }
226
+ .hw-card-header :where(h2, h3, h4) { margin: 0; font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }
227
+ .hw-card-body { padding: var(--hw-space-5); }
228
+ .hw-card-footer { border-end-start-radius: var(--hw-radius-lg); border-end-end-radius: var(--hw-radius-lg); display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--hw-space-3); padding: var(--hw-space-4) var(--hw-space-5); border-block-start: 1px solid var(--hw-color-border); }
229
+ .hw-badge, .hw-chip { --hw-tone: var(--hw-color-text-muted); --hw-tone-bg: var(--hw-color-surface-muted); display: inline-flex; align-items: center; gap: var(--hw-space-1); max-inline-size: 100%; padding: 0.125rem var(--hw-space-2); border: 1px solid transparent; border-radius: var(--hw-radius-full); background: var(--hw-tone-bg); color: var(--hw-tone); font-size: var(--hw-text-xs); font-weight: var(--hw-weight-medium); line-height: 1.65; vertical-align: middle; }
230
+ :is(.hw-badge, .hw-alert)[data-tone='success'] { --hw-tone: var(--hw-color-success); --hw-tone-bg: var(--hw-color-success-subtle); }
231
+ :is(.hw-badge, .hw-alert)[data-tone='warning'] { --hw-tone: var(--hw-color-warning); --hw-tone-bg: var(--hw-color-warning-subtle); }
232
+ :is(.hw-badge, .hw-alert)[data-tone='danger'] { --hw-tone: var(--hw-color-danger); --hw-tone-bg: var(--hw-color-danger-subtle); }
233
+ :is(.hw-badge, .hw-alert)[data-tone='info'] { --hw-tone: var(--hw-color-info); --hw-tone-bg: var(--hw-color-info-subtle); }
234
+ .hw-alert { --hw-tone: var(--hw-color-info); --hw-tone-bg: var(--hw-color-info-subtle); display: flex; 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-tone); border-radius: var(--hw-radius-md); background: var(--hw-tone-bg); color: var(--hw-tone); font-size: var(--hw-text-sm); }
235
+ .hw-alert > svg { flex: none; inline-size: 1.25rem; block-size: 1.25rem; margin-block-start: 0.15rem; }
236
+ .hw-alert :where(h2, h3, h4, p) { margin-block: 0; }
237
+ .hw-alert :where(h2, h3, h4) { font-size: inherit; font-weight: var(--hw-weight-semibold); }
238
+ .hw-alert[data-tone='neutral'] { --hw-tone: var(--hw-color-text-muted); --hw-tone-bg: var(--hw-color-canvas); }
239
+ .hw-alert-content { flex: 1; min-inline-size: 0; }
240
+ .hw-alert a { color: inherit; text-underline-offset: 0.2em; }
241
+ .hw-chip { gap: var(--hw-space-2); min-block-size: 2rem; padding-inline: var(--hw-space-3) var(--hw-space-2); border-color: var(--hw-color-border); border-radius: var(--hw-radius-md); }
242
+ .hw-chip button { display: inline-grid; place-items: center; inline-size: 1.5rem; block-size: 1.5rem; padding: 0; border: 0; border-radius: var(--hw-radius-sm); background: transparent; color: inherit; font: inherit; cursor: pointer; }
243
+ .hw-chip button:hover { background: var(--hw-color-border); }
244
+ .hw-avatar { display: inline-grid; flex: none; place-items: center; inline-size: 2.75rem; block-size: 2.75rem; overflow: hidden; border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-full); background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); font-size: var(--hw-text-sm); font-weight: var(--hw-weight-semibold); }
245
+ .hw-avatar img, img.hw-avatar { inline-size: 2.75rem; block-size: 2.75rem; object-fit: cover; }
246
+ .hw-divider { inline-size: 100%; block-size: 0; margin-block: var(--hw-space-5); border: 0; border-block-start: 1px solid var(--hw-color-border); }
247
+ .hw-divider[aria-orientation='vertical'] { align-self: stretch; inline-size: 0; block-size: auto; margin-block: 0; margin-inline: var(--hw-space-3); border-block-start: 0; border-inline-start: 1px solid var(--hw-color-border); }
248
+
249
+ /* Tables and activity */
250
+ .hw-table-wrap { position: relative; min-inline-size: 0; overflow-x: auto; border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); }
251
+ .hw-table-wrap:focus-visible { outline: var(--hw-focus-width) solid var(--hw-color-focus); outline-offset: var(--hw-focus-offset); }
252
+ .hw-table { inline-size: 100%; border-collapse: collapse; color: var(--hw-color-text); font-size: var(--hw-text-sm); text-align: start; }
253
+ .hw-table caption { padding: var(--hw-space-4) var(--hw-space-5); color: var(--hw-color-text); font-weight: var(--hw-weight-semibold); text-align: start; }
254
+ .hw-table :where(th, td) { padding: var(--hw-density-cell-padding) var(--hw-space-5); border-block-end: 1px solid var(--hw-color-border); text-align: start; vertical-align: middle; }
255
+ .hw-table thead { background: var(--hw-color-surface-muted); color: var(--hw-color-text-muted); }
256
+ .hw-table th { font-weight: var(--hw-weight-semibold); white-space: nowrap; }
257
+ .hw-table tbody tr:last-child > * { border-block-end: 0; }
258
+ .hw-table tbody tr:hover { background: var(--hw-color-canvas); }
259
+ .hw-table tr[aria-selected='true'] { background: var(--hw-color-primary-subtle); }
260
+ .hw-table [data-numeric] { font-variant-numeric: tabular-nums; text-align: end; }
261
+ .hw-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--hw-space-3); }
262
+ .hw-toolbar > .hw-input, .hw-toolbar > .hw-combobox { flex: 1 1 16rem; }
263
+ .hw-stepper { display: flex; gap: var(--hw-space-4); margin: 0; padding: 0; color: var(--hw-color-text-muted); list-style: none; counter-reset: hw-step; }
264
+ .hw-step { position: relative; display: flex; align-items: center; flex: 1; gap: var(--hw-space-3); min-inline-size: 0; font-size: var(--hw-text-sm); counter-increment: hw-step; }
265
+ .hw-step::before { content: counter(hw-step); display: inline-grid; flex: none; place-items: center; inline-size: 2.25rem; block-size: 2.25rem; border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-full); background: var(--hw-color-surface); color: var(--hw-color-text-muted); font-variant-numeric: tabular-nums; font-weight: var(--hw-weight-semibold); }
266
+ .hw-step:not(:last-child)::after { content: ''; flex: 1; min-inline-size: var(--hw-space-4); block-size: 1px; background: var(--hw-color-border); }
267
+ .hw-step[aria-current='step'], .hw-step[data-state='active'] { color: var(--hw-color-primary-text); font-weight: var(--hw-weight-semibold); }
268
+ .hw-step[aria-current='step']::before, .hw-step[data-state='active']::before { border-color: var(--hw-color-primary); background: var(--hw-color-primary); color: var(--hw-color-on-primary); box-shadow: 0 0 0 4px var(--hw-color-primary-subtle); }
269
+ .hw-step[data-state='complete']::before, .hw-step[data-state='completed']::before { content: ''; mask: url('./assets/icons/tick-02.svg') center / 1.25rem no-repeat exclude, linear-gradient(#000 0 0); border-color: var(--hw-color-primary); background: var(--hw-color-primary); color: var(--hw-color-on-primary); }
270
+ .hw-step[data-state='error']::before { content: ''; mask: url('./assets/icons/exclamation-mark.svg') center / 1.25rem no-repeat exclude, linear-gradient(#000 0 0); border-color: var(--hw-color-danger); background: var(--hw-color-danger); color: var(--hw-color-on-primary); }
271
+ .hw-timeline { margin: 0; padding: 0; color: var(--hw-color-text); list-style: none; }
272
+ .hw-timeline > li { position: relative; padding-inline-start: var(--hw-space-8); padding-block-end: var(--hw-space-6); }
273
+ .hw-timeline > li::before { content: ''; position: absolute; inset-inline-start: 0.3125rem; inset-block-start: 0.6rem; inline-size: 0.625rem; block-size: 0.625rem; border: 2px solid var(--hw-color-surface); border-radius: 50%; background: var(--hw-color-border-strong); box-shadow: 0 0 0 1px var(--hw-color-border-strong); }
274
+ .hw-timeline > li:not(:last-child)::after { content: ''; position: absolute; inset-inline-start: 0.5625rem; inset-block: 1.5rem 0.3rem; inline-size: 1px; background: var(--hw-color-border); }
275
+ .hw-timeline > li[data-state='complete']::before, .hw-timeline > li[data-state='active']::before { background: var(--hw-color-primary); box-shadow: 0 0 0 1px var(--hw-color-primary); }
276
+ .hw-timeline time { display: block; color: var(--hw-color-text-muted); font-size: var(--hw-text-xs); }
277
+ .hw-empty { display: grid; justify-items: center; gap: var(--hw-space-3); padding: var(--hw-space-12) var(--hw-space-6); border: 1px solid var(--hw-color-border); border-radius: var(--hw-radius-lg); background: var(--hw-color-surface); color: var(--hw-color-text); text-align: center; }
278
+ .hw-empty > svg { inline-size: 2.5rem; block-size: 2.5rem; padding: var(--hw-space-4); border-radius: var(--hw-radius-xl); background: var(--hw-color-surface-muted); color: var(--hw-color-text-muted); box-sizing: content-box; }
279
+ .hw-empty :where(h2, h3, p) { max-inline-size: 34rem; margin: 0; }
280
+ .hw-empty :where(h2, h3) { font-size: var(--hw-text-lg); font-weight: var(--hw-weight-semibold); }
281
+ .hw-empty p { color: var(--hw-color-text-muted); font-size: var(--hw-text-sm); }
282
+ .hw-upload { 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); color: var(--hw-color-text); text-align: center; }
283
+ .hw-upload:focus-within, .hw-upload[data-state='dragging'] { border-color: var(--hw-color-primary); background: var(--hw-color-primary-subtle); }
284
+ .hw-upload[data-state='error'] { border-color: var(--hw-color-danger); }
285
+ .hw-upload input[type='file'] { max-inline-size: 100%; color: var(--hw-color-text-muted); font: inherit; font-size: var(--hw-text-sm); }
286
+ .hw-upload input[type='file']::file-selector-button { min-block-size: var(--hw-control-height-sm); margin-inline-end: var(--hw-space-3); padding-inline: var(--hw-space-4); border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-md); background: var(--hw-color-surface); color: var(--hw-color-text); font: inherit; font-weight: var(--hw-weight-medium); cursor: pointer; }
287
+
288
+ /* Loading and progress */
289
+ .hw-progress { display: block; inline-size: 100%; block-size: 0.5rem; overflow: hidden; border: 0; border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); accent-color: var(--hw-color-primary); }
290
+ progress.hw-progress { appearance: none; }
291
+ .hw-progress::-webkit-progress-bar { border-radius: var(--hw-radius-full); background: var(--hw-color-surface-muted); }
292
+ .hw-progress::-webkit-progress-value { border-radius: var(--hw-radius-full); background: var(--hw-color-primary); transition: width var(--hw-duration-slow); }
293
+ .hw-progress::-moz-progress-bar { border-radius: var(--hw-radius-full); background: var(--hw-color-primary); }
294
+ .hw-progress > span { display: block; block-size: 100%; border-radius: inherit; background: var(--hw-color-primary); }
295
+ .hw-skeleton { display: block; min-block-size: 1rem; border-radius: var(--hw-radius-sm); background: var(--hw-color-surface-muted); animation: hw-pulse 1.8s ease-in-out infinite; }
296
+ .hw-spinner { display: inline-block; box-sizing: border-box; inline-size: 1.25rem; block-size: 1.25rem; flex: none; border: 2px solid currentColor; border-inline-end-color: transparent; border-radius: 50%; color: inherit; vertical-align: middle; animation: hw-spin var(--hw-duration-spinner, 0.7s) linear infinite; }
297
+ @keyframes hw-spin { to { transform: rotate(360deg); } }
298
+ @keyframes hw-pulse { 50% { opacity: 0.45; } }
299
+
300
+ /* Layout helpers use logical dimensions and remain direction independent. */
301
+ .hw-container { inline-size: min(var(--hw-content-max), calc(100% - 3rem)); margin-inline: auto; }
302
+ .hw-stack { display: flex; flex-direction: column; gap: var(--hw-gap, var(--hw-space-4)); min-inline-size: 0; }
303
+ .hw-cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-gap, var(--hw-space-3)); }
304
+ .hw-sr-only { position: absolute !important; inline-size: 1px !important; block-size: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }
305
+ /* Hidden behavior must survive a component's display declaration. */
306
+ :where([class^='hw-'], [class*=' hw-'])[hidden] { display: none !important; }
307
+
308
+ @media (max-width: 40rem) {
309
+ .hw-container { inline-size: calc(100% - 2rem); }
310
+ .hw-dialog-header { padding: var(--hw-space-5) var(--hw-space-4) var(--hw-space-3); }
311
+ .hw-dialog-body { padding: 0 var(--hw-space-4) var(--hw-space-5); }
312
+ .hw-dialog-footer { padding-inline: var(--hw-space-4); }
313
+ .hw-card-header { padding-inline: var(--hw-space-4); }
314
+ .hw-card-body, .hw-card-footer { padding-inline: var(--hw-space-4); }
315
+ .hw-stepper { flex-direction: column; gap: var(--hw-space-3); }
316
+ .hw-step:not(:last-child)::after { display: none; }
317
+ .hw-table :where(th, td) { padding-inline: var(--hw-space-3); }
318
+ }
319
+ @media (prefers-reduced-motion: reduce) {
320
+ .hw-button, .hw-input, .hw-textarea, .hw-select, .hw-switch, .hw-switch::before, .hw-progress > span { transition: none; }
321
+ .hw-dialog[open], .hw-skeleton, .hw-spinner { animation: none; }
322
+ .hw-progress::-webkit-progress-value { transition: none; }
323
+ }
324
+ @media (forced-colors: active) {
325
+ .hw-button, .hw-badge, .hw-chip, .hw-avatar { border: 1px solid ButtonText; }
326
+ .hw-button:where(:disabled, [aria-disabled='true']) { border-color: GrayText; color: GrayText; }
327
+ .hw-tab[aria-selected='true']::after { background: Highlight; }
328
+ .hw-option[aria-selected='true'], .hw-pagination [aria-current='page'] { outline: 2px solid Highlight; outline-offset: -2px; }
329
+ .hw-switch { appearance: auto; }
330
+ .hw-switch::before { display: none; }
331
+ .hw-spinner { border-color: CanvasText; border-inline-end-color: transparent; }
332
+ .hw-progress, .hw-skeleton { border: 1px solid CanvasText; }
333
+ .hw-step[aria-current='step']::before { border: 3px solid Highlight; }
334
+ .hw-dialog::backdrop { background: Canvas; opacity: 0.7; }
335
+ }
@@ -0,0 +1,44 @@
1
+ /* NIC global.css 1890–2036. Geometry and accessibility adaptations:
2
+ docs/nic-content-navigation.md. No global section-ID selector is installed. */
3
+ .hw-content-nav {
4
+ display: flex; flex-direction: column; align-self: start; gap: 8px; min-inline-size: 0;
5
+ color: var(--hw-color-text); font-family: var(--hw-font-sans);
6
+ }
7
+ .hw-content-nav-heading { margin: 0; font: inherit; font-size: 16px; line-height: 24px; font-weight: var(--hw-weight-semibold); }
8
+ .hw-content-nav-list, .hw-content-nav-sublist { list-style: none; padding: 0; margin: 0; }
9
+ .hw-content-nav-sublist { margin-inline-start: var(--hw-content-nav-indent, 16px); }
10
+ .hw-content-nav-link {
11
+ display: flex; position: relative; box-sizing: border-box; align-items: center;
12
+ min-inline-size: min(140px, 100%); min-block-size: 40px; padding-inline: 8px 16px;
13
+ border-radius: 2px; color: var(--hw-color-text); text-decoration: none; cursor: pointer;
14
+ }
15
+ .hw-content-nav-label { flex: 1; min-inline-size: 0; padding-block: 6px; font-size: 14px; line-height: 28px; color: var(--hw-color-text); overflow-wrap: anywhere; }
16
+ .hw-content-nav-sublist .hw-content-nav-link::before {
17
+ content: ''; position: absolute; inset-inline-start: 0; inset-block: 0; inline-size: 2px; background: var(--hw-color-border);
18
+ }
19
+ .hw-content-nav-marker { position: absolute; inset-inline-start: 0; inset-block: 0; inline-size: 3px; border-radius: 9999px; background: transparent; }
20
+ .hw-content-nav-link[aria-current='location'] .hw-content-nav-marker { background: var(--hw-color-primary-text); }
21
+ .hw-content-nav-link:hover:where(:not([aria-disabled='true'])) { background: var(--hw-color-surface-muted); text-decoration: none; }
22
+ .hw-content-nav-link:hover:where(:not([aria-disabled='true'])) .hw-content-nav-marker { background: var(--hw-color-content-nav-marker-hover, var(--hw-color-text-subtle)); }
23
+ .hw-content-nav-link:focus { background: var(--hw-color-border); color: var(--hw-color-text); }
24
+ .hw-content-nav-link:focus:not([aria-current='location']) .hw-content-nav-marker { visibility: hidden; }
25
+ .hw-content-nav-link:focus::before { visibility: hidden; }
26
+ /* The reference suppresses focus outlines. Keep an unmistakable keyboard cue. */
27
+ .hw-content-nav-link:focus-visible { outline: 2px solid var(--hw-color-focus-contrast); outline-offset: -2px; }
28
+ .hw-content-nav-link[aria-disabled='true'] { cursor: not-allowed; }
29
+ .hw-content-nav-link[aria-disabled='true'] .hw-content-nav-label { color: var(--hw-color-on-disabled); }
30
+ @media (min-width: 1200px) {
31
+ .hw-content-nav[data-sticky='true'] {
32
+ position: sticky; inset-block-start: var(--hw-content-nav-top, 145px);
33
+ max-block-size: calc(100dvh - var(--hw-content-nav-bottom-reserve, 165px)); overflow-y: auto;
34
+ overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: var(--hw-color-primary-subtle) transparent;
35
+ }
36
+ }
37
+ @media (forced-colors: active) {
38
+ .hw-content-nav-link, .hw-content-nav-label { color: LinkText; }
39
+ .hw-content-nav-link[aria-current='location'] .hw-content-nav-marker { background: Highlight; }
40
+ .hw-content-nav-link[aria-current='location'] { outline: 1px solid Highlight; outline-offset: -1px; }
41
+ .hw-content-nav-link:hover .hw-content-nav-marker { background: Highlight; }
42
+ .hw-content-nav-link:focus-visible { outline: 2px solid Highlight; outline-offset: -2px; }
43
+ .hw-content-nav-link[aria-disabled='true'] .hw-content-nav-label { color: GrayText; }
44
+ }
@@ -0,0 +1,50 @@
1
+ /* Compact custom date field. Native input density and focus remain authoritative. */
2
+ .hw-date-picker-control { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); min-inline-size: 0; inline-size: 100%; }
3
+ .hw-date-picker-control > .hw-input { inline-size: 100%; min-inline-size: 0; padding-inline-end: 3rem; border-radius: var(--hw-radius-md); }
4
+ .hw-date-picker-control > .hw-date-picker-trigger { position: absolute; inset-inline-end: 0.125rem; inset-block: 0.125rem; inline-size: 2.5rem; min-block-size: 0; padding: 0; margin: 0; border: 0; border-radius: var(--hw-radius-sm); background: transparent; color: var(--hw-color-text-muted); box-shadow: none; }
5
+ .hw-date-picker-control > .hw-date-picker-trigger:hover:not(:disabled) { background: var(--hw-color-surface-muted); color: var(--hw-color-text); }
6
+ .hw-date-picker-control > .hw-date-picker-trigger:focus-visible { outline-offset: -3px; }
7
+ .hw-date-picker-trigger:disabled { cursor: not-allowed; }
8
+ .hw-date-picker-icon { display: inline-block; inline-size: 1.5rem; block-size: 1.5rem; background: currentColor; -webkit-mask: var(--hw-date-picker-icon, url('./assets/icons/calendar-03.svg')) center / contain no-repeat; mask: var(--hw-date-picker-icon, url('./assets/icons/calendar-03.svg')) center / contain no-repeat; }
9
+ .hw-date-picker > .hw-date-picker-control { flex: 0 0 100%; }
10
+
11
+ /* Native radios retain keyboard behavior; the rectangle moves in logical order. */
12
+ .hw-calendar-switch { position: relative; isolation: isolate; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 4px; margin-block-end: var(--hw-space-3); border: 1px solid var(--hw-color-border-strong); border-radius: var(--hw-radius-sm); background: var(--hw-color-surface-muted); }
13
+ .hw-calendar-switch::before { content: ''; position: absolute; z-index: -1; inset-block: 4px; inset-inline-start: 4px; inline-size: calc(50% - 4px); background: var(--hw-color-primary); border: 1px solid var(--hw-color-primary); border-radius: var(--hw-radius-sm); transition: inset-inline-start var(--hw-duration-fast) var(--hw-ease-standard); }
14
+ .hw-calendar-switch[data-calendar='islamic-umalqura']::before { inset-inline-start: 50%; }
15
+ .hw-calendar-switch > label { position: relative; display: flex; align-items: center; justify-content: center; min-inline-size: 0; min-block-size: var(--hw-control-height); padding: var(--hw-space-1) var(--hw-space-2); color: var(--hw-color-text); font-size: var(--hw-text-sm); line-height: var(--hw-leading-heading); text-align: center; cursor: pointer; }
16
+ .hw-calendar-switch > label > input { position: absolute; inset: 0; inline-size: 100%; block-size: 100%; margin: 0; opacity: 0; cursor: inherit; }
17
+ .hw-calendar-switch > label:has(input:checked) { font-weight: var(--hw-weight-semibold); color: var(--hw-color-on-primary); }
18
+ .hw-calendar-switch > label:has(input:focus-visible) { outline: 2px solid var(--hw-color-focus); outline-offset: -2px; border-radius: var(--hw-radius-sm); }
19
+ .hw-calendar-switch > label:has(input:disabled) { cursor: not-allowed; opacity: 0.6; }
20
+ @media (prefers-reduced-motion: reduce) { .hw-calendar-switch::before { transition: none; } }
21
+ @media (forced-colors: active) {
22
+ .hw-date-picker-icon { forced-color-adjust: none; background: ButtonText; }
23
+ .hw-date-picker-trigger:disabled > .hw-date-picker-icon { background: GrayText; }
24
+ .hw-calendar-switch::before { forced-color-adjust: none; background: Highlight; border-color: Highlight; }
25
+ .hw-calendar-switch > label:has(input:checked) > span { forced-color-adjust: none; color: HighlightText; }
26
+ .hw-calendar-switch > label:has(input:focus-visible) { outline-color: CanvasText; }
27
+ }
28
+
29
+
30
+ /* Compact chrome; retain 44px day targets and six week rows without layout shifts. */
31
+ .hw-date-picker .hw-dialog { inline-size: min(24rem, calc(100vw - 2rem)); }
32
+ .hw-date-picker .hw-dialog-header { padding: var(--hw-space-3) var(--hw-space-4) var(--hw-space-2); gap: var(--hw-space-2); }
33
+ .hw-date-picker .hw-dialog-header > h2 { margin: 0; font-size: var(--hw-text-lg); }
34
+ .hw-date-picker .hw-dialog-body { padding: 0 var(--hw-space-4) var(--hw-space-3); }
35
+ .hw-date-picker .hw-dialog-footer:empty { display: none; }
36
+ .hw-date-picker .hw-dialog-body > .hw-field { margin-block-end: 0; }
37
+ .hw-calendar-options { margin-block-end: var(--hw-space-2); }
38
+ .hw-calendar-options > .hw-calendar-switch { margin: 0; padding: 3px; }
39
+ .hw-calendar-options > .hw-calendar-switch > label { min-block-size: 2.25rem; padding-block: var(--hw-space-1); }
40
+ .hw-calendar :is(.hw-calendar-header, .hw-calendar-toolbar) { margin-block: 0 var(--hw-space-1); }
41
+ .hw-calendar-heading { position: relative; display: flex; flex: 1; align-items: center; justify-content: center; gap: var(--hw-space-1); min-inline-size: 0; }
42
+ .hw-calendar-heading > :is(h3, span:not(.hw-calendar-info)) { margin: 0; font-size: var(--hw-text-md); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }
43
+ .hw-calendar-heading .hw-calendar-info, .hw-calendar-info > .hw-tooltip-anchor { position: static; }
44
+ .hw-calendar-info { flex: none; display: inline-flex; color: var(--hw-color-text-muted); }
45
+ .hw-calendar-info-icon { display: inline-grid; place-items: center; inline-size: 1rem; block-size: 1rem; border: 1px solid currentColor; border-radius: 50%; font: 600 0.6875rem/1 sans-serif; color: var(--hw-color-text-muted); cursor: help; }
46
+ .hw-calendar-info [data-hw-tooltip-trigger] { font-size: 0; border: 0; }
47
+ .hw-calendar-info [data-hw-tooltip-trigger]::before { content: ''; inline-size: 1rem; block-size: 1rem; background: currentColor; mask: url('./assets/icons/information-circle.svg') center / contain no-repeat; }
48
+ .hw-calendar-info .hw-tooltip { inset-block-end: calc(100% + 4px); inset-inline: auto; left: 50%; transform: translateX(-50%); inline-size: 15rem; max-inline-size: calc(100vw - 4rem); white-space: normal; text-align: start; }
49
+ .hw-calendar-info bdi { white-space: nowrap; font-variant-numeric: tabular-nums; }
50
+ .hw-calendar-info[hidden] { display: none; }