@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.
- 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/add-01.svg +4 -0
- package/dist/assets/icons/alert-02.svg +5 -0
- package/dist/assets/icons/arrow-data-transfer-vertical.svg +4 -0
- package/dist/assets/icons/arrow-down-01.svg +3 -0
- package/dist/assets/icons/arrow-down-02.svg +4 -0
- package/dist/assets/icons/arrow-left-01.svg +3 -0
- package/dist/assets/icons/arrow-left-02.svg +4 -0
- package/dist/assets/icons/arrow-right-01.svg +3 -0
- package/dist/assets/icons/arrow-right-02.svg +4 -0
- package/dist/assets/icons/arrow-up-01.svg +3 -0
- package/dist/assets/icons/arrow-up-02.svg +4 -0
- package/dist/assets/icons/arrow-up-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/cancel-circle.svg +4 -0
- package/dist/assets/icons/checkmark-circle-02.svg +4 -0
- package/dist/assets/icons/exclamation-mark.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/information-circle.svg +5 -0
- package/dist/assets/icons/link-04.svg +4 -0
- package/dist/assets/icons/link-square-02.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/minus-sign-circle.svg +4 -0
- package/dist/assets/icons/minus-sign.svg +3 -0
- package/dist/assets/icons/provenance.json +403 -0
- package/dist/assets/icons/search-01.svg +4 -0
- package/dist/assets/icons/sorting-05.svg +8 -0
- package/dist/assets/icons/star.svg +3 -0
- package/dist/assets/icons/thumbs-down.svg +4 -0
- package/dist/assets/icons/thumbs-up.svg +4 -0
- package/dist/assets/icons/tick-02.svg +3 -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 +67 -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 +104 -0
- package/dist/nic-accordion.css +97 -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 +115 -0
- package/dist/nic-notifications.css +126 -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
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* NIC global.css 3279–3423. Source behavior and accessibility adaptations are
|
|
2
|
+
documented in docs/nic-carousel.md. No autoplay or external icon font. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-carousel-arrow-size: 45px;
|
|
5
|
+
--hw-profile-carousel-arrow-radius: 50%;
|
|
6
|
+
}
|
|
7
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
8
|
+
--hw-profile-carousel-arrow-size: initial;
|
|
9
|
+
--hw-profile-carousel-arrow-radius: initial;
|
|
10
|
+
}
|
|
11
|
+
.hw-carousel[data-hw-carousel-ready] { padding-block-end: 4rem; }
|
|
12
|
+
.hw-carousel-viewport { overflow: hidden; padding-block: .5rem; }
|
|
13
|
+
.hw-carousel-track {
|
|
14
|
+
display: flex; gap: var(--hw-carousel-gap, 1rem); inline-size: 100%;
|
|
15
|
+
transform: translateX(calc(-1 * var(--_hw-inline-sign, 1) * var(--hw-carousel-index, 0) * (100% + var(--hw-carousel-gap, 1rem))));
|
|
16
|
+
transition: transform var(--hw-duration-carousel) var(--hw-ease-carousel);
|
|
17
|
+
}
|
|
18
|
+
.hw-carousel-track > .hw-carousel-slide { box-sizing: border-box; flex: 0 0 100%; inline-size: 100%; visibility: visible; transition: visibility 0s; }
|
|
19
|
+
/* hidden is retained as the no-CSS/no-enhancement fallback. In track mode the
|
|
20
|
+
inactive panel occupies space, but inert and aria-hidden protect interaction
|
|
21
|
+
immediately. Delayed visibility lets the outgoing panel finish sliding. */
|
|
22
|
+
.hw-carousel[data-hw-carousel-ready] > .hw-carousel-viewport > .hw-carousel-track > .hw-carousel-slide[hidden] { display: block !important; }
|
|
23
|
+
.hw-carousel-track > .hw-carousel-slide[aria-hidden='true'] { visibility: hidden; transition: visibility 0s linear var(--hw-duration-carousel); }
|
|
24
|
+
.hw-carousel[data-hw-carousel-ready] > .hw-carousel-controls {
|
|
25
|
+
position: absolute; inset-inline: 0; inset-block-end: 0; margin: 0;
|
|
26
|
+
padding-inline: 1rem; display: flex; flex-wrap: wrap; align-items: center;
|
|
27
|
+
justify-content: space-between; gap: .75rem;
|
|
28
|
+
}
|
|
29
|
+
.hw-carousel-arrows { display: flex; flex: none; gap: .75rem; margin-inline-start: auto; }
|
|
30
|
+
.hw-carousel-empty { margin: 0; padding: var(--hw-space-5); color: var(--hw-color-text-muted); }
|
|
31
|
+
.hw-button.hw-carousel-arrow {
|
|
32
|
+
inline-size: var(--hw-profile-carousel-arrow-size, var(--hw-control-height));
|
|
33
|
+
min-inline-size: var(--hw-profile-carousel-arrow-size, var(--hw-control-height));
|
|
34
|
+
block-size: var(--hw-profile-carousel-arrow-size, var(--hw-control-height));
|
|
35
|
+
min-block-size: var(--hw-profile-carousel-arrow-size, var(--hw-control-height));
|
|
36
|
+
padding: 0; border: 0; border-radius: var(--hw-profile-carousel-arrow-radius, var(--hw-radius-md));
|
|
37
|
+
background: var(--hw-color-primary); color: var(--hw-color-on-primary);
|
|
38
|
+
transition: background-color var(--hw-duration-carousel-control) ease;
|
|
39
|
+
}
|
|
40
|
+
.hw-button.hw-carousel-arrow:hover:not(:disabled) { background: var(--hw-color-primary-hover); }
|
|
41
|
+
.hw-button.hw-carousel-arrow:active:not(:disabled) { background: var(--hw-color-primary-active); }
|
|
42
|
+
.hw-button.hw-carousel-arrow:disabled { opacity: .3; cursor: not-allowed; }
|
|
43
|
+
.hw-carousel-arrow::before { content: ''; inline-size: 20px; block-size: 20px; background: currentColor; mask: url('./assets/icons/arrow-right-02.svg') center / contain no-repeat; transform: scaleX(var(--_hw-inline-sign, 1)); }
|
|
44
|
+
.hw-carousel-arrow[data-hw-previous]::before { mask-image: url('./assets/icons/arrow-left-02.svg'); }
|
|
45
|
+
.hw-carousel-pagination { display: flex; flex-wrap: wrap; align-items: center; gap: .1rem; }
|
|
46
|
+
/* 12px source dots sit inside 24px targets; the 1px boundary keeps unselected
|
|
47
|
+
controls recognizable against the surface without changing their fill. */
|
|
48
|
+
.hw-carousel-dot {
|
|
49
|
+
display: inline-grid; place-items: center; flex: none; box-sizing: border-box;
|
|
50
|
+
inline-size: 24px; block-size: 24px; min-inline-size: 24px; padding: 0;
|
|
51
|
+
border: 0; border-radius: 50%; background: transparent; cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
.hw-carousel-dot::before {
|
|
54
|
+
content: ''; display: block; inline-size: 12px; block-size: 12px;
|
|
55
|
+
border: 1px solid var(--hw-color-carousel-dot-border); border-radius: 50%;
|
|
56
|
+
background: var(--hw-color-carousel-dot);
|
|
57
|
+
transition: background-color var(--hw-duration-carousel-control) ease, transform var(--hw-duration-carousel-control) ease;
|
|
58
|
+
}
|
|
59
|
+
.hw-carousel-dot:hover:where(:not(:disabled))::before { background: var(--hw-color-carousel-dot-hover); }
|
|
60
|
+
.hw-carousel-dot[aria-current='true']::before { background: var(--hw-color-primary); border-color: var(--hw-color-primary); transform: scale(1.3); }
|
|
61
|
+
.hw-carousel-dot:disabled { cursor: not-allowed; opacity: .3; }
|
|
62
|
+
.hw-carousel-dot:focus-visible { outline: var(--hw-focus-width) solid var(--hw-color-focus); outline-offset: 2px; }
|
|
63
|
+
/* Many indicators may wrap; keep controls in flow rather than overlap content. */
|
|
64
|
+
.hw-carousel[data-hw-carousel-ready]:has(.hw-carousel-dot:nth-child(n + 7)) { padding-block-end: 0; }
|
|
65
|
+
.hw-carousel[data-hw-carousel-ready]:has(.hw-carousel-dot:nth-child(n + 7)) > .hw-carousel-controls { position: static; margin-block-start: .75rem; }
|
|
66
|
+
@media (max-width: 25rem) {
|
|
67
|
+
.hw-carousel[data-hw-carousel-ready] { padding-block-end: 0; }
|
|
68
|
+
.hw-carousel[data-hw-carousel-ready] > .hw-carousel-controls { position: static; margin-block-start: .75rem; padding-inline: .25rem; }
|
|
69
|
+
}
|
|
70
|
+
@media (prefers-reduced-motion: reduce) {
|
|
71
|
+
.hw-carousel-track, .hw-carousel-track > .hw-carousel-slide[aria-hidden], .hw-carousel-dot::before, .hw-button.hw-carousel-arrow { transition: none; }
|
|
72
|
+
}
|
|
73
|
+
@media (forced-colors: active) {
|
|
74
|
+
.hw-button.hw-carousel-arrow { border: 1px solid ButtonText; }
|
|
75
|
+
.hw-carousel-dot::before { background: Canvas; border-color: ButtonText; forced-color-adjust: none; }
|
|
76
|
+
.hw-carousel-dot[aria-current='true']::before { background: Highlight; border-color: Highlight; }
|
|
77
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* NIC global.css 2729–3009. Native form controls retain their semantics.
|
|
2
|
+
Theme switches preserve the original theme; system colors use native widgets. */
|
|
3
|
+
.hw-choice:has(> :is(.hw-checkbox, .hw-radio)) {
|
|
4
|
+
gap: var(--hw-dga-on, var(--hw-space-3)) var(--hw-dga-off, 1rem);
|
|
5
|
+
}
|
|
6
|
+
:is(.hw-checkbox, .hw-radio) {
|
|
7
|
+
appearance: var(--hw-dga-on, auto) var(--hw-dga-off, none);
|
|
8
|
+
position: relative;
|
|
9
|
+
display: inline-grid;
|
|
10
|
+
place-content: center;
|
|
11
|
+
padding: 0;
|
|
12
|
+
border: var(--hw-dga-on, revert) var(--hw-dga-off, 1px solid var(--hw-color-border-strong));
|
|
13
|
+
background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-surface));
|
|
14
|
+
color: var(--hw-color-on-primary);
|
|
15
|
+
border-radius: 0;
|
|
16
|
+
--hw-choice-mark: var(--hw-color-primary);
|
|
17
|
+
}
|
|
18
|
+
.hw-radio { border-radius: 50%; }
|
|
19
|
+
label:has(> :is(.hw-checkbox, .hw-radio)) { position: relative; isolation: isolate; }
|
|
20
|
+
:is(.hw-checkbox, .hw-radio)::after {
|
|
21
|
+
content: var(--hw-dga-on, none) var(--hw-dga-off, '');
|
|
22
|
+
position: absolute;
|
|
23
|
+
inline-size: 40px;
|
|
24
|
+
block-size: 40px;
|
|
25
|
+
inset-block-start: calc(50% - 20px);
|
|
26
|
+
inset-inline-start: auto;
|
|
27
|
+
left: calc(50% - 20px);
|
|
28
|
+
z-index: -1;
|
|
29
|
+
border-radius: 50%;
|
|
30
|
+
background: var(--hw-color-surface-muted);
|
|
31
|
+
transform: scale(0);
|
|
32
|
+
transition: transform var(--hw-duration-choice-halo, 300ms) ease-in-out;
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
}
|
|
35
|
+
:is(.hw-checkbox, .hw-radio):hover:not(:disabled, [readonly], [aria-disabled='true'])::after { transform: scale(1); }
|
|
36
|
+
:is(.hw-checkbox, .hw-radio):hover:not(:disabled, [readonly], [aria-disabled='true']) { background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-canvas)); }
|
|
37
|
+
.hw-checkbox:is(:checked, :indeterminate) { background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-primary)); border-color: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-primary)); }
|
|
38
|
+
.hw-checkbox:is(:checked, :indeterminate):hover:not(:disabled, [readonly], [aria-disabled='true']) { background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-primary)); }
|
|
39
|
+
:is(.hw-checkbox, .hw-radio)::before {
|
|
40
|
+
content: var(--hw-dga-on, none) var(--hw-dga-off, '');
|
|
41
|
+
visibility: hidden;
|
|
42
|
+
}
|
|
43
|
+
.hw-checkbox::before { inline-size: 14px; block-size: 14px; background: currentColor; mask: url('./assets/icons/tick-02.svg') center / contain no-repeat; }
|
|
44
|
+
.hw-checkbox:indeterminate::before { mask-image: url('./assets/icons/minus-sign.svg'); }
|
|
45
|
+
.hw-radio::before { inline-size: 12px; block-size: 12px; border-radius: 50%; background: var(--hw-choice-mark); }
|
|
46
|
+
:is(.hw-checkbox, .hw-radio):is(:checked, :indeterminate)::before { visibility: visible; }
|
|
47
|
+
:is(.hw-checkbox, .hw-radio):active:not(:disabled, [readonly], [aria-disabled='true']) { border-color: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-choice-active)); --hw-choice-mark: var(--hw-color-choice-active); }
|
|
48
|
+
.hw-checkbox:active:not(:disabled, [readonly], [aria-disabled='true']) { background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-surface-muted)); }
|
|
49
|
+
.hw-checkbox:is(:checked, :indeterminate):active:not(:disabled, [readonly], [aria-disabled='true']) { background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-choice-active)); }
|
|
50
|
+
:is(.hw-checkbox, .hw-radio):is(:disabled, [readonly], [aria-disabled='true']) {
|
|
51
|
+
opacity: var(--hw-dga-on, 0.6) var(--hw-dga-off, 1);
|
|
52
|
+
background: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-surface));
|
|
53
|
+
border-color: var(--hw-dga-on, revert) var(--hw-dga-off, var(--hw-color-border));
|
|
54
|
+
color: var(--hw-color-primary-text);
|
|
55
|
+
cursor: default;
|
|
56
|
+
}
|
|
57
|
+
:is(.hw-checkbox, .hw-radio):disabled { color: var(--hw-color-border); --hw-choice-mark: var(--hw-color-border); cursor: not-allowed; }
|
|
58
|
+
:is(.hw-checkbox, .hw-radio):focus-visible { outline: var(--hw-dga-on, var(--hw-focus-width) solid var(--hw-color-focus)) var(--hw-dga-off, 2px solid var(--hw-color-focus-contrast)); outline-offset: 2px; }
|
|
59
|
+
@media (prefers-reduced-motion: reduce) { :is(.hw-checkbox, .hw-radio)::after { transition: none; } }
|
|
60
|
+
@media (forced-colors: active) {
|
|
61
|
+
:is(.hw-checkbox, .hw-radio) { appearance: auto; forced-color-adjust: auto; }
|
|
62
|
+
:is(.hw-checkbox, .hw-radio)::before, :is(.hw-checkbox, .hw-radio)::after { content: none; }
|
|
63
|
+
:is(.hw-checkbox, .hw-radio):focus-visible { outline: 2px solid Highlight; }
|
|
64
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* NIC global.css 3215–3275; existing DGA footer colors remain semantic.
|
|
2
|
+
Host-owned routes, social actions and licensed partner artwork are slots. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-footer-title-weight: 500;
|
|
5
|
+
--hw-profile-footer-title-gap: 0.5rem;
|
|
6
|
+
--hw-profile-footer-title-border: 1px;
|
|
7
|
+
--hw-profile-footer-link-gap: 0.5rem;
|
|
8
|
+
--hw-profile-footer-bottom-gap: 3rem;
|
|
9
|
+
--hw-profile-footer-row-gap: 0px;
|
|
10
|
+
--hw-profile-footer-link-hover-opacity: 0.8;
|
|
11
|
+
}
|
|
12
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
13
|
+
--hw-profile-footer-title-weight: initial;
|
|
14
|
+
--hw-profile-footer-title-gap: initial;
|
|
15
|
+
--hw-profile-footer-title-border: initial;
|
|
16
|
+
--hw-profile-footer-link-gap: initial;
|
|
17
|
+
--hw-profile-footer-bottom-gap: initial;
|
|
18
|
+
--hw-profile-footer-row-gap: initial;
|
|
19
|
+
--hw-profile-footer-link-hover-opacity: initial;
|
|
20
|
+
}
|
|
21
|
+
/* The source's 80% white is too faint on the brighter DGA dark footer.
|
|
22
|
+
Keep full foreground contrast in dark mode and caller-defined palettes. */
|
|
23
|
+
:where([data-hw-mode='dark'], [data-hw-theme='custom']) { --hw-profile-footer-link-hover-opacity: 1; }
|
|
24
|
+
.hw-portal-footer { row-gap: var(--hw-profile-footer-row-gap, var(--hw-space-8)); }
|
|
25
|
+
.hw-portal-footer .hw-portal-footer-main { margin-inline: auto; max-inline-size: var(--hw-content-max); }
|
|
26
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-support) { display: block; min-inline-size: 0; }
|
|
27
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-support) > h2 {
|
|
28
|
+
margin: 0 0 var(--hw-profile-footer-title-gap, var(--hw-space-4));
|
|
29
|
+
padding-block-end: var(--hw-profile-footer-title-gap, 0px);
|
|
30
|
+
border-block-end: var(--hw-profile-footer-title-border, 0px) solid color-mix(in srgb, currentColor 30%, transparent);
|
|
31
|
+
color: inherit;
|
|
32
|
+
font-size: 1rem;
|
|
33
|
+
line-height: 1.5rem;
|
|
34
|
+
font-weight: var(--hw-profile-footer-title-weight, var(--hw-weight-semibold));
|
|
35
|
+
}
|
|
36
|
+
.hw-portal-footer .hw-portal-footer-links { display: flex; flex-direction: column; align-items: start; gap: var(--hw-profile-footer-link-gap, var(--hw-space-3)); margin: 0; padding: 0; list-style: none; }
|
|
37
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-legal, .hw-portal-footer-support) a:not(.hw-button) {
|
|
38
|
+
color: inherit;
|
|
39
|
+
font-size: 0.875rem;
|
|
40
|
+
line-height: 1.25rem;
|
|
41
|
+
text-decoration: none;
|
|
42
|
+
text-underline-offset: 0.2em;
|
|
43
|
+
overflow-wrap: anywhere;
|
|
44
|
+
}
|
|
45
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-legal, .hw-portal-footer-support) a:not(.hw-button):hover { color: inherit; text-decoration: underline; opacity: var(--hw-profile-footer-link-hover-opacity, 1); }
|
|
46
|
+
.hw-portal-footer a:focus-visible, .hw-portal-footer button:focus-visible { outline: 2px solid currentColor; outline-offset: 4px; opacity: 1; }
|
|
47
|
+
.hw-portal-footer-brand { display: grid; align-content: start; gap: var(--hw-space-4); }
|
|
48
|
+
.hw-portal-footer-brand :is(p, strong) { margin: 0; color: inherit; }
|
|
49
|
+
.hw-portal-footer-brand p { max-inline-size: 38ch; font-size: 0.875rem; line-height: 1.5rem; }
|
|
50
|
+
.hw-portal-footer-brand-marks, .hw-portal-footer-partners { display: flex; flex-wrap: wrap; align-items: center; gap: var(--hw-space-4); }
|
|
51
|
+
.hw-portal-footer :is(.hw-portal-footer-brand-marks, .hw-portal-footer-partners) :is(img, svg) { display: block; block-size: 2.625rem; inline-size: auto; max-inline-size: 100%; object-fit: contain; }
|
|
52
|
+
.hw-portal-footer-support-content { display: grid; gap: var(--hw-space-3); }
|
|
53
|
+
.hw-portal-footer-support-content > p { margin: 0; font-size: 0.875rem; line-height: 1.5rem; }
|
|
54
|
+
.hw-portal-footer-actions { display: flex; align-items: center; flex-wrap: wrap; gap: var(--hw-space-2); }
|
|
55
|
+
.hw-portal-footer-actions .hw-button[data-variant='outline-white']:not(:disabled, [disabled], [aria-disabled='true']) { --hw-button-hover: color-mix(in srgb, currentColor 20%, transparent); --hw-button-active: color-mix(in srgb, currentColor 30%, transparent); --hw-button-focus-color: currentColor; color: inherit; border-color: currentColor; }
|
|
56
|
+
:is(.hw-portal-wordmark, .hw-portal-footer-wordmark) { display: inline-block; inline-size: 5.25rem; block-size: 2.625rem; background: currentColor; -webkit-mask: url('./assets/hawiyah-wordmark.svg') center / contain no-repeat; mask: url('./assets/hawiyah-wordmark.svg') center / contain no-repeat; }
|
|
57
|
+
.hw-portal-footer .hw-portal-footer-bottom { margin-block-start: var(--hw-profile-footer-bottom-gap, var(--hw-space-6)); margin-inline: auto; max-inline-size: var(--hw-content-max); border-block-start-color: color-mix(in srgb, currentColor 30%, transparent); }
|
|
58
|
+
.hw-portal-footer .hw-portal-footer-bottom :is(p, small) { color: inherit; }
|
|
59
|
+
.hw-portal-footer .hw-portal-footer-legal > ul { flex-direction: row; flex-wrap: wrap; gap: var(--hw-space-3) var(--hw-space-4); }
|
|
60
|
+
.hw-portal-footer-external { display: inline; margin-inline-start: 0.25em; }
|
|
61
|
+
/* Angular projection containers disappear when their application-owned slot is empty. */
|
|
62
|
+
.hw-portal-footer :is(.hw-portal-footer-brand-marks, .hw-portal-footer-extra, .hw-portal-footer-partners):empty,
|
|
63
|
+
.hw-portal-footer-brand:has(> .hw-portal-footer-brand-marks:empty):not(:has(> strong, > p)),
|
|
64
|
+
.hw-portal-footer-support:has(> .hw-portal-footer-support-content:empty),
|
|
65
|
+
.hw-portal-footer-bottom:not(:has(> small, > p, > nav, > .hw-portal-footer-partners:not(:empty))) { display: none; }
|
|
66
|
+
@media (forced-colors: active) {
|
|
67
|
+
.hw-portal-footer { background: Canvas; color: CanvasText; --hw-profile-footer-link-hover-opacity: 1; }
|
|
68
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-support) > h2, .hw-portal-footer .hw-portal-footer-bottom { border-color: CanvasText; }
|
|
69
|
+
.hw-portal-footer :is(.hw-portal-footer-group, .hw-portal-footer-legal, .hw-portal-footer-support) a:not(.hw-button) { color: LinkText; }
|
|
70
|
+
.hw-portal-footer a:hover { opacity: 1; }
|
|
71
|
+
.hw-portal-footer :is(a, button):focus-visible { outline-color: Highlight; }
|
|
72
|
+
:is(.hw-portal-wordmark, .hw-portal-footer-wordmark) { forced-color-adjust: none; background: CanvasText; }
|
|
73
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/* NIC global.css 427–606. Visual scale is independent of heading semantics. */
|
|
2
|
+
.hw-type {
|
|
3
|
+
font-family: var(--hw-font-sans);
|
|
4
|
+
font-size: var(--_hw-type-size, var(--hw-text-md));
|
|
5
|
+
line-height: var(--_hw-type-leading, 1.5);
|
|
6
|
+
font-weight: var(--hw-type-weight, var(--_hw-type-weight, var(--hw-weight-regular)));
|
|
7
|
+
margin-block: 0 var(--hw-type-spacing, var(--_hw-type-spacing, 0));
|
|
8
|
+
}
|
|
9
|
+
.hw-type[data-scale='display-2xl'] {
|
|
10
|
+
--_hw-type-size: var(--hw-text-7xl);
|
|
11
|
+
--_hw-type-leading: calc(90 / 72);
|
|
12
|
+
--_hw-type-weight: var(--hw-weight-bold);
|
|
13
|
+
--_hw-type-spacing: 2.375rem;
|
|
14
|
+
}
|
|
15
|
+
.hw-type[data-scale='display-xl'] {
|
|
16
|
+
--_hw-type-size: var(--hw-text-6xl);
|
|
17
|
+
--_hw-type-leading: calc(72 / 60);
|
|
18
|
+
--_hw-type-weight: var(--hw-weight-bold);
|
|
19
|
+
--_hw-type-spacing: 1.5rem;
|
|
20
|
+
}
|
|
21
|
+
.hw-type[data-scale='display-lg'] {
|
|
22
|
+
--_hw-type-size: var(--hw-text-5xl);
|
|
23
|
+
--_hw-type-leading: calc(60 / 48);
|
|
24
|
+
--_hw-type-weight: var(--hw-weight-bold);
|
|
25
|
+
--_hw-type-spacing: 0.625rem;
|
|
26
|
+
}
|
|
27
|
+
.hw-type[data-scale='display-md'] {
|
|
28
|
+
--_hw-type-size: var(--hw-text-4xl);
|
|
29
|
+
--_hw-type-leading: calc(44 / 36);
|
|
30
|
+
--_hw-type-weight: var(--hw-weight-semibold);
|
|
31
|
+
--_hw-type-spacing: 0.625rem;
|
|
32
|
+
}
|
|
33
|
+
.hw-type[data-scale='display-sm'] {
|
|
34
|
+
--_hw-type-size: var(--hw-text-3xl);
|
|
35
|
+
--_hw-type-leading: calc(38 / 30);
|
|
36
|
+
--_hw-type-weight: var(--hw-weight-bold);
|
|
37
|
+
--_hw-type-spacing: 0.625rem;
|
|
38
|
+
}
|
|
39
|
+
.hw-type[data-scale='display-xs'] {
|
|
40
|
+
--_hw-type-size: var(--hw-text-2xl);
|
|
41
|
+
--_hw-type-leading: calc(32 / 24);
|
|
42
|
+
--_hw-type-weight: var(--hw-weight-bold);
|
|
43
|
+
--_hw-type-spacing: 0.625rem;
|
|
44
|
+
}
|
|
45
|
+
.hw-type[data-scale='heading-lg'] {
|
|
46
|
+
--_hw-type-size: var(--hw-text-xl);
|
|
47
|
+
--_hw-type-leading: calc(30 / 20);
|
|
48
|
+
--_hw-type-weight: var(--hw-weight-semibold);
|
|
49
|
+
--_hw-type-spacing: 0.625rem;
|
|
50
|
+
}
|
|
51
|
+
.hw-type[data-scale='heading-md'] {
|
|
52
|
+
--_hw-type-size: var(--hw-text-lg);
|
|
53
|
+
--_hw-type-leading: calc(28 / 18);
|
|
54
|
+
--_hw-type-weight: var(--hw-weight-semibold);
|
|
55
|
+
--_hw-type-spacing: 0.625rem;
|
|
56
|
+
}
|
|
57
|
+
.hw-type[data-scale='heading-sm'] {
|
|
58
|
+
--_hw-type-size: var(--hw-text-md);
|
|
59
|
+
--_hw-type-leading: calc(24 / 16);
|
|
60
|
+
--_hw-type-weight: var(--hw-weight-semibold);
|
|
61
|
+
--_hw-type-spacing: 0.625rem;
|
|
62
|
+
}
|
|
63
|
+
.hw-type[data-scale='body-xl'] {
|
|
64
|
+
--_hw-type-size: var(--hw-text-xl);
|
|
65
|
+
--_hw-type-leading: calc(30 / 20);
|
|
66
|
+
--_hw-type-weight: var(--hw-weight-regular);
|
|
67
|
+
--_hw-type-spacing: 0rem;
|
|
68
|
+
}
|
|
69
|
+
.hw-type[data-scale='body-lg'] {
|
|
70
|
+
--_hw-type-size: var(--hw-text-lg);
|
|
71
|
+
--_hw-type-leading: calc(28 / 18);
|
|
72
|
+
--_hw-type-weight: var(--hw-weight-regular);
|
|
73
|
+
--_hw-type-spacing: 0rem;
|
|
74
|
+
}
|
|
75
|
+
.hw-type[data-scale='body-md'] {
|
|
76
|
+
--_hw-type-size: var(--hw-text-md);
|
|
77
|
+
--_hw-type-leading: calc(24 / 16);
|
|
78
|
+
--_hw-type-weight: var(--hw-weight-regular);
|
|
79
|
+
--_hw-type-spacing: 0rem;
|
|
80
|
+
}
|
|
81
|
+
.hw-type[data-scale='body-sm'] {
|
|
82
|
+
--_hw-type-size: var(--hw-text-sm);
|
|
83
|
+
--_hw-type-leading: calc(20 / 14);
|
|
84
|
+
--_hw-type-weight: var(--hw-weight-regular);
|
|
85
|
+
--_hw-type-spacing: 0rem;
|
|
86
|
+
}
|
|
87
|
+
.hw-type[data-scale='body-xs'] {
|
|
88
|
+
--_hw-type-size: var(--hw-text-xs);
|
|
89
|
+
--_hw-type-leading: calc(14 / 12);
|
|
90
|
+
--_hw-type-weight: var(--hw-weight-regular);
|
|
91
|
+
--_hw-type-spacing: 0rem;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.hw-line-clamp {
|
|
95
|
+
display: -webkit-box;
|
|
96
|
+
-webkit-box-orient: vertical;
|
|
97
|
+
-webkit-line-clamp: var(--hw-clamp-lines, 1);
|
|
98
|
+
overflow: hidden;
|
|
99
|
+
overflow-wrap: anywhere;
|
|
100
|
+
}
|
|
101
|
+
.hw-line-clamp[data-lines='2'] { --hw-clamp-lines: 2; }
|
|
102
|
+
.hw-line-clamp[data-lines='3'] { --hw-clamp-lines: 3; }
|
|
103
|
+
.hw-line-clamp[data-lines='4'] { --hw-clamp-lines: 4; }
|
|
104
|
+
.hw-line-clamp[data-lines='10'] { --hw-clamp-lines: 10; }
|
|
105
|
+
|
|
106
|
+
.hw-divider[data-tone='primary'] { --_hw-divider-color: var(--hw-color-primary); }
|
|
107
|
+
.hw-divider[data-tone='gold'] { --_hw-divider-color: var(--hw-color-divider-gold); }
|
|
108
|
+
.hw-divider[data-tone='tertiary'] { --_hw-divider-color: var(--hw-color-divider-tertiary); }
|
|
109
|
+
.hw-divider[data-tone] { border-color: var(--_hw-divider-color, var(--hw-color-border)); }
|
|
110
|
+
@media (forced-colors: active) {
|
|
111
|
+
.hw-divider[data-tone] { border-color: CanvasText; }
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/* The semantic hr itself participates in a flex or grid row in Angular. */
|
|
115
|
+
hw-divider:has(> .hw-divider[aria-orientation='vertical']) { display: contents; }
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/* NIC global.css 1388–1531; source sizes and adaptations: docs/nic-icons.md. */
|
|
2
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
3
|
+
--hw-profile-icon-glyph: 1.25rem;
|
|
4
|
+
--hw-profile-icon-glyph-sm: 1rem;
|
|
5
|
+
}
|
|
6
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
7
|
+
--hw-profile-icon-glyph: initial;
|
|
8
|
+
--hw-profile-icon-glyph-sm: initial;
|
|
9
|
+
}
|
|
10
|
+
.hw-button:is(.hw-icon-button, [data-icon-only]) {
|
|
11
|
+
--hw-icon-context-size: var(--hw-profile-icon-glyph, 1.5rem);
|
|
12
|
+
inline-size: var(--hw-button-control-height); min-inline-size: var(--hw-button-control-height);
|
|
13
|
+
block-size: var(--hw-button-control-height); min-block-size: var(--hw-button-control-height);
|
|
14
|
+
flex: none; padding: 0; gap: 0;
|
|
15
|
+
}
|
|
16
|
+
.hw-button:is(.hw-icon-button, [data-icon-only])[data-size='sm'] { --hw-icon-context-size: var(--hw-profile-icon-glyph-sm, min(1.5rem, calc(var(--hw-button-control-height) - 2px))); }
|
|
17
|
+
.hw-button:is(.hw-icon-button, [data-icon-only])[data-shape='circle'] { border-radius: var(--hw-radius-full); }
|
|
18
|
+
.hw-button:is(.hw-icon-button, [data-icon-only]) > span { display:inline-flex; align-items:center; justify-content:center; line-height:1; }
|
|
19
|
+
/* Size both direct artwork and framework-projected artwork. Explicit CSS and
|
|
20
|
+
the existing --hw-icon-size override remain available. No SVG paths change. */
|
|
21
|
+
.hw-button:is(.hw-icon-button, [data-icon-only]) > :is(svg,img),
|
|
22
|
+
.hw-button:is(.hw-icon-button, [data-icon-only]) > span > :is(svg,img) {
|
|
23
|
+
inline-size:var(--hw-icon-size,var(--hw-icon-context-size));
|
|
24
|
+
block-size:var(--hw-icon-size,var(--hw-icon-context-size)); flex:none; object-fit:contain;
|
|
25
|
+
}
|
|
26
|
+
.hw-button:is(.hw-icon-button,[data-icon-only])[aria-pressed='true']:not(:disabled,[aria-disabled='true']) {
|
|
27
|
+
background:var(--hw-color-primary-subtle); color:var(--hw-color-primary-text);
|
|
28
|
+
}
|
|
29
|
+
.hw-button:is(.hw-icon-button, [data-icon-only]):is(:disabled,[aria-disabled='true']) {
|
|
30
|
+
color:var(--hw-color-on-disabled); box-shadow:none;
|
|
31
|
+
}
|
|
32
|
+
/* Background icons are decorative compositions, not extra interactive targets. */
|
|
33
|
+
.hw-icon-background {
|
|
34
|
+
box-sizing:border-box; display:inline-flex; flex:none; align-items:center; justify-content:center;
|
|
35
|
+
inline-size:3rem; min-inline-size:3rem; block-size:3rem; padding:0;
|
|
36
|
+
border-radius:var(--hw-radius-full); background:var(--hw-color-success-subtle); color:var(--hw-color-success);
|
|
37
|
+
--hw-icon-context-size:1.5rem;
|
|
38
|
+
}
|
|
39
|
+
.hw-icon-background[data-size='xs'] { inline-size:1.875rem; min-inline-size:1.875rem; block-size:1.875rem; --hw-icon-context-size:0.875rem; }
|
|
40
|
+
/* Source md and xl backgrounds are both 48px; size the artwork separately. */
|
|
41
|
+
.hw-icon-background[data-size='xl'] { inline-size:3rem; min-inline-size:3rem; block-size:3rem; }
|
|
42
|
+
/* Featured icon is the Figma composition; NIC icon-bg sizing above remains available. */
|
|
43
|
+
.hw-icon-background[data-variant='featured'] {
|
|
44
|
+
--hw-featured-size: 2.5rem; --hw-icon-context-size: 1.25rem;
|
|
45
|
+
--hw-featured-radius: .25rem; --hw-featured-outline-radius: .5rem;
|
|
46
|
+
--hw-featured-color: var(--hw-color-primary-text);
|
|
47
|
+
--hw-featured-background: var(--hw-color-primary-subtle);
|
|
48
|
+
inline-size: var(--hw-featured-size); min-inline-size: var(--hw-featured-size); block-size: var(--hw-featured-size);
|
|
49
|
+
color: var(--hw-featured-color); background: var(--hw-featured-background);
|
|
50
|
+
}
|
|
51
|
+
.hw-icon-background[data-variant='featured'][data-size='sm'] { --hw-featured-size:2rem; --hw-icon-context-size:1rem; --hw-featured-outline-radius:.375rem; }
|
|
52
|
+
.hw-icon-background[data-variant='featured'][data-size='lg'] { --hw-featured-size:3rem; --hw-icon-context-size:1.5rem; --hw-featured-radius:.5rem; --hw-featured-outline-radius:.625rem; }
|
|
53
|
+
.hw-icon-background[data-variant='featured'][data-size='xl'] { --hw-featured-size:3.5rem; --hw-icon-context-size:1.75rem; --hw-featured-radius:.5rem; --hw-featured-outline-radius:.75rem; }
|
|
54
|
+
.hw-icon-background[data-variant='featured'][data-shape='square'] { border-radius:var(--hw-featured-radius); }
|
|
55
|
+
.hw-icon-background[data-variant='featured'][data-tone='neutral'] { --hw-featured-color:var(--hw-color-text-muted); --hw-featured-background:var(--hw-color-surface-muted); }
|
|
56
|
+
.hw-icon-background[data-variant='featured'][data-tone='success'] { --hw-featured-color:var(--hw-color-success); --hw-featured-background:var(--hw-color-success-subtle); }
|
|
57
|
+
.hw-icon-background[data-variant='featured'][data-tone='error'] { --hw-featured-color:var(--hw-color-danger); --hw-featured-background:var(--hw-color-danger-subtle); }
|
|
58
|
+
.hw-icon-background[data-variant='featured'][data-tone='warning'] { --hw-featured-color:var(--hw-color-warning); --hw-featured-background:var(--hw-color-warning-subtle); }
|
|
59
|
+
.hw-icon-background[data-variant='featured'][data-tone='info'] { --hw-featured-color:var(--hw-color-info); --hw-featured-background:var(--hw-color-info-subtle); }
|
|
60
|
+
.hw-icon-background[data-variant='featured'][data-style='outline'] { background:transparent; border:1px solid var(--hw-featured-color); }
|
|
61
|
+
.hw-icon-background[data-variant='featured'][data-style='outline'][data-shape='square'] { border-radius:var(--hw-featured-outline-radius); }
|
|
62
|
+
.hw-icon-background[data-variant='featured'][data-style='dark'] { background:var(--hw-featured-color); color:var(--hw-color-surface); }
|
|
63
|
+
.hw-featured-symbol { display:inline-flex; align-items:center; justify-content:center; inline-size:var(--hw-icon-context-size); block-size:var(--hw-icon-context-size); font-size:var(--hw-icon-context-size); font-weight:600; line-height:1; }
|
|
64
|
+
.hw-icon[data-size='sm'] { --hw-icon-context-size:0.875rem; }
|
|
65
|
+
.hw-icon[data-size='md'] { --hw-icon-context-size:1.25rem; }
|
|
66
|
+
.hw-icon[data-size='lg'] { --hw-icon-context-size:1.5rem; }
|
|
67
|
+
.hw-icon[data-size='xl'] { --hw-icon-context-size:1.875rem; }
|
|
68
|
+
.hw-icon[data-size='2xl'] { --hw-icon-context-size:3rem; }
|
|
69
|
+
@media (forced-colors:active) {
|
|
70
|
+
.hw-button:is(.hw-icon-button,[data-icon-only]):is(:disabled,[aria-disabled='true']) { color:GrayText; }
|
|
71
|
+
.hw-icon-background, .hw-icon-background[data-variant='featured'], .hw-icon-background[data-variant='featured'][data-style] { background:Canvas; color:CanvasText; border-color:CanvasText; outline:1px solid CanvasText; }
|
|
72
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* NIC global.css 2554–2581: one animated line spans input + addons.
|
|
2
|
+
Only an editable focused control activates it, not a sibling addon button. */
|
|
3
|
+
.hw-input-group:has(> .hw-input-addon) { position: relative; --hw-group-line-color: var(--hw-color-field-active); }
|
|
4
|
+
.hw-input-addon:empty { display: none; }
|
|
5
|
+
.hw-input-group > .hw-input-addon:empty:first-child + :is(.hw-input, .hw-select) { border-start-start-radius: var(--hw-profile-control-radius, var(--hw-radius-md)); border-end-start-radius: var(--hw-profile-control-radius, var(--hw-radius-md)); }
|
|
6
|
+
.hw-input-group > :is(.hw-input, .hw-select):has(+ .hw-input-addon:empty:last-child) { border-start-end-radius: var(--hw-profile-control-radius, var(--hw-radius-md)); border-end-end-radius: var(--hw-profile-control-radius, var(--hw-radius-md)); }
|
|
7
|
+
.hw-input-group:has(> .hw-input-addon)::after {
|
|
8
|
+
content: '';
|
|
9
|
+
display: var(--hw-dga-on, none) var(--hw-dga-off, block);
|
|
10
|
+
position: absolute;
|
|
11
|
+
z-index: 2;
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
inset-inline: 0;
|
|
14
|
+
inset-block-end: 0;
|
|
15
|
+
block-size: 2px;
|
|
16
|
+
background: linear-gradient(var(--hw-group-line-color), var(--hw-group-line-color)) center bottom / 0% 2px no-repeat;
|
|
17
|
+
transition: background-size var(--hw-duration-input) var(--hw-ease-input);
|
|
18
|
+
}
|
|
19
|
+
.hw-input-group:has(> .hw-input-addon) > :is(.hw-input, .hw-select) {
|
|
20
|
+
--hw-profile-field-focus-line: 0% 2px;
|
|
21
|
+
--hw-profile-field-pressed-line: 0% 2px;
|
|
22
|
+
}
|
|
23
|
+
.hw-input-group:has(> :is(.hw-input, .hw-select):focus:not(:disabled, [readonly]))::after { background-size: 100% 2px; }
|
|
24
|
+
.hw-input-group:has(> :is(.hw-input, .hw-select):active:not(:disabled, [readonly]))::after { background-size: 50% 2px; }
|
|
25
|
+
.hw-input-group:has(> :is(.hw-input, .hw-select):where([data-hw-filled='true']):valid) { --hw-group-line-color: var(--hw-color-primary-text); }
|
|
26
|
+
.hw-input-group:has(> :is(.hw-input, .hw-select)[aria-invalid='true']) { --hw-group-line-color: var(--hw-color-danger); }
|
|
27
|
+
@supports selector(:user-invalid) {
|
|
28
|
+
.hw-input-group:has(> :is(.hw-input, .hw-select):user-invalid) { --hw-group-line-color: var(--hw-color-danger); }
|
|
29
|
+
}
|
|
30
|
+
@media (prefers-reduced-motion: reduce) {
|
|
31
|
+
.hw-input-group:has(> .hw-input-addon)::after { transition: none; }
|
|
32
|
+
}
|
|
33
|
+
@media (forced-colors: active) {
|
|
34
|
+
.hw-input-group:has(> .hw-input-addon)::after { display: none; }
|
|
35
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* NIC global.css 853–965 and 2040–2143. Contrast substitutions and browser
|
|
2
|
+
visited-state privacy limits are recorded in docs/nic-links.md. */
|
|
3
|
+
:where(:root:not([data-hw-theme]), [data-hw-theme='dga'], [data-hw-theme='custom']) {
|
|
4
|
+
--hw-profile-link-hover-thickness: 1px;
|
|
5
|
+
--hw-profile-breadcrumb-gap: 0.25rem;
|
|
6
|
+
--hw-profile-breadcrumb-duration: 200ms;
|
|
7
|
+
--hw-profile-breadcrumb-weight: 400;
|
|
8
|
+
--hw-profile-breadcrumb-separator: '';
|
|
9
|
+
--hw-profile-breadcrumb-size: 0.375rem;
|
|
10
|
+
--hw-profile-breadcrumb-border: 1.5px;
|
|
11
|
+
--hw-profile-breadcrumb-angle: 45deg;
|
|
12
|
+
--hw-profile-breadcrumb-margin: 0.25rem;
|
|
13
|
+
}
|
|
14
|
+
:where([data-hw-theme]:not([data-hw-theme='dga'], [data-hw-theme='custom'])) {
|
|
15
|
+
--hw-profile-link-hover-thickness: initial;
|
|
16
|
+
--hw-profile-breadcrumb-gap: initial;
|
|
17
|
+
--hw-profile-breadcrumb-duration: initial;
|
|
18
|
+
--hw-profile-breadcrumb-weight: initial;
|
|
19
|
+
--hw-profile-breadcrumb-separator: initial;
|
|
20
|
+
--hw-profile-breadcrumb-size: initial;
|
|
21
|
+
--hw-profile-breadcrumb-border: initial;
|
|
22
|
+
--hw-profile-breadcrumb-angle: initial;
|
|
23
|
+
--hw-profile-breadcrumb-margin: initial;
|
|
24
|
+
}
|
|
25
|
+
.hw-link { --hw-link-rest: var(--hw-color-link); --hw-link-hover: var(--hw-color-link-hover); --hw-link-active: var(--hw-color-link-active); --hw-link-visited: var(--hw-color-link-visited); color: var(--hw-link-rest); }
|
|
26
|
+
/* Hosts may supply their own decorative indicator using data-hw-external-icon. */
|
|
27
|
+
:is(.hw-link, .hw-portal-header a)[target='_blank']:not([data-hw-external-icon='none']):not(:has([data-hw-external-icon], .hw-portal-footer-external))::after {
|
|
28
|
+
content: ''; display: inline-block; flex: none; inline-size: 1em; block-size: 1em;
|
|
29
|
+
margin-inline-start: .25em; vertical-align: -.125em;
|
|
30
|
+
background: currentColor; mask: url('./assets/icons/link-square-02.svg') center / contain no-repeat;
|
|
31
|
+
}
|
|
32
|
+
.hw-link:is([data-variant='subtle'], [data-variant='neutral']) { --hw-link-rest: var(--hw-color-link-neutral); --hw-link-hover: var(--hw-color-link-neutral-hover); --hw-link-active: var(--hw-color-link-neutral-active); --hw-link-visited: var(--hw-color-link-neutral); color: var(--hw-link-rest); text-decoration: none; }
|
|
33
|
+
.hw-link:visited { color: var(--hw-link-visited); }
|
|
34
|
+
.hw-link:hover { color: var(--hw-link-hover); text-decoration: underline; text-decoration-thickness: var(--hw-profile-link-hover-thickness, 2px); }
|
|
35
|
+
.hw-link:focus-visible { color: var(--hw-link-rest); outline: 2px solid var(--hw-color-focus-contrast); outline-offset: 2px; }
|
|
36
|
+
.hw-link:active { color: var(--hw-link-active); }
|
|
37
|
+
.hw-link:is(.hw-link-icon, [data-variant='standalone']):is(:hover, :active) { text-decoration: none; }
|
|
38
|
+
.hw-link[aria-disabled='true'], .hw-link[aria-disabled='true']:is(:hover, :active, :visited) { color: var(--hw-color-on-disabled); text-decoration: underline; cursor: not-allowed; }
|
|
39
|
+
.hw-breadcrumb { line-height: 1.5rem; }
|
|
40
|
+
.hw-breadcrumb :is(ol, ul), .hw-breadcrumb li { gap: var(--hw-profile-breadcrumb-gap, var(--hw-space-2)); }
|
|
41
|
+
.hw-breadcrumb a { color: var(--hw-color-link-neutral); transition: color var(--hw-profile-breadcrumb-duration, 0ms) ease; }
|
|
42
|
+
.hw-breadcrumb a:visited { color: var(--hw-color-link-neutral); }
|
|
43
|
+
.hw-breadcrumb a:hover { color: var(--hw-color-link-neutral-hover); }
|
|
44
|
+
.hw-breadcrumb a:focus-visible { color: var(--hw-color-link-neutral); text-decoration: none; outline: 2px solid var(--hw-color-focus-contrast); outline-offset: 2px; }
|
|
45
|
+
.hw-breadcrumb a:active { color: var(--hw-color-link-neutral-active); }
|
|
46
|
+
.hw-breadcrumb [aria-current='page'] { color: var(--hw-color-breadcrumb-current); font-weight: var(--hw-profile-breadcrumb-weight, var(--hw-weight-medium)); }
|
|
47
|
+
.hw-breadcrumb [aria-disabled='true'] { color: var(--hw-color-on-disabled); cursor: not-allowed; }
|
|
48
|
+
/* Empty generated geometry is decorative; no private icon-font glyph is read
|
|
49
|
+
as content. A logical chevron follows direction independently of language. */
|
|
50
|
+
.hw-breadcrumb li + li::before { content: var(--hw-profile-breadcrumb-separator, '/'); flex: none; inline-size: var(--hw-profile-breadcrumb-size, auto); block-size: var(--hw-profile-breadcrumb-size, auto); margin-inline: var(--hw-profile-breadcrumb-margin, 0px); border-block-start: var(--hw-profile-breadcrumb-border, 0px) solid currentColor; border-inline-end: var(--hw-profile-breadcrumb-border, 0px) solid currentColor; transform: rotate(calc(var(--_hw-inline-sign, 1) * var(--hw-profile-breadcrumb-angle, 0deg))); color: var(--hw-color-text-subtle); }
|
|
51
|
+
@media (prefers-reduced-motion: reduce) { .hw-breadcrumb a { transition: none; } }
|
|
52
|
+
@media (forced-colors: active) {
|
|
53
|
+
:is(.hw-link, .hw-portal-header a)[target='_blank']::after { background: LinkText; forced-color-adjust: none; }
|
|
54
|
+
.hw-link, .hw-link[data-variant] { --hw-link-rest: LinkText; --hw-link-hover: LinkText; --hw-link-active: LinkText; --hw-link-visited: VisitedText; color: LinkText; }
|
|
55
|
+
.hw-breadcrumb a { color: LinkText; }
|
|
56
|
+
.hw-link:visited { color: VisitedText; }
|
|
57
|
+
.hw-link:is(:hover, :active, :focus-visible), .hw-breadcrumb a:is(:hover, :active, :focus-visible) { color: LinkText; }
|
|
58
|
+
.hw-link:focus-visible, .hw-breadcrumb a:focus-visible { outline-color: Highlight; }
|
|
59
|
+
.hw-link[aria-disabled='true'], .hw-link[aria-disabled='true']:is(:hover, :active, :visited), .hw-breadcrumb [aria-disabled='true'] { color: GrayText; }
|
|
60
|
+
.hw-breadcrumb [aria-current='page'] { color: CanvasText; }
|
|
61
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* NIC global.css 1645–1674 and 3183–3211. Styling is opt-in per list. */
|
|
2
|
+
ul.hw-list-icon,
|
|
3
|
+
ol.hw-list-ordered {
|
|
4
|
+
margin-inline: var(--hw-list-start-margin, 5px) 0;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
ol.hw-list-ordered {
|
|
8
|
+
list-style-type: decimal;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
ul.hw-list-icon > li,
|
|
12
|
+
ul.hw-list-custom > li {
|
|
13
|
+
list-style-type: none;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
ul.hw-list-icon > li {
|
|
17
|
+
position: relative;
|
|
18
|
+
padding-inline-start: var(--hw-list-icon-indent, 30px);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.hw-list-marker {
|
|
22
|
+
display: inline-grid;
|
|
23
|
+
place-items: center;
|
|
24
|
+
inline-size: var(--hw-list-marker-size, 16px);
|
|
25
|
+
block-size: var(--hw-list-marker-size, 16px);
|
|
26
|
+
color: inherit;
|
|
27
|
+
font-size: var(--hw-list-marker-size, 16px);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.hw-list-marker > svg {
|
|
31
|
+
display: block;
|
|
32
|
+
inline-size: 1em;
|
|
33
|
+
block-size: 1em;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* The source uses an external icon font. This local ring is decorative. */
|
|
37
|
+
.hw-list-marker:empty::before {
|
|
38
|
+
content: '';
|
|
39
|
+
box-sizing: border-box;
|
|
40
|
+
inline-size: .45em;
|
|
41
|
+
block-size: .45em;
|
|
42
|
+
border: .1em solid currentColor;
|
|
43
|
+
border-radius: 50%;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
ul.hw-list-icon > li > .hw-list-marker {
|
|
47
|
+
position: absolute;
|
|
48
|
+
inset-block-start: 0;
|
|
49
|
+
inset-inline-start: 0;
|
|
50
|
+
block-size: var(--hw-list-marker-line, 28px);
|
|
51
|
+
line-height: var(--hw-list-marker-line, 28px);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
ul.hw-list-custom {
|
|
55
|
+
margin-inline-start: 0;
|
|
56
|
+
padding-inline-start: var(--hw-list-custom-indent, 20px);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
ul.hw-list-custom > li > .hw-list-marker {
|
|
60
|
+
position: relative;
|
|
61
|
+
inset-block-start: 1px;
|
|
62
|
+
margin-inline-end: .25em;
|
|
63
|
+
vertical-align: text-bottom;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@media (forced-colors: active) {
|
|
67
|
+
.hw-list-marker:empty::before { border-color: CanvasText; }
|
|
68
|
+
}
|