@hawiyah/styles 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +73 -0
- package/NOTICE +34 -0
- package/README.md +246 -2
- package/dist/accordion-motion.css +18 -0
- package/dist/assets/external-link.svg +1 -0
- package/dist/assets/favicon.svg +4 -0
- package/dist/assets/fonts/riyal-LICENSE.txt +93 -0
- package/dist/assets/fonts/riyal-provenance.json +47 -0
- package/dist/assets/fonts/riyal.woff2 +0 -0
- package/dist/assets/hawiyah-loader-256.gif +0 -0
- package/dist/assets/hawiyah-loader-white-256.gif +0 -0
- package/dist/assets/hawiyah-loader-white.gif +0 -0
- package/dist/assets/hawiyah-loader.gif +0 -0
- package/dist/assets/hawiyah-lockup-ar-mono.svg +4 -0
- package/dist/assets/hawiyah-lockup-ar-reverse.svg +4 -0
- package/dist/assets/hawiyah-lockup-ar-white.svg +4 -0
- package/dist/assets/hawiyah-lockup-ar.svg +4 -0
- package/dist/assets/hawiyah-lockup-bilingual-mono.svg +4 -0
- package/dist/assets/hawiyah-lockup-bilingual-reverse.svg +4 -0
- package/dist/assets/hawiyah-lockup-bilingual-white.svg +4 -0
- package/dist/assets/hawiyah-lockup-bilingual.svg +4 -0
- package/dist/assets/hawiyah-lockup-en-mono.svg +4 -0
- package/dist/assets/hawiyah-lockup-en-reverse.svg +4 -0
- package/dist/assets/hawiyah-lockup-en-white.svg +4 -0
- package/dist/assets/hawiyah-lockup-en.svg +4 -0
- package/dist/assets/hawiyah-pattern.svg +4 -0
- package/dist/assets/hawiyah-symbol-mono.svg +4 -0
- package/dist/assets/hawiyah-symbol-reverse.svg +4 -0
- package/dist/assets/hawiyah-symbol-white.svg +4 -0
- package/dist/assets/hawiyah-symbol.svg +4 -0
- package/dist/assets/hawiyah-wordmark-loader-256.gif +0 -0
- package/dist/assets/hawiyah-wordmark-loader-white-256.gif +0 -0
- package/dist/assets/hawiyah-wordmark-loader-white.gif +0 -0
- package/dist/assets/hawiyah-wordmark-loader.gif +0 -0
- package/dist/assets/hawiyah-wordmark-mono.svg +4 -0
- package/dist/assets/hawiyah-wordmark-reverse.svg +4 -0
- package/dist/assets/hawiyah-wordmark-white.svg +4 -0
- package/dist/assets/hawiyah-wordmark.svg +4 -0
- package/dist/assets/icons/LICENSE +21 -0
- package/dist/assets/icons/arrow-down-01.svg +3 -0
- package/dist/assets/icons/arrow-left-01.svg +3 -0
- package/dist/assets/icons/arrow-right-01.svg +3 -0
- package/dist/assets/icons/calendar-03.svg +6 -0
- package/dist/assets/icons/cancel-01.svg +3 -0
- package/dist/assets/icons/checkmark-circle-02.svg +4 -0
- package/dist/assets/icons/filter-horizontal.svg +8 -0
- package/dist/assets/icons/home-01.svg +3 -0
- package/dist/assets/icons/link-04.svg +4 -0
- package/dist/assets/icons/lock-password.svg +7 -0
- package/dist/assets/icons/menu-01.svg +5 -0
- package/dist/assets/icons/provenance.json +202 -0
- package/dist/assets/icons/search-01.svg +4 -0
- package/dist/assets/icons/sorting-05.svg +8 -0
- package/dist/assets/icons/thumbs-down.svg +4 -0
- package/dist/assets/icons/thumbs-up.svg +4 -0
- package/dist/assets/icons/view-off-slash.svg +5 -0
- package/dist/assets/icons/view.svg +4 -0
- package/dist/assets/notifications/danger-outline.svg +3 -0
- package/dist/assets/notifications/danger.svg +4 -0
- package/dist/assets/notifications/info-outline.svg +3 -0
- package/dist/assets/notifications/info.svg +4 -0
- package/dist/assets/notifications/neutral-outline.svg +3 -0
- package/dist/assets/notifications/neutral.svg +4 -0
- package/dist/assets/notifications/success-outline.svg +3 -0
- package/dist/assets/notifications/success.svg +4 -0
- package/dist/assets/notifications/warning-outline.svg +3 -0
- package/dist/assets/notifications/warning.svg +4 -0
- package/dist/assets/pagination-arrow.svg +1 -0
- package/dist/assets/select-down.svg +4 -0
- package/dist/assets/select-up.svg +4 -0
- package/dist/brand-loader.css +12 -0
- package/dist/components.css +335 -0
- package/dist/content-navigation.css +44 -0
- package/dist/date-picker.css +50 -0
- package/dist/dga.css +316 -0
- package/dist/direction.css +14 -0
- package/dist/extended.css +310 -0
- package/dist/feedback.css +48 -0
- package/dist/file-upload-list.css +64 -0
- package/dist/icons.css +42 -0
- package/dist/layout.css +129 -0
- package/dist/link-composition.css +10 -0
- package/dist/mobile-navigation.css +43 -0
- package/dist/mobile-top-bar.css +15 -0
- package/dist/navigation-drawer.css +103 -0
- package/dist/nic-accordion.css +96 -0
- package/dist/nic-avatars.css +33 -0
- package/dist/nic-badges.css +56 -0
- package/dist/nic-buttons.css +80 -0
- package/dist/nic-cards.css +77 -0
- package/dist/nic-carousel.css +77 -0
- package/dist/nic-choices.css +64 -0
- package/dist/nic-footer.css +73 -0
- package/dist/nic-foundations.css +115 -0
- package/dist/nic-icons.css +72 -0
- package/dist/nic-input-groups.css +35 -0
- package/dist/nic-links.css +61 -0
- package/dist/nic-lists.css +68 -0
- package/dist/nic-notification-dialog.css +114 -0
- package/dist/nic-notifications.css +124 -0
- package/dist/nic-pagination.css +73 -0
- package/dist/nic-rating.css +53 -0
- package/dist/nic-search.css +70 -0
- package/dist/nic-segmented.css +117 -0
- package/dist/nic-select.css +51 -0
- package/dist/nic-tables.css +68 -0
- package/dist/nic-tabs.css +86 -0
- package/dist/password-field.css +16 -0
- package/dist/portal-branches.css +52 -0
- package/dist/portal.css +24 -0
- package/dist/reset.css +12 -0
- package/dist/riyal.css +32 -0
- package/dist/search-field.css +11 -0
- package/dist/site-verification.css +36 -0
- package/dist/stepper.css +46 -0
- package/dist/styles.css +49 -0
- package/dist/tooltip-placement.css +65 -0
- package/package.json +51 -3
package/dist/layout.css
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* CSS-only responsive layout. Every boundary resets local options, so a nested
|
|
2
|
+
layout does not inherit its parent's breakpoint columns or padding. */
|
|
3
|
+
:where(.hw-container, .hw-stack, .hw-inline, .hw-grid, .hw-columns,
|
|
4
|
+
.hw-sidebar, .hw-center, .hw-spacer, .hw-aspect-ratio, .hw-section,
|
|
5
|
+
.hw-app-shell, .hw-page-header) {
|
|
6
|
+
--hw-layout-gap: var(--hw-gap, var(--hw-space-4));
|
|
7
|
+
--hw-layout-gap-sm: initial;
|
|
8
|
+
--hw-layout-gap-md: initial;
|
|
9
|
+
--hw-layout-gap-lg: initial;
|
|
10
|
+
--hw-layout-gap-xl: initial;
|
|
11
|
+
--hw-layout-padding: 0px;
|
|
12
|
+
--hw-layout-padding-sm: initial;
|
|
13
|
+
--hw-layout-padding-md: initial;
|
|
14
|
+
--hw-layout-padding-lg: initial;
|
|
15
|
+
--hw-layout-padding-xl: initial;
|
|
16
|
+
--hw-layout-columns: 1;
|
|
17
|
+
--hw-layout-columns-sm: initial;
|
|
18
|
+
--hw-layout-columns-md: initial;
|
|
19
|
+
--hw-layout-columns-lg: initial;
|
|
20
|
+
--hw-layout-columns-xl: initial;
|
|
21
|
+
--hw-layout-align: stretch;
|
|
22
|
+
--hw-layout-justify: start;
|
|
23
|
+
--hw-layout-wrap: wrap;
|
|
24
|
+
--hw-layout-min-item: 0px;
|
|
25
|
+
--hw-layout-sidebar-width: 18rem;
|
|
26
|
+
--hw-layout-max-width: var(--hw-content-max);
|
|
27
|
+
--hw-layout-ratio: 1.777777778;
|
|
28
|
+
--hw-layout-current-gap: var(--hw-layout-gap);
|
|
29
|
+
--hw-layout-current-padding: var(--hw-layout-padding);
|
|
30
|
+
--hw-layout-current-columns: var(--hw-layout-columns);
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
min-inline-size: 0;
|
|
33
|
+
gap: var(--hw-layout-current-gap);
|
|
34
|
+
padding: var(--hw-layout-current-padding);
|
|
35
|
+
font-family: var(--hw-font-sans);
|
|
36
|
+
}
|
|
37
|
+
:where(.hw-stack, .hw-inline, .hw-grid, .hw-columns, .hw-sidebar, .hw-app-shell) > * { min-inline-size: 0; }
|
|
38
|
+
.hw-container { inline-size: min(var(--hw-layout-max-width), calc(100% - 2 * var(--hw-content-gutter, 1.5rem))); margin-inline: auto; }
|
|
39
|
+
.hw-container[data-variant='fluid'] { inline-size: 100%; }
|
|
40
|
+
/* Mobile gutter is a layout policy; the reference frame widths are not
|
|
41
|
+
themselves breakpoints. Figma variable 50:3/4/5: 1280 / 32 / 16px. */
|
|
42
|
+
@media (max-width: 37.499rem) {
|
|
43
|
+
.hw-container:not([data-variant='fluid']) { inline-size: min(var(--hw-layout-max-width), calc(100% - 2 * var(--hw-content-gutter-mobile, 1rem))); }
|
|
44
|
+
}
|
|
45
|
+
.hw-stack { display: flex; flex-direction: column; flex-wrap: nowrap; align-items: var(--hw-layout-align); justify-content: var(--hw-layout-justify); gap: var(--hw-layout-current-gap); }
|
|
46
|
+
.hw-inline { --hw-layout-align: center; display: flex; flex-direction: row; flex-wrap: var(--hw-layout-wrap); align-items: var(--hw-layout-align); justify-content: var(--hw-layout-justify); }
|
|
47
|
+
.hw-grid, .hw-columns {
|
|
48
|
+
display: grid;
|
|
49
|
+
grid-template-columns: repeat(var(--hw-layout-current-columns), minmax(min(100%, var(--hw-layout-min-item)), 1fr));
|
|
50
|
+
align-items: var(--hw-layout-align);
|
|
51
|
+
justify-content: var(--hw-layout-justify);
|
|
52
|
+
}
|
|
53
|
+
.hw-sidebar { display: grid; grid-template-columns: minmax(0, 1fr); align-items: var(--hw-layout-align); }
|
|
54
|
+
.hw-center { --hw-layout-align: center; --hw-layout-justify: center; display: flex; flex-direction: column; align-items: var(--hw-layout-align); justify-content: var(--hw-layout-justify); text-align: center; }
|
|
55
|
+
.hw-spacer { --hw-layout-gap: 0px; flex: 1 1 0%; min-inline-size: var(--hw-layout-current-gap); min-block-size: var(--hw-layout-current-gap); pointer-events: none; }
|
|
56
|
+
.hw-aspect-ratio { position: relative; inline-size: 100%; aspect-ratio: var(--hw-layout-ratio); overflow: hidden; }
|
|
57
|
+
.hw-aspect-ratio > :is(img, video, iframe, canvas) { display: block; inline-size: 100%; block-size: 100%; border: 0; object-fit: cover; }
|
|
58
|
+
.hw-aspect-ratio[data-fit='contain'] > :is(img, video) { object-fit: contain; }
|
|
59
|
+
.hw-section { --hw-layout-padding: var(--hw-space-6); }
|
|
60
|
+
.hw-section[data-tone='muted'] { background: var(--hw-color-surface-muted); color: var(--hw-color-text); }
|
|
61
|
+
.hw-section[data-tone='brand'] { background: var(--hw-color-primary-subtle); color: var(--hw-color-primary-text); }
|
|
62
|
+
.hw-app-shell { position: relative; --hw-layout-gap: 0px; display: grid; grid-template-areas: 'header' 'sidebar' 'main' 'footer'; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto auto 1fr auto; min-block-size: 100dvh; background: var(--hw-color-canvas); color: var(--hw-color-text); }
|
|
63
|
+
.hw-app-shell > :is(header, .hw-app-shell-header) { grid-area: header; }
|
|
64
|
+
.hw-app-shell > :is(aside, nav, .hw-app-shell-sidebar) { grid-area: sidebar; }
|
|
65
|
+
.hw-app-shell > :is(main, .hw-app-shell-main) { grid-area: main; }
|
|
66
|
+
.hw-app-shell > :is(footer, .hw-app-shell-footer) { grid-area: footer; }
|
|
67
|
+
/* Angular projection leaves empty region elements when callers omit a slot. */
|
|
68
|
+
.hw-app-shell > :is(.hw-app-shell-header, .hw-app-shell-sidebar, .hw-app-shell-footer):empty { display: none; }
|
|
69
|
+
.hw-app-shell-sidebar { padding: var(--hw-space-5); border-block-end: 1px solid var(--hw-color-border); background: var(--hw-color-surface); }
|
|
70
|
+
.hw-app-shell-main { padding: clamp(1rem, 3vw, 3rem); }
|
|
71
|
+
.hw-page-header { --hw-layout-align: start; --hw-layout-justify: space-between; display: flex; flex-wrap: var(--hw-layout-wrap); align-items: var(--hw-layout-align); justify-content: var(--hw-layout-justify); color: var(--hw-color-text); }
|
|
72
|
+
.hw-page-header-content, .hw-page-header > :first-child:not(.hw-page-header-actions) { flex: 1 1 16rem; min-inline-size: 0; }
|
|
73
|
+
.hw-page-header :is(h1, h2) { margin: 0; font-size: clamp(var(--hw-text-xl), 3vw, var(--hw-text-3xl)); font-weight: var(--hw-weight-semibold); line-height: var(--hw-leading-heading); }
|
|
74
|
+
.hw-page-header p { max-inline-size: 65ch; margin-block: var(--hw-space-2) 0; color: var(--hw-color-text-muted); }
|
|
75
|
+
.hw-page-header-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-3); }
|
|
76
|
+
@media (min-width: 40rem) {
|
|
77
|
+
:where(.hw-container, .hw-stack, .hw-inline, .hw-grid, .hw-columns, .hw-sidebar, .hw-center, .hw-spacer, .hw-aspect-ratio, .hw-section, .hw-app-shell, .hw-page-header) {
|
|
78
|
+
--hw-layout-current-gap: var(--hw-layout-gap-sm, var(--hw-layout-gap));
|
|
79
|
+
--hw-layout-current-padding: var(--hw-layout-padding-sm, var(--hw-layout-padding));
|
|
80
|
+
--hw-layout-current-columns: var(--hw-layout-columns-sm, var(--hw-layout-columns));
|
|
81
|
+
}
|
|
82
|
+
.hw-sidebar[data-collapse-at='sm'] { grid-template-columns: min(40%, var(--hw-layout-sidebar-width)) minmax(0, 1fr); }
|
|
83
|
+
.hw-sidebar[data-collapse-at='sm'][data-side='end'] { grid-template-columns: minmax(0, 1fr) min(40%, var(--hw-layout-sidebar-width)); }
|
|
84
|
+
.hw-sidebar[data-collapse-at='sm'][data-side='end'] > :first-child { grid-column: 2; grid-row: 1; }
|
|
85
|
+
.hw-sidebar[data-collapse-at='sm'][data-side='end'] > :nth-child(2) { grid-column: 1; grid-row: 1; }
|
|
86
|
+
}
|
|
87
|
+
@media (min-width: 48rem) {
|
|
88
|
+
:where(.hw-container, .hw-stack, .hw-inline, .hw-grid, .hw-columns, .hw-sidebar, .hw-center, .hw-spacer, .hw-aspect-ratio, .hw-section, .hw-app-shell, .hw-page-header) {
|
|
89
|
+
--hw-layout-current-gap: var(--hw-layout-gap-md, var(--hw-layout-gap-sm, var(--hw-layout-gap)));
|
|
90
|
+
--hw-layout-current-padding: var(--hw-layout-padding-md, var(--hw-layout-padding-sm, var(--hw-layout-padding)));
|
|
91
|
+
--hw-layout-current-columns: var(--hw-layout-columns-md, var(--hw-layout-columns-sm, var(--hw-layout-columns)));
|
|
92
|
+
}
|
|
93
|
+
.hw-sidebar:not([data-collapse-at]), .hw-sidebar[data-collapse-at='md'] { grid-template-columns: min(40%, var(--hw-layout-sidebar-width)) minmax(0, 1fr); }
|
|
94
|
+
.hw-sidebar:not([data-collapse-at])[data-side='end'], .hw-sidebar[data-collapse-at='md'][data-side='end'] { grid-template-columns: minmax(0, 1fr) min(40%, var(--hw-layout-sidebar-width)); }
|
|
95
|
+
.hw-sidebar:not([data-collapse-at])[data-side='end'] > :first-child, .hw-sidebar[data-collapse-at='md'][data-side='end'] > :first-child { grid-column: 2; grid-row: 1; }
|
|
96
|
+
.hw-sidebar:not([data-collapse-at])[data-side='end'] > :nth-child(2), .hw-sidebar[data-collapse-at='md'][data-side='end'] > :nth-child(2) { grid-column: 1; grid-row: 1; }
|
|
97
|
+
}
|
|
98
|
+
@media (min-width: 64rem) {
|
|
99
|
+
:where(.hw-container, .hw-stack, .hw-inline, .hw-grid, .hw-columns, .hw-sidebar, .hw-center, .hw-spacer, .hw-aspect-ratio, .hw-section, .hw-app-shell, .hw-page-header) {
|
|
100
|
+
--hw-layout-current-gap: var(--hw-layout-gap-lg, var(--hw-layout-gap-md, var(--hw-layout-gap-sm, var(--hw-layout-gap))));
|
|
101
|
+
--hw-layout-current-padding: var(--hw-layout-padding-lg, var(--hw-layout-padding-md, var(--hw-layout-padding-sm, var(--hw-layout-padding))));
|
|
102
|
+
--hw-layout-current-columns: var(--hw-layout-columns-lg, var(--hw-layout-columns-md, var(--hw-layout-columns-sm, var(--hw-layout-columns))));
|
|
103
|
+
}
|
|
104
|
+
.hw-sidebar[data-collapse-at='lg'] { grid-template-columns: min(40%, var(--hw-layout-sidebar-width)) minmax(0, 1fr); }
|
|
105
|
+
.hw-sidebar[data-collapse-at='lg'][data-side='end'] { grid-template-columns: minmax(0, 1fr) min(40%, var(--hw-layout-sidebar-width)); }
|
|
106
|
+
.hw-sidebar[data-collapse-at='lg'][data-side='end'] > :first-child { grid-column: 2; grid-row: 1; }
|
|
107
|
+
.hw-sidebar[data-collapse-at='lg'][data-side='end'] > :nth-child(2) { grid-column: 1; grid-row: 1; }
|
|
108
|
+
.hw-app-shell:has(.hw-app-shell-sidebar:not(:empty), > aside:not(:empty), > nav:not(:empty)) { grid-template-areas: 'header header' 'sidebar main' 'footer footer'; grid-template-columns: min(30%, var(--hw-layout-sidebar-width)) minmax(0, 1fr); grid-template-rows: auto 1fr auto; }
|
|
109
|
+
.hw-app-shell[data-side='end']:has(.hw-app-shell-sidebar:not(:empty), > aside:not(:empty), > nav:not(:empty)) { grid-template-areas: 'header header' 'main sidebar' 'footer footer'; grid-template-columns: minmax(0, 1fr) min(30%, var(--hw-layout-sidebar-width)); }
|
|
110
|
+
.hw-app-shell-sidebar { border-block-end: 0; border-inline-end: 1px solid var(--hw-color-border); }
|
|
111
|
+
.hw-app-shell[data-side='end'] .hw-app-shell-sidebar { border-inline-end: 0; border-inline-start: 1px solid var(--hw-color-border); }
|
|
112
|
+
}
|
|
113
|
+
@media (min-width: 80rem) {
|
|
114
|
+
:where(.hw-container, .hw-stack, .hw-inline, .hw-grid, .hw-columns, .hw-sidebar, .hw-center, .hw-spacer, .hw-aspect-ratio, .hw-section, .hw-app-shell, .hw-page-header) {
|
|
115
|
+
--hw-layout-current-gap: var(--hw-layout-gap-xl, var(--hw-layout-gap-lg, var(--hw-layout-gap-md, var(--hw-layout-gap-sm, var(--hw-layout-gap)))));
|
|
116
|
+
--hw-layout-current-padding: var(--hw-layout-padding-xl, var(--hw-layout-padding-lg, var(--hw-layout-padding-md, var(--hw-layout-padding-sm, var(--hw-layout-padding)))));
|
|
117
|
+
--hw-layout-current-columns: var(--hw-layout-columns-xl, var(--hw-layout-columns-lg, var(--hw-layout-columns-md, var(--hw-layout-columns-sm, var(--hw-layout-columns)))));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Adapters may group the body for composition; display:contents preserves the
|
|
122
|
+
same outer grid while the landmarks themselves remain real elements. */
|
|
123
|
+
.hw-app-shell-body { display: contents; }
|
|
124
|
+
.hw-app-shell-body > .hw-app-shell-sidebar { grid-area: sidebar; }
|
|
125
|
+
.hw-app-shell-body > .hw-app-shell-main { grid-area: main; }
|
|
126
|
+
.hw-app-shell:not(:has(.hw-app-shell-sidebar:not(:empty), > aside:not(:empty), > nav:not(:empty))) { grid-template-areas: 'header' 'main' 'footer'; grid-template-columns: minmax(0, 1fr); grid-template-rows: auto 1fr auto; }
|
|
127
|
+
.hw-page-header-main { display: flex; flex-wrap: wrap; align-items: var(--hw-layout-align); justify-content: var(--hw-layout-justify); gap: var(--hw-layout-current-gap); flex: 1 1 100%; min-inline-size: 0; }
|
|
128
|
+
.hw-page-header-main > :first-child { flex: 1 1 16rem; min-inline-size: 0; }
|
|
129
|
+
.hw-page-header > :is(.hw-breadcrumb, nav) { flex-basis: 100%; }
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/* Inline SVGs may be display:block in a consuming reset. Keep the label and
|
|
2
|
+
its icon on one flex row without changing link semantics or color variants. */
|
|
3
|
+
.hw-link-icon, .hw-link:has(> svg, > .hw-icon) {
|
|
4
|
+
display: inline-flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: var(--hw-space-2);
|
|
7
|
+
max-inline-size: 100%;
|
|
8
|
+
vertical-align: middle;
|
|
9
|
+
}
|
|
10
|
+
.hw-link-icon > svg, .hw-link > :is(svg, .hw-icon) { flex: none; }
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* Mobile Components 8332:24202 / 24242 / 24282: color state changes,
|
|
2
|
+
not a translating indicator. Route navigation keeps native link semantics. */
|
|
3
|
+
.hw-secondary-nav[data-variant='mobile'] {
|
|
4
|
+
border: 0;
|
|
5
|
+
padding-block-end: env(safe-area-inset-bottom, 0px);
|
|
6
|
+
}
|
|
7
|
+
.hw-secondary-nav[data-variant='mobile'] ul {
|
|
8
|
+
flex-wrap: nowrap;
|
|
9
|
+
gap: 0;
|
|
10
|
+
padding: 0 0.25rem;
|
|
11
|
+
}
|
|
12
|
+
.hw-secondary-nav[data-variant='mobile'] li { flex: 1 1 0; min-inline-size: 0; }
|
|
13
|
+
.hw-secondary-nav[data-variant='mobile'] a {
|
|
14
|
+
box-sizing: border-box;
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
gap: 0.25rem;
|
|
19
|
+
inline-size: 100%;
|
|
20
|
+
min-block-size: 4.375rem;
|
|
21
|
+
padding: 0.6875rem 0.5rem 0.75rem;
|
|
22
|
+
border-block-start: 1px solid transparent;
|
|
23
|
+
border-block-end: 0;
|
|
24
|
+
background: transparent;
|
|
25
|
+
color: var(--hw-color-text-muted);
|
|
26
|
+
font: var(--hw-weight-medium) 0.75rem / 1.5 var(--hw-font-sans);
|
|
27
|
+
text-align: center;
|
|
28
|
+
overflow-wrap: anywhere;
|
|
29
|
+
transition: color var(--hw-duration-tab-bar, 300ms) var(--hw-ease-tab-bar, ease-out),
|
|
30
|
+
border-block-start-color var(--hw-duration-tab-bar, 300ms) var(--hw-ease-tab-bar, ease-out);
|
|
31
|
+
}
|
|
32
|
+
.hw-secondary-nav[data-variant='mobile'] .hw-icon { --hw-icon-size: 1.5rem; }
|
|
33
|
+
.hw-secondary-nav[data-variant='mobile'] a:is(:hover, :active, [aria-current='page']) {
|
|
34
|
+
color: var(--hw-color-primary-text);
|
|
35
|
+
background: transparent;
|
|
36
|
+
}
|
|
37
|
+
.hw-secondary-nav[data-variant='mobile'] a[aria-current='page'] { border-block-start-color: currentColor; }
|
|
38
|
+
@media (prefers-reduced-motion: reduce) {
|
|
39
|
+
.hw-secondary-nav[data-variant='mobile'] a { transition: none; }
|
|
40
|
+
}
|
|
41
|
+
@media (forced-colors: active) {
|
|
42
|
+
.hw-secondary-nav[data-variant='mobile'] a[aria-current='page'] { border-block-start-color: LinkText; }
|
|
43
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/* Mobile 8335:15564/15565 and 8335:15397/15402/15403. OS status chrome is
|
|
2
|
+
excluded. Intrinsic height and 44px actions are accessibility adaptations. */
|
|
3
|
+
.hw-mobile-top-bar { box-sizing: border-box; display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); min-inline-size: 0; inline-size: 100%; min-block-size: 3.75rem; padding-block: max(var(--hw-space-2), env(safe-area-inset-top, 0px)) var(--hw-space-2); padding-left: max(var(--hw-space-4), env(safe-area-inset-left, 0px)); padding-right: max(var(--hw-space-4), env(safe-area-inset-right, 0px)); color: var(--hw-color-text); background: var(--hw-color-surface); font-family: var(--hw-font-sans); border-block-end: 1px solid var(--hw-color-border); }
|
|
4
|
+
.hw-mobile-top-bar-copy { flex: 1 1 6rem; min-inline-size: 0; overflow-wrap: anywhere; }
|
|
5
|
+
.hw-mobile-top-bar-title { margin: 0; color: var(--hw-color-heading, var(--hw-color-text)); font-size: .875rem; line-height: 1.5; font-weight: var(--hw-weight-semibold); }
|
|
6
|
+
.hw-mobile-top-bar[data-variant='main'] .hw-mobile-top-bar-title { font-size: 1.625rem; font-weight: var(--hw-weight-bold, 700); }
|
|
7
|
+
.hw-mobile-top-bar-subtitle { margin: 0; color: var(--hw-color-text-muted); font-size: .75rem; line-height: 1.5; }
|
|
8
|
+
.hw-mobile-top-bar-leading, .hw-mobile-top-bar-actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-2); min-inline-size: 0; max-inline-size: 100%; }
|
|
9
|
+
.hw-mobile-top-bar-leading:empty, .hw-mobile-top-bar-actions:empty { display: none; }
|
|
10
|
+
.hw-mobile-top-bar-actions { margin-inline-start: auto; }
|
|
11
|
+
.hw-mobile-top-bar :is(a, button) { box-sizing: border-box; display: inline-flex; align-items: center; justify-content: center; min-inline-size: 2.75rem; min-block-size: 2.75rem; white-space: normal; overflow-wrap: anywhere; }
|
|
12
|
+
.hw-mobile-top-bar-back { color: inherit; text-decoration: none; border-radius: var(--hw-radius-sm); }
|
|
13
|
+
.hw-mobile-top-bar-back:hover { background: var(--hw-color-surface-muted); }
|
|
14
|
+
.hw-mobile-top-bar :is(a, button):focus-visible { outline: 2px solid var(--hw-color-focus); outline-offset: -2px; }
|
|
15
|
+
@media (forced-colors: active) { .hw-mobile-top-bar :is(a, button):focus-visible { outline-color: Highlight; } }
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/* Mobile Nav Drawer 1679:30949 / 538:296406. Source dimensions describe
|
|
2
|
+
examples; content grows and the existing Drawer owns modal behavior/motion. */
|
|
3
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
inline-size: min(20.4375rem, calc(100vw - 1rem));
|
|
6
|
+
max-inline-size: calc(100vw - 1rem);
|
|
7
|
+
color: var(--hw-color-text);
|
|
8
|
+
background: var(--hw-color-surface);
|
|
9
|
+
font-family: var(--hw-font-sans);
|
|
10
|
+
}
|
|
11
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-header {
|
|
12
|
+
align-items: center;
|
|
13
|
+
gap: 0.5rem;
|
|
14
|
+
padding: max(1rem, env(safe-area-inset-top, 0px)) max(1rem, env(safe-area-inset-right, 0px)) 1rem max(1rem, env(safe-area-inset-left, 0px));
|
|
15
|
+
}
|
|
16
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-header h2 { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
17
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-header > button {
|
|
18
|
+
flex: none;
|
|
19
|
+
min-inline-size: 2.75rem;
|
|
20
|
+
min-block-size: 2.75rem;
|
|
21
|
+
padding: 0.5rem;
|
|
22
|
+
font-size: 0;
|
|
23
|
+
}
|
|
24
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-header > button::after {
|
|
25
|
+
content: '';
|
|
26
|
+
inline-size: 1.5rem;
|
|
27
|
+
block-size: 1.5rem;
|
|
28
|
+
background: currentColor;
|
|
29
|
+
mask: url('./assets/icons/cancel-01.svg') center / contain no-repeat;
|
|
30
|
+
}
|
|
31
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-body {
|
|
32
|
+
padding: 0 max(1rem, env(safe-area-inset-right, 0px)) max(1rem, env(safe-area-inset-bottom, 0px)) max(1rem, env(safe-area-inset-left, 0px));
|
|
33
|
+
}
|
|
34
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-footer {
|
|
35
|
+
padding: 1rem max(1rem, env(safe-area-inset-right, 0px)) max(1rem, env(safe-area-inset-bottom, 0px)) max(1rem, env(safe-area-inset-left, 0px));
|
|
36
|
+
}
|
|
37
|
+
.hw-navigation-drawer-host > hw-drawer > .hw-drawer > .hw-dialog-footer:has(> [hwDrawerFooter]:empty) { display: none; }
|
|
38
|
+
.hw-navigation-drawer-user { padding-block: 1rem; border-block-end: 1px solid var(--hw-color-border); overflow-wrap: anywhere; }
|
|
39
|
+
.hw-navigation-drawer-user:empty { display: none; }
|
|
40
|
+
.hw-navigation-drawer-nav { padding-block-start: 1rem; }
|
|
41
|
+
.hw-navigation-drawer-nav ul { list-style: none; margin: 0; padding: 0; }
|
|
42
|
+
.hw-navigation-drawer-nav li { min-inline-size: 0; }
|
|
43
|
+
.hw-navigation-drawer-row {
|
|
44
|
+
box-sizing: border-box;
|
|
45
|
+
position: relative;
|
|
46
|
+
display: flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
gap: 0.5rem;
|
|
49
|
+
min-inline-size: 0;
|
|
50
|
+
min-block-size: 2.75rem;
|
|
51
|
+
padding: 0.75rem 1rem;
|
|
52
|
+
border: 0;
|
|
53
|
+
border-radius: 0.25rem;
|
|
54
|
+
color: var(--hw-color-text);
|
|
55
|
+
background: transparent;
|
|
56
|
+
font: var(--hw-weight-medium) 0.875rem / 1.4286 var(--hw-font-sans);
|
|
57
|
+
text-decoration: none;
|
|
58
|
+
text-align: start;
|
|
59
|
+
list-style: none;
|
|
60
|
+
overflow-wrap: anywhere;
|
|
61
|
+
}
|
|
62
|
+
.hw-navigation-drawer-label { min-inline-size: 0; }
|
|
63
|
+
.hw-navigation-drawer-group > ul .hw-navigation-drawer-row { padding-inline-start: 2.5rem; }
|
|
64
|
+
.hw-navigation-drawer-row .hw-icon { --hw-icon-size: 1rem; }
|
|
65
|
+
:is(a,summary).hw-navigation-drawer-row { cursor: pointer; }
|
|
66
|
+
:is(a,summary).hw-navigation-drawer-row:hover { background: var(--hw-color-surface-muted); }
|
|
67
|
+
.hw-navigation-drawer-row[aria-current='page'] {
|
|
68
|
+
color: var(--hw-color-primary-text);
|
|
69
|
+
background: var(--hw-color-surface-muted);
|
|
70
|
+
font-weight: var(--hw-weight-semibold);
|
|
71
|
+
}
|
|
72
|
+
.hw-navigation-drawer-row[aria-current='page']::before {
|
|
73
|
+
content: '';
|
|
74
|
+
position: absolute;
|
|
75
|
+
inset-inline-start: 0;
|
|
76
|
+
inset-block-start: 50%;
|
|
77
|
+
translate: 0 -50%;
|
|
78
|
+
inline-size: 0.375rem;
|
|
79
|
+
block-size: 2rem;
|
|
80
|
+
border-radius: var(--hw-radius-full);
|
|
81
|
+
background: currentColor;
|
|
82
|
+
}
|
|
83
|
+
.hw-navigation-drawer-row:focus-visible { outline: 2px solid var(--hw-color-focus); outline-offset: -2px; }
|
|
84
|
+
.hw-navigation-drawer-row[aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
|
|
85
|
+
summary.hw-navigation-drawer-row::-webkit-details-marker { display: none; }
|
|
86
|
+
summary.hw-navigation-drawer-row::after {
|
|
87
|
+
content: '';
|
|
88
|
+
flex: none;
|
|
89
|
+
margin-inline-start: auto;
|
|
90
|
+
inline-size: 1rem;
|
|
91
|
+
block-size: 1rem;
|
|
92
|
+
background: currentColor;
|
|
93
|
+
mask: url('./assets/icons/arrow-down-01.svg') center / contain no-repeat;
|
|
94
|
+
}
|
|
95
|
+
.hw-navigation-drawer-group[open] > summary.hw-navigation-drawer-row::after { rotate: 180deg; }
|
|
96
|
+
@media (forced-colors: active) {
|
|
97
|
+
.hw-navigation-drawer-row[aria-current='page'] { color: LinkText; }
|
|
98
|
+
.hw-navigation-drawer-row[aria-current='page']::before { background: LinkText; forced-color-adjust: none; }
|
|
99
|
+
.hw-navigation-drawer-row:focus-visible { outline-color: Highlight; }
|
|
100
|
+
.hw-navigation-drawer-row[aria-disabled='true'] { color: GrayText; }
|
|
101
|
+
summary.hw-navigation-drawer-row::after,
|
|
102
|
+
:is(.hw-navigation-drawer, .hw-navigation-drawer-host > hw-drawer > .hw-drawer) > .hw-dialog-header > button::after { background: ButtonText; forced-color-adjust: none; }
|
|
103
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/* NIC global.css 1677–1766; see docs/nic-accordion.md for DOM mapping.
|
|
2
|
+
The source header has 16px padding + a 2px transparent border around its
|
|
3
|
+
button. Item padding preserves that space without adding a wrapper to summary. */
|
|
4
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
5
|
+
--hw-profile-accordion-radius: 0.375rem;
|
|
6
|
+
--hw-profile-accordion-item-padding: 1.125rem;
|
|
7
|
+
--hw-profile-accordion-trigger-padding: 0.75rem 1rem;
|
|
8
|
+
--hw-profile-accordion-trigger-leading: 1.5rem;
|
|
9
|
+
--hw-profile-accordion-content-padding: 1rem;
|
|
10
|
+
--hw-profile-accordion-content-margin: 1.125rem -1.125rem -1.125rem;
|
|
11
|
+
--hw-profile-accordion-surface-duration: 150ms;
|
|
12
|
+
--hw-profile-accordion-icon-size: 1.125rem;
|
|
13
|
+
--hw-profile-accordion-icon-offset: 1px;
|
|
14
|
+
--hw-profile-accordion-icon-content: '';
|
|
15
|
+
--hw-profile-accordion-icon-mask: url('./assets/icons/arrow-down-01.svg') center / contain no-repeat;
|
|
16
|
+
--hw-profile-accordion-icon-background: currentColor;
|
|
17
|
+
--hw-profile-accordion-icon-expanded: rotate(-180deg);
|
|
18
|
+
}
|
|
19
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
20
|
+
--hw-profile-accordion-radius: initial;
|
|
21
|
+
--hw-profile-accordion-item-padding: initial;
|
|
22
|
+
--hw-profile-accordion-trigger-padding: initial;
|
|
23
|
+
--hw-profile-accordion-trigger-leading: initial;
|
|
24
|
+
--hw-profile-accordion-content-padding: initial;
|
|
25
|
+
--hw-profile-accordion-content-margin: initial;
|
|
26
|
+
--hw-profile-accordion-surface-duration: initial;
|
|
27
|
+
--hw-profile-accordion-icon-size: initial;
|
|
28
|
+
--hw-profile-accordion-icon-offset: initial;
|
|
29
|
+
--hw-profile-accordion-icon-content: initial;
|
|
30
|
+
--hw-profile-accordion-icon-mask: initial;
|
|
31
|
+
--hw-profile-accordion-icon-background: initial;
|
|
32
|
+
--hw-profile-accordion-icon-expanded: initial;
|
|
33
|
+
}
|
|
34
|
+
.hw-accordion {
|
|
35
|
+
border-color: var(--hw-color-accordion-border);
|
|
36
|
+
border-radius: var(--hw-profile-accordion-radius, var(--hw-radius-lg));
|
|
37
|
+
}
|
|
38
|
+
.hw-accordion-item {
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
padding: var(--hw-profile-accordion-item-padding, 0px);
|
|
41
|
+
}
|
|
42
|
+
.hw-accordion-item + .hw-accordion-item { border-block-start-color: var(--hw-color-accordion-border); }
|
|
43
|
+
.hw-accordion-trigger {
|
|
44
|
+
--hw-accordion-trigger-background: transparent;
|
|
45
|
+
padding: var(--hw-profile-accordion-trigger-padding, var(--hw-space-4) var(--hw-space-5));
|
|
46
|
+
line-height: var(--hw-profile-accordion-trigger-leading, inherit);
|
|
47
|
+
background: var(--hw-accordion-trigger-background);
|
|
48
|
+
overflow-anchor: none;
|
|
49
|
+
transition: color var(--hw-profile-accordion-surface-duration, 0ms) ease-in-out,
|
|
50
|
+
background-color var(--hw-profile-accordion-surface-duration, 0ms) ease-in-out;
|
|
51
|
+
}
|
|
52
|
+
.hw-accordion-trigger:hover { --hw-accordion-trigger-background: var(--hw-color-surface-muted); }
|
|
53
|
+
.hw-accordion-trigger:focus {
|
|
54
|
+
background: var(--hw-dga-on, var(--hw-accordion-trigger-background)) var(--hw-dga-off, var(--hw-color-accordion-focus));
|
|
55
|
+
}
|
|
56
|
+
.hw-accordion-trigger:focus-visible {
|
|
57
|
+
outline-width: var(--hw-dga-on, var(--hw-focus-width)) var(--hw-dga-off, 2px);
|
|
58
|
+
outline-color: var(--hw-dga-on, var(--hw-color-focus)) var(--hw-dga-off, var(--hw-color-focus-contrast));
|
|
59
|
+
}
|
|
60
|
+
.hw-accordion-item > .hw-accordion-content {
|
|
61
|
+
margin: var(--hw-profile-accordion-content-margin, 0px);
|
|
62
|
+
padding: var(--hw-profile-accordion-content-padding, 0 var(--hw-space-5) var(--hw-space-5));
|
|
63
|
+
color: var(--hw-dga-on, var(--hw-color-text-muted)) var(--hw-dga-off, var(--hw-color-text));
|
|
64
|
+
}
|
|
65
|
+
/* Native no-script disclosure gets the same indicator in the DGA profile. */
|
|
66
|
+
.hw-accordion-trigger::after {
|
|
67
|
+
position: relative;
|
|
68
|
+
top: var(--hw-profile-accordion-icon-offset, 0px);
|
|
69
|
+
content: var(--hw-profile-accordion-icon-content, '+');
|
|
70
|
+
inline-size: var(--hw-profile-accordion-icon-size, 1.5rem);
|
|
71
|
+
block-size: var(--hw-profile-accordion-icon-size, 1.5rem);
|
|
72
|
+
background: var(--hw-profile-accordion-icon-background, transparent);
|
|
73
|
+
mask: var(--hw-profile-accordion-icon-mask, none);
|
|
74
|
+
transition: transform var(--hw-duration-accordion-indicator, 0ms) var(--hw-ease-accordion, ease-in-out);
|
|
75
|
+
}
|
|
76
|
+
.hw-accordion-item[open] > .hw-accordion-trigger::after {
|
|
77
|
+
content: var(--hw-profile-accordion-icon-content, '−');
|
|
78
|
+
transform: var(--hw-profile-accordion-icon-expanded, none);
|
|
79
|
+
}
|
|
80
|
+
.hw-accordion-item[data-hw-expanded] > .hw-accordion-trigger::after {
|
|
81
|
+
content: '';
|
|
82
|
+
inline-size: var(--hw-profile-accordion-icon-size, 1rem);
|
|
83
|
+
block-size: var(--hw-profile-accordion-icon-size, 1rem);
|
|
84
|
+
background: currentColor;
|
|
85
|
+
mask: url('./assets/icons/arrow-down-01.svg') center / contain no-repeat;
|
|
86
|
+
transform: rotate(0deg);
|
|
87
|
+
}
|
|
88
|
+
.hw-accordion-item[data-hw-expanded='true'] > .hw-accordion-trigger::after { transform: rotate(-180deg); }
|
|
89
|
+
@media (prefers-reduced-motion: reduce) {
|
|
90
|
+
.hw-accordion-trigger, .hw-accordion-trigger::after { transition: none; }
|
|
91
|
+
}
|
|
92
|
+
@media (forced-colors: active) {
|
|
93
|
+
.hw-accordion, .hw-accordion-item + .hw-accordion-item { border-color: CanvasText; }
|
|
94
|
+
.hw-accordion-trigger:focus-visible { outline-color: Highlight; }
|
|
95
|
+
.hw-accordion-trigger::after { color: ButtonText; forced-color-adjust: none; }
|
|
96
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/* NIC global.css 3156–3181. Explicit source sizes are additive;
|
|
2
|
+
existing sm/lg/xl options remain Hawiyah extensions. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-avatar-size: 2.5rem;
|
|
5
|
+
--hw-profile-avatar-border: 3px;
|
|
6
|
+
}
|
|
7
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
8
|
+
--hw-profile-avatar-size: initial;
|
|
9
|
+
--hw-profile-avatar-border: initial;
|
|
10
|
+
}
|
|
11
|
+
.hw-avatar, img.hw-avatar {
|
|
12
|
+
inline-size: var(--hw-avatar-size, var(--hw-profile-avatar-size, 2.75rem));
|
|
13
|
+
block-size: var(--hw-avatar-size, var(--hw-profile-avatar-size, 2.75rem));
|
|
14
|
+
border-width: var(--hw-profile-avatar-border, 1px);
|
|
15
|
+
border-color: var(--hw-color-avatar-border);
|
|
16
|
+
object-fit: cover; object-position: center;
|
|
17
|
+
}
|
|
18
|
+
.hw-avatar[data-size='sm'] { --hw-avatar-size: 2rem; }
|
|
19
|
+
.hw-avatar[data-size='lg'] { --hw-avatar-size: 3.5rem; }
|
|
20
|
+
.hw-avatar[data-size='xl'], .hw-avatar[data-size='80'] { --hw-avatar-size: 5rem; }
|
|
21
|
+
.hw-avatar[data-size='40'] { --hw-avatar-size: 2.5rem; }
|
|
22
|
+
.hw-avatar[data-size='64'] { --hw-avatar-size: 4rem; }
|
|
23
|
+
.hw-avatar[data-size='120'] { --hw-avatar-size: 7.5rem; }
|
|
24
|
+
.hw-avatar[data-size='64'] { font-size: var(--hw-text-lg); }
|
|
25
|
+
.hw-avatar:is([data-size='80'], [data-size='120']) { font-size: var(--hw-text-2xl); }
|
|
26
|
+
.hw-avatar > img { display: block; min-inline-size: 0; min-block-size: 0; inline-size: 100%; block-size: 100%; object-fit: cover; object-position: center; }
|
|
27
|
+
.hw-avatar-group .hw-avatar {
|
|
28
|
+
border-width: var(--hw-profile-avatar-border, 2px);
|
|
29
|
+
border-color: var(--hw-dga-on, var(--hw-color-avatar-border)) var(--hw-dga-off, var(--hw-color-surface));
|
|
30
|
+
}
|
|
31
|
+
@media (forced-colors: active) {
|
|
32
|
+
.hw-avatar, .hw-avatar-group .hw-avatar { border-color: CanvasText; }
|
|
33
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* NIC global.css 3018–3153. See docs/nic-badges.md for measured geometry,
|
|
2
|
+
the source's overridden badge height and accessible multiline adaptations. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-badge-radius: .25rem;
|
|
5
|
+
--hw-profile-badge-padding: 0 .5rem;
|
|
6
|
+
--hw-profile-badge-leading: 1.125rem;
|
|
7
|
+
--hw-profile-badge-min-width: 2rem;
|
|
8
|
+
--hw-profile-badge-dot: .625rem;
|
|
9
|
+
--hw-profile-badge-status-gap: .5rem;
|
|
10
|
+
--hw-profile-badge-status-height: 1.5rem;
|
|
11
|
+
--hw-profile-badge-status-border: 0px;
|
|
12
|
+
}
|
|
13
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
14
|
+
--hw-profile-badge-radius: initial;
|
|
15
|
+
--hw-profile-badge-padding: initial;
|
|
16
|
+
--hw-profile-badge-leading: initial;
|
|
17
|
+
--hw-profile-badge-min-width: initial;
|
|
18
|
+
--hw-profile-badge-dot: initial;
|
|
19
|
+
--hw-profile-badge-status-gap: initial;
|
|
20
|
+
--hw-profile-badge-status-height: initial;
|
|
21
|
+
--hw-profile-badge-status-border: initial;
|
|
22
|
+
}
|
|
23
|
+
.hw-badges { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
|
|
24
|
+
.hw-badge {
|
|
25
|
+
--hw-tone: var(--hw-color-badge-neutral-text);
|
|
26
|
+
--hw-tone-bg: var(--hw-color-badge-neutral-background);
|
|
27
|
+
--hw-tone-border: var(--hw-color-badge-neutral-border);
|
|
28
|
+
--hw-badge-dot-color: var(--hw-color-badge-neutral-dot);
|
|
29
|
+
box-sizing: border-box; justify-content: center; flex-shrink: 0;
|
|
30
|
+
min-inline-size: min(100%, var(--hw-profile-badge-min-width, 0px));
|
|
31
|
+
padding: var(--hw-profile-badge-padding, .125rem var(--hw-space-2));
|
|
32
|
+
border-color: var(--hw-tone-border);
|
|
33
|
+
border-radius: var(--hw-profile-badge-radius, var(--hw-radius-full));
|
|
34
|
+
line-height: var(--hw-profile-badge-leading, 1.65);
|
|
35
|
+
text-align: center; white-space: normal; overflow-wrap: anywhere;
|
|
36
|
+
}
|
|
37
|
+
.hw-badge[data-tone='info'] { --hw-tone: var(--hw-color-badge-info-text); --hw-tone-bg: var(--hw-color-badge-info-background); --hw-tone-border: var(--hw-color-badge-info-border); --hw-badge-dot-color: currentColor; }
|
|
38
|
+
.hw-badge[data-tone='success'] { --hw-tone: var(--hw-color-badge-success-text); --hw-tone-bg: var(--hw-color-badge-success-background); --hw-tone-border: var(--hw-color-badge-success-border); --hw-badge-dot-color: currentColor; }
|
|
39
|
+
.hw-badge[data-tone='warning'] { --hw-tone: var(--hw-color-badge-warning-text); --hw-tone-bg: var(--hw-color-badge-warning-background); --hw-tone-border: var(--hw-color-badge-warning-border); --hw-badge-dot-color: currentColor; }
|
|
40
|
+
.hw-badge[data-tone='danger'] { --hw-tone: var(--hw-color-badge-danger-text); --hw-tone-bg: var(--hw-color-badge-danger-background); --hw-tone-border: var(--hw-color-badge-danger-border); --hw-badge-dot-color: currentColor; }
|
|
41
|
+
/* The outline variant is an existing Hawiyah extension to the source. */
|
|
42
|
+
.hw-badge[data-variant='outline'] { border-color: currentColor; background: transparent; }
|
|
43
|
+
.hw-badge[data-variant='dot'] {
|
|
44
|
+
min-inline-size: 0; min-block-size: var(--hw-profile-badge-status-height, 0px);
|
|
45
|
+
gap: var(--hw-profile-badge-status-gap, var(--hw-space-1));
|
|
46
|
+
border-width: var(--hw-profile-badge-status-border, 1px);
|
|
47
|
+
border-radius: var(--hw-radius-full);
|
|
48
|
+
}
|
|
49
|
+
.hw-badge[data-variant='dot']::before {
|
|
50
|
+
inline-size: var(--hw-profile-badge-dot, .375rem); block-size: var(--hw-profile-badge-dot, .375rem);
|
|
51
|
+
flex: none; background: var(--hw-badge-dot-color);
|
|
52
|
+
}
|
|
53
|
+
@media (forced-colors: active) {
|
|
54
|
+
.hw-badge, .hw-badge[data-variant='outline'] { border-color: CanvasText; color: CanvasText; background: Canvas; }
|
|
55
|
+
.hw-badge[data-variant='dot']::before { background: CanvasText; forced-color-adjust: none; }
|
|
56
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/* NIC global.css 971–1292. Keep public density sizes; see docs/nic-buttons.md.
|
|
2
|
+
Color switches resolve at the component, including nested theme boundaries. */
|
|
3
|
+
.hw-button {
|
|
4
|
+
--hw-button-active: var(--hw-button-hover);
|
|
5
|
+
--hw-button-focus-bg: var(--hw-button-bg);
|
|
6
|
+
--hw-button-focus-color: var(--hw-color-focus-contrast);
|
|
7
|
+
--hw-button-rest-outline: none;
|
|
8
|
+
--hw-button-active-outline: var(--hw-button-rest-outline);
|
|
9
|
+
--hw-button-disabled-bg: var(--hw-color-disabled);
|
|
10
|
+
--hw-button-disabled-border: transparent;
|
|
11
|
+
--hw-button-disabled-outline: none;
|
|
12
|
+
}
|
|
13
|
+
.hw-button:not([data-variant]), .hw-button[data-variant='primary'] {
|
|
14
|
+
--hw-button-active: var(--hw-color-primary-active);
|
|
15
|
+
}
|
|
16
|
+
.hw-button[data-variant='default'] {
|
|
17
|
+
--hw-button-bg: var(--hw-color-action-default);
|
|
18
|
+
--hw-button-fg: var(--hw-color-on-action-default);
|
|
19
|
+
--hw-button-hover: var(--hw-color-action-default-hover);
|
|
20
|
+
--hw-button-active: var(--hw-color-action-default-active);
|
|
21
|
+
}
|
|
22
|
+
.hw-button[data-variant='secondary'] {
|
|
23
|
+
--hw-button-bg: var(--hw-color-action-secondary);
|
|
24
|
+
--hw-button-fg: var(--hw-color-on-action-secondary);
|
|
25
|
+
--hw-button-hover: var(--hw-color-action-secondary-hover);
|
|
26
|
+
--hw-button-border: var(--hw-dga-on, var(--hw-color-border-strong)) var(--hw-dga-off, transparent);
|
|
27
|
+
}
|
|
28
|
+
.hw-button[data-variant='outline'] {
|
|
29
|
+
--hw-button-bg: transparent;
|
|
30
|
+
--hw-button-fg: var(--hw-dga-on, var(--hw-color-primary-text)) var(--hw-dga-off, var(--hw-color-text));
|
|
31
|
+
--hw-button-border: var(--hw-dga-on, var(--hw-color-primary)) var(--hw-dga-off, transparent);
|
|
32
|
+
--hw-button-hover: var(--hw-color-action-outline-hover);
|
|
33
|
+
--hw-button-active: var(--hw-color-action-outline-active);
|
|
34
|
+
--hw-button-rest-outline: var(--hw-dga-on, none) var(--hw-dga-off, 1px solid var(--hw-color-action-outline-border));
|
|
35
|
+
--hw-button-active-outline: var(--hw-dga-on, none) var(--hw-dga-off, 1px solid var(--hw-color-action-outline-border-active));
|
|
36
|
+
--hw-button-disabled-bg: transparent;
|
|
37
|
+
--hw-button-disabled-outline: 1px solid var(--hw-color-action-outline-border);
|
|
38
|
+
}
|
|
39
|
+
.hw-button[data-variant='outline-white'] {
|
|
40
|
+
--hw-button-bg: transparent;
|
|
41
|
+
--hw-button-fg: #fff;
|
|
42
|
+
--hw-button-hover: rgb(255 255 255 / 0.2);
|
|
43
|
+
--hw-button-active: rgb(255 255 255 / 0.3);
|
|
44
|
+
--hw-button-focus-color: #fff;
|
|
45
|
+
--hw-button-rest-outline: 1px solid rgb(255 255 255 / 0.7);
|
|
46
|
+
--hw-button-disabled-bg: transparent;
|
|
47
|
+
--hw-button-disabled-outline: 1px solid var(--hw-color-action-outline-border);
|
|
48
|
+
}
|
|
49
|
+
.hw-button[data-variant='light'] {
|
|
50
|
+
--hw-button-bg: var(--hw-color-action-light);
|
|
51
|
+
--hw-button-fg: var(--hw-color-on-action-light);
|
|
52
|
+
--hw-button-hover: var(--hw-color-action-light-hover);
|
|
53
|
+
--hw-button-active: var(--hw-color-action-light-active);
|
|
54
|
+
}
|
|
55
|
+
.hw-button[data-variant='danger'] { --hw-button-active: var(--hw-color-danger-active); }
|
|
56
|
+
@media (hover: hover) {
|
|
57
|
+
.hw-button:is([data-variant='secondary'], [data-variant='light'], [data-variant='danger']):hover { --hw-button-focus-bg: var(--hw-button-hover); }
|
|
58
|
+
}
|
|
59
|
+
.hw-button { outline: var(--hw-button-rest-outline); outline-offset: 0; }
|
|
60
|
+
.hw-button:focus-visible:not(:disabled, [aria-disabled='true']) {
|
|
61
|
+
outline: var(--hw-dga-on, var(--hw-focus-width)) var(--hw-dga-off, 2px) solid var(--hw-button-focus-color);
|
|
62
|
+
outline-offset: var(--hw-dga-on, var(--hw-focus-offset)) var(--hw-dga-off, 0px);
|
|
63
|
+
background: var(--hw-dga-on, var(--hw-button-hover)) var(--hw-dga-off, var(--hw-button-focus-bg));
|
|
64
|
+
}
|
|
65
|
+
.hw-button:not(:disabled, [aria-disabled='true']):active {
|
|
66
|
+
background: var(--hw-button-active);
|
|
67
|
+
box-shadow: var(--hw-dga-on, inset 0 0 0 100px rgb(0 0 0 / 0.06)) var(--hw-dga-off, none);
|
|
68
|
+
}
|
|
69
|
+
.hw-button:active:not(:focus-visible, :disabled, [aria-disabled='true']) { outline: var(--hw-button-active-outline); }
|
|
70
|
+
.hw-button:is(:disabled, [aria-disabled='true']) {
|
|
71
|
+
background: var(--hw-button-disabled-bg);
|
|
72
|
+
border-color: var(--hw-button-disabled-border);
|
|
73
|
+
outline: var(--hw-button-disabled-outline);
|
|
74
|
+
}
|
|
75
|
+
/* Retain a visible keyboard indicator even while the key is held down. */
|
|
76
|
+
@media (forced-colors: active) {
|
|
77
|
+
.hw-button { border: 1px solid ButtonText; }
|
|
78
|
+
.hw-button:focus-visible:not(:disabled, [aria-disabled='true']) { outline: 2px solid Highlight; outline-offset: 2px; }
|
|
79
|
+
.hw-button:is(:disabled, [aria-disabled='true']) { border-color: GrayText; color: GrayText; }
|
|
80
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* NIC global.css 1565–1641, snapshot hash in docs/nic-web-reference.md.
|
|
2
|
+
Shared CSS preserves adapter-owned markup and the original theme. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-card-padding: 1rem;
|
|
5
|
+
--hw-profile-card-gap: 1.5rem;
|
|
6
|
+
--hw-profile-card-border: 2px solid transparent;
|
|
7
|
+
--hw-profile-card-shadow: var(--hw-shadow-md);
|
|
8
|
+
--hw-profile-card-slot-padding: 0px;
|
|
9
|
+
--hw-profile-card-footer-border: 0px;
|
|
10
|
+
--hw-profile-card-heading-weight: 700;
|
|
11
|
+
--hw-profile-card-heading-leading: 1.75rem;
|
|
12
|
+
}
|
|
13
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
14
|
+
--hw-profile-card-padding: initial;
|
|
15
|
+
--hw-profile-card-gap: initial;
|
|
16
|
+
--hw-profile-card-border: initial;
|
|
17
|
+
--hw-profile-card-shadow: initial;
|
|
18
|
+
--hw-profile-card-slot-padding: initial;
|
|
19
|
+
--hw-profile-card-footer-border: initial;
|
|
20
|
+
--hw-profile-card-heading-weight: initial;
|
|
21
|
+
--hw-profile-card-heading-leading: initial;
|
|
22
|
+
}
|
|
23
|
+
@media (max-width: 767px) {
|
|
24
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
25
|
+
--hw-profile-card-gap: 1rem;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
.hw-card {
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
position: relative;
|
|
32
|
+
padding: var(--hw-profile-card-padding, 0px);
|
|
33
|
+
gap: var(--hw-profile-card-gap, 0px);
|
|
34
|
+
border: var(--hw-profile-card-border, 1px solid var(--hw-color-border));
|
|
35
|
+
background: var(--hw-color-card);
|
|
36
|
+
color: var(--hw-color-card-text);
|
|
37
|
+
box-shadow: var(--hw-profile-card-shadow, var(--hw-shadow-sm));
|
|
38
|
+
}
|
|
39
|
+
.hw-card-header { padding: var(--hw-profile-card-slot-padding, var(--hw-space-5) var(--hw-space-5) 0); }
|
|
40
|
+
.hw-card-body { min-inline-size: 0; padding: var(--hw-profile-card-slot-padding, var(--hw-space-5)); }
|
|
41
|
+
.hw-card-footer {
|
|
42
|
+
padding: var(--hw-profile-card-slot-padding, var(--hw-space-4) var(--hw-space-5));
|
|
43
|
+
border-block-start: var(--hw-profile-card-footer-border, 1px solid var(--hw-color-border));
|
|
44
|
+
}
|
|
45
|
+
.hw-card > :is(.hw-card-header, .hw-card-footer):empty { display: none; }
|
|
46
|
+
.hw-card-title, .hw-card-header :where(h2, h3, h4) {
|
|
47
|
+
margin: 0;
|
|
48
|
+
color: inherit;
|
|
49
|
+
font-size: var(--hw-text-lg);
|
|
50
|
+
font-weight: var(--hw-profile-card-heading-weight, var(--hw-weight-semibold));
|
|
51
|
+
line-height: var(--hw-profile-card-heading-leading, var(--hw-leading-heading));
|
|
52
|
+
}
|
|
53
|
+
.hw-card-description, .hw-card-description p {
|
|
54
|
+
margin: 0;
|
|
55
|
+
padding: 0;
|
|
56
|
+
color: inherit;
|
|
57
|
+
font-size: var(--hw-text-md);
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
line-height: 1.5;
|
|
60
|
+
}
|
|
61
|
+
.hw-card-image { display: block; max-inline-size: 100%; inline-size: 100%; block-size: auto; border-radius: var(--hw-radius-lg); }
|
|
62
|
+
.hw-card[data-variant='outlined'] { border: 1px solid var(--hw-color-card-border); box-shadow: none; }
|
|
63
|
+
.hw-card[data-variant='flat'] { box-shadow: none; }
|
|
64
|
+
.hw-card[data-variant='ghost'] { background: transparent; border-color: transparent; box-shadow: none; }
|
|
65
|
+
.hw-card-action { text-decoration: none; cursor: pointer; }
|
|
66
|
+
.hw-card-action:hover:not([aria-disabled='true'], :disabled) { background: var(--hw-color-card-hover); color: var(--hw-color-card-text); text-decoration: none; }
|
|
67
|
+
.hw-card-action:focus:not([aria-disabled='true'], :disabled) { outline: 2px solid var(--hw-color-focus-contrast); outline-offset: 0; background: var(--hw-color-card); }
|
|
68
|
+
.hw-card:is([data-disabled='true'], [aria-disabled='true'], :disabled) { background: var(--hw-color-disabled); border: 0; box-shadow: none; cursor: not-allowed; }
|
|
69
|
+
@media (max-width: 40rem) {
|
|
70
|
+
.hw-card-header { padding-inline: var(--hw-profile-card-slot-padding, var(--hw-space-4)); }
|
|
71
|
+
.hw-card-body, .hw-card-footer { padding-inline: var(--hw-profile-card-slot-padding, var(--hw-space-4)); }
|
|
72
|
+
}
|
|
73
|
+
@media (forced-colors: active) {
|
|
74
|
+
.hw-card { border: 1px solid CanvasText; }
|
|
75
|
+
.hw-card-action:focus { outline: 2px solid Highlight; }
|
|
76
|
+
.hw-card:is([aria-disabled='true'], :disabled) { color: GrayText; border-color: GrayText; }
|
|
77
|
+
}
|