@hjmds/react 1.26.1 → 1.27.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/THIRD_PARTY_NOTICES.md +7 -0
- package/dist/advanced-display.d.ts +1 -0
- package/dist/advanced-display.d.ts.map +1 -1
- package/dist/advanced-display.js +3 -2
- package/dist/advanced-display.js.map +1 -1
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +2 -1
- package/dist/agreement.js.map +1 -1
- package/dist/bottom-cta.d.ts.map +1 -1
- package/dist/bottom-cta.js +5 -2
- package/dist/bottom-cta.js.map +1 -1
- package/dist/bottom-navigation.d.ts.map +1 -1
- package/dist/bottom-navigation.js +3 -0
- package/dist/bottom-navigation.js.map +1 -1
- package/dist/calendar.js +1 -1
- package/dist/calendar.js.map +1 -1
- package/dist/carousel-motion.d.ts.map +1 -1
- package/dist/carousel-motion.js +4 -3
- package/dist/carousel-motion.js.map +1 -1
- package/dist/carousel.d.ts.map +1 -1
- package/dist/carousel.js +3 -2
- package/dist/carousel.js.map +1 -1
- package/dist/chart.d.ts +3 -1
- package/dist/chart.d.ts.map +1 -1
- package/dist/chart.js +9 -4
- package/dist/chart.js.map +1 -1
- package/dist/clipboard.d.ts +27 -1
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +26 -12
- package/dist/clipboard.js.map +1 -1
- package/dist/collapsible.d.ts +9 -0
- package/dist/collapsible.d.ts.map +1 -1
- package/dist/collapsible.js +9 -2
- package/dist/collapsible.js.map +1 -1
- package/dist/collection-editing.d.ts.map +1 -1
- package/dist/collection-editing.js +15 -10
- package/dist/collection-editing.js.map +1 -1
- package/dist/collection-rail.d.ts.map +1 -1
- package/dist/collection-rail.js +3 -2
- package/dist/collection-rail.js.map +1 -1
- package/dist/communication.d.ts.map +1 -1
- package/dist/communication.js +5 -2
- package/dist/communication.js.map +1 -1
- package/dist/context-menu.d.ts +9 -1
- package/dist/context-menu.d.ts.map +1 -1
- package/dist/context-menu.js +1 -1
- package/dist/context-menu.js.map +1 -1
- package/dist/conversation-row.js +1 -1
- package/dist/conversation-row.js.map +1 -1
- package/dist/data-workflows.d.ts.map +1 -1
- package/dist/data-workflows.js +4 -3
- package/dist/data-workflows.js.map +1 -1
- package/dist/date-picker.d.ts.map +1 -1
- package/dist/date-picker.js +5 -3
- package/dist/date-picker.js.map +1 -1
- package/dist/design-profile.d.ts.map +1 -1
- package/dist/design-profile.js +4 -2
- package/dist/design-profile.js.map +1 -1
- package/dist/effect-surface.d.ts +9 -3
- package/dist/effect-surface.d.ts.map +1 -1
- package/dist/effect-surface.js +3 -2
- package/dist/effect-surface.js.map +1 -1
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/feedback.d.ts +8 -19
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +7 -3
- package/dist/feedback.js.map +1 -1
- package/dist/field-group.d.ts.map +1 -1
- package/dist/field-group.js +15 -8
- package/dist/field-group.js.map +1 -1
- package/dist/file-picker.d.ts +14 -2
- package/dist/file-picker.d.ts.map +1 -1
- package/dist/file-picker.js +5 -2
- package/dist/file-picker.js.map +1 -1
- package/dist/folder-preview.d.ts.map +1 -1
- package/dist/folder-preview.js +2 -2
- package/dist/folder-preview.js.map +1 -1
- package/dist/forms.d.ts.map +1 -1
- package/dist/forms.js +2 -1
- package/dist/forms.js.map +1 -1
- package/dist/image-choice.d.ts +30 -0
- package/dist/image-choice.d.ts.map +1 -0
- package/dist/image-choice.js +24 -0
- package/dist/image-choice.js.map +1 -0
- package/dist/image-comparison.d.ts.map +1 -1
- package/dist/image-comparison.js +2 -1
- package/dist/image-comparison.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/message-reactions.d.ts +28 -2
- package/dist/internal/message-reactions.d.ts.map +1 -1
- package/dist/internal/message-reactions.js +11 -4
- package/dist/internal/message-reactions.js.map +1 -1
- package/dist/internal/screen-exit.d.ts +11 -0
- package/dist/internal/screen-exit.d.ts.map +1 -0
- package/dist/internal/screen-exit.js +10 -0
- package/dist/internal/screen-exit.js.map +1 -0
- package/dist/internal/screen-footer.d.ts +7 -0
- package/dist/internal/screen-footer.d.ts.map +1 -0
- package/dist/internal/screen-footer.js +8 -0
- package/dist/internal/screen-footer.js.map +1 -0
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +8 -4
- package/dist/layout.js.map +1 -1
- package/dist/masonry.d.ts +5 -3
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +25 -3
- package/dist/masonry.js.map +1 -1
- package/dist/menu-morph.d.ts.map +1 -1
- package/dist/menu-morph.js +30 -7
- package/dist/menu-morph.js.map +1 -1
- package/dist/overlays.d.ts +2 -0
- package/dist/overlays.d.ts.map +1 -1
- package/dist/overlays.js +48 -11
- package/dist/overlays.js.map +1 -1
- package/dist/popover.d.ts +6 -0
- package/dist/popover.d.ts.map +1 -1
- package/dist/popover.js +3 -3
- package/dist/popover.js.map +1 -1
- package/dist/qr-code.js +1 -1
- package/dist/qr-code.js.map +1 -1
- package/dist/reaction-picker.d.ts.map +1 -1
- package/dist/reaction-picker.js +14 -1
- package/dist/reaction-picker.js.map +1 -1
- package/dist/saved-items.d.ts +8 -2
- package/dist/saved-items.d.ts.map +1 -1
- package/dist/saved-items.js +4 -4
- package/dist/saved-items.js.map +1 -1
- package/dist/screen-flows.d.ts +52 -6
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +48 -19
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +56 -8
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +41 -15
- package/dist/screens.js.map +1 -1
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +4 -4
- package/dist/selection.js.map +1 -1
- package/dist/social-compositions.d.ts.map +1 -1
- package/dist/social-compositions.js +3 -2
- package/dist/social-compositions.js.map +1 -1
- package/dist/sortable.d.ts.map +1 -1
- package/dist/sortable.js +9 -3
- package/dist/sortable.js.map +1 -1
- package/dist/status-text.d.ts.map +1 -1
- package/dist/status-text.js +5 -2
- package/dist/status-text.js.map +1 -1
- package/dist/styles.css +221 -126
- package/dist/styles.layered.css +221 -126
- package/dist/table-family.d.ts +1 -1
- package/dist/table-family.d.ts.map +1 -1
- package/dist/table-family.js +24 -7
- package/dist/table-family.js.map +1 -1
- package/dist/task-controls.d.ts.map +1 -1
- package/dist/task-controls.js +9 -4
- package/dist/task-controls.js.map +1 -1
- package/dist/task-list.d.ts +1 -1
- package/dist/task-list.d.ts.map +1 -1
- package/dist/task-list.js +4 -3
- package/dist/task-list.js.map +1 -1
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +4 -0
- package/dist/theme.js.map +1 -1
- package/dist/top-bar.d.ts +5 -0
- package/dist/top-bar.d.ts.map +1 -1
- package/dist/top-bar.js +6 -1
- package/dist/top-bar.js.map +1 -1
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +13 -3
- package/dist/transfer-list.js.map +1 -1
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +3 -1
- package/dist/upload-item.js.map +1 -1
- package/fonts/pretendard/LICENSE.txt +94 -0
- package/fonts/pretendard/pretendard.css +927 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.0.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.1.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.10.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.11.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.12.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.13.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.14.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.15.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.16.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.17.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.18.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.19.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.2.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.20.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.21.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.22.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.23.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.24.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.25.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.26.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.27.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.28.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.29.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.3.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.30.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.31.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.32.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.33.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.34.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.35.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.36.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.37.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.38.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.39.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.4.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.40.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.41.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.42.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.43.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.44.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.45.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.46.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.47.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.48.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.49.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.5.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.50.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.51.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.52.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.53.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.54.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.55.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.56.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.57.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.58.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.59.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.6.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.60.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.61.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.62.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.63.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.64.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.65.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.66.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.67.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.68.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.69.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.7.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.70.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.71.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.72.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.73.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.74.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.75.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.76.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.77.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.78.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.79.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.8.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.80.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.81.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.82.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.83.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.84.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.85.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.86.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.87.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.88.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.89.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.9.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.90.woff2 +0 -0
- package/fonts/pretendard/woff2-dynamic-subset/PretendardVariable.subset.91.woff2 +0 -0
- package/package.json +10 -3
package/dist/styles.layered.css
CHANGED
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
line-height: var(--hjm-type-body-line-height, 1.25rem);
|
|
15
15
|
background: var(--hjm-color-bg);
|
|
16
16
|
color: var(--hjm-color-text);
|
|
17
|
+
/* Korean wraps between words, not inside them ("표 / 정." at 402, 2026-10-17 review E19). It inherits to every
|
|
18
|
+
HJM text; overflow-wrap: anywhere on the text rules still breaks unspaced URLs and identifiers. */
|
|
19
|
+
word-break: keep-all;
|
|
17
20
|
}
|
|
18
21
|
|
|
19
22
|
/* host="contents": the element only carries the theme variables, dir and data
|
|
@@ -267,7 +270,9 @@
|
|
|
267
270
|
Selection uses content color without an added border (2026-10-10 user request); focus stays separate. */
|
|
268
271
|
.hjm-button[data-selected="true"], .hjm-icon-button[data-selected="true"] { color: var(--hjm-color-content-brand); background: var(--hjm-color-bg); border-color: transparent; }
|
|
269
272
|
.hjm-button:active:not(:disabled):not([aria-disabled="true"]), .hjm-icon-button:active:not(:disabled):not([aria-disabled="true"]) { opacity: var(--hjm-button-pressed-opacity); }
|
|
270
|
-
|
|
273
|
+
/* data-state="disabled" also covers focusable boundaries (aria-disabled, e.g. Carousel previous on the first slide),
|
|
274
|
+
which looked enabled while Native dimmed them (2026-10-17 review E9). */
|
|
275
|
+
.hjm-button:disabled, .hjm-icon-button:disabled, .hjm-button[data-state="disabled"], .hjm-icon-button[data-state="disabled"] { cursor: not-allowed; opacity: var(--hjm-button-disabled-opacity); }
|
|
271
276
|
/* 라벨은 자르지 않고 두 줄까지 접는다(buttonRecipe.label). 잘린 행동 라벨은 무엇을 하는
|
|
272
277
|
버튼인지 잃고, 무제한 줄바꿈은 하단 CTA 행 같은 남의 레이아웃을 밀어낸다. */
|
|
273
278
|
.hjm-button__label { min-inline-size: 0; overflow-wrap: anywhere; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: var(--hjm-button-label-lines, 2); overflow: hidden; }
|
|
@@ -413,31 +418,6 @@
|
|
|
413
418
|
}
|
|
414
419
|
.hjm-password-field__toggle:disabled { cursor: not-allowed; opacity: 0.6; }
|
|
415
420
|
.hjm-password-field__toggle:focus-visible { outline: 2px solid var(--hjm-color-content-brand); outline-offset: -2px; }
|
|
416
|
-
.hjm-password-field__toggle > span:empty {
|
|
417
|
-
position: relative;
|
|
418
|
-
inline-size: 18px;
|
|
419
|
-
block-size: 12px;
|
|
420
|
-
display: block;
|
|
421
|
-
border: 2px solid currentColor;
|
|
422
|
-
border-radius: 70% 20%;
|
|
423
|
-
transform: rotate(45deg);
|
|
424
|
-
}
|
|
425
|
-
.hjm-password-field__toggle > span:empty::after {
|
|
426
|
-
content: "";
|
|
427
|
-
position: absolute;
|
|
428
|
-
inset: 2px;
|
|
429
|
-
border-radius: 50%;
|
|
430
|
-
background: currentColor;
|
|
431
|
-
}
|
|
432
|
-
.hjm-password-field__toggle[data-revealed] > span:empty::before {
|
|
433
|
-
content: "";
|
|
434
|
-
position: absolute;
|
|
435
|
-
z-index: 1;
|
|
436
|
-
inset-block-start: 4px;
|
|
437
|
-
inset-inline-start: -3px;
|
|
438
|
-
inline-size: 22px;
|
|
439
|
-
border-block-start: 2px solid currentColor;
|
|
440
|
-
}
|
|
441
421
|
.hjm-otp-field__control {
|
|
442
422
|
--hjm-otp-slot-size: var(--hjm-control-min-touch-target);
|
|
443
423
|
--hjm-otp-gap: var(--hjm-space-xs);
|
|
@@ -529,7 +509,8 @@
|
|
|
529
509
|
display: grid;
|
|
530
510
|
grid-template-columns: repeat(var(--hjm-bottom-navigation-columns), minmax(var(--hjm-bottom-navigation-item-min-width), 1fr));
|
|
531
511
|
align-items: start;
|
|
532
|
-
|
|
512
|
+
max-inline-size: var(--hjm-bottom-navigation-content-max-width, none);
|
|
513
|
+
margin: 0 auto;
|
|
533
514
|
padding: 0;
|
|
534
515
|
list-style: none;
|
|
535
516
|
}
|
|
@@ -610,13 +591,14 @@
|
|
|
610
591
|
}
|
|
611
592
|
.hjm-number-field__input {
|
|
612
593
|
block-size: 100%;
|
|
613
|
-
|
|
594
|
+
min-inline-size: 3ch;
|
|
595
|
+
padding-inline: var(--hjm-space-xxs); /* numberFieldRecipe.sizes.medium.paddingHorizontal */
|
|
614
596
|
text-align: center;
|
|
615
597
|
font-variant-numeric: tabular-nums;
|
|
616
598
|
}
|
|
617
599
|
.hjm-number-field[data-size="large"] .hjm-number-field__input {
|
|
618
600
|
min-block-size: calc(var(--hjm-control-button-large) - 2px);
|
|
619
|
-
padding-inline: var(--hjm-space-
|
|
601
|
+
padding-inline: var(--hjm-space-xs);
|
|
620
602
|
font-size: var(--hjm-type-body-large-size);
|
|
621
603
|
line-height: var(--hjm-type-body-large-line-height);
|
|
622
604
|
}
|
|
@@ -774,13 +756,15 @@
|
|
|
774
756
|
.hjm-choice__indicator { flex: 0 0 24px; display: grid; place-items: center; inline-size: 24px; block-size: 24px; margin-block-start: 2px; border: 2px solid var(--hjm-color-text-muted); background: var(--hjm-color-bg); }
|
|
775
757
|
.hjm-choice[data-size="small"] .hjm-choice__indicator { flex-basis: 20px; inline-size: 20px; block-size: 20px; }
|
|
776
758
|
.hjm-choice__leading { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--hjm-color-text-muted); }
|
|
777
|
-
.hjm-choice
|
|
759
|
+
/* Agreement and TransferList rows draw the same indicator outside a .hjm-choice, keyed on the indicator itself. */
|
|
760
|
+
.hjm-choice[data-kind="checkbox"] .hjm-choice__indicator, .hjm-choice__indicator[data-kind="checkbox"] { border-radius: var(--hjm-radius-sm); }
|
|
778
761
|
.hjm-choice[data-kind="radio"] .hjm-choice__indicator { border-radius: 50%; }
|
|
779
|
-
.hjm-choice[data-state="checked"] .hjm-choice__indicator, .hjm-choice[data-state="mixed"] .hjm-choice__indicator
|
|
780
|
-
.hjm-
|
|
781
|
-
|
|
762
|
+
.hjm-choice[data-state="checked"] .hjm-choice__indicator, .hjm-choice[data-state="mixed"] .hjm-choice__indicator,
|
|
763
|
+
.hjm-choice__indicator[data-state="checked"], .hjm-choice__indicator[data-state="mixed"] { border-color: var(--hjm-color-primary); background: var(--hjm-color-primary); }
|
|
764
|
+
.hjm-choice[data-state="checked"] .hjm-choice__indicator::after, .hjm-choice__indicator[data-kind="checkbox"][data-state="checked"]::after { content: ""; inline-size: 8px; block-size: 4px; border-inline-start: 2px solid var(--hjm-color-on-primary); border-block-end: 2px solid var(--hjm-color-on-primary); transform: rotate(-45deg); }
|
|
765
|
+
[dir="rtl"] .hjm-choice[data-state="checked"] .hjm-choice__indicator::after, [dir="rtl"] .hjm-choice__indicator[data-kind="checkbox"][data-state="checked"]::after { transform: rotate(45deg); }
|
|
782
766
|
.hjm-choice[data-kind="radio"][data-state="checked"] .hjm-choice__indicator::after { inline-size: 8px; block-size: 8px; border: 0; border-radius: 50%; background: var(--hjm-color-on-primary); transform: none; }
|
|
783
|
-
.hjm-choice[data-state="mixed"] .hjm-choice__indicator::after { content: ""; inline-size: 10px; block-size: 2px; background: var(--hjm-color-on-primary); }
|
|
767
|
+
.hjm-choice[data-state="mixed"] .hjm-choice__indicator::after, .hjm-choice__indicator[data-state="mixed"]::after { content: ""; inline-size: 10px; block-size: 2px; background: var(--hjm-color-on-primary); }
|
|
784
768
|
.hjm-choice__copy { display: grid; gap: var(--hjm-space-xxs); padding-block: 2px; }
|
|
785
769
|
.hjm-choice[data-state="checked"] .hjm-choice__copy > :first-child,
|
|
786
770
|
.hjm-choice[data-state="mixed"] .hjm-choice__copy > :first-child { font-weight: var(--hjm-font-weight-bold); }
|
|
@@ -801,7 +785,7 @@
|
|
|
801
785
|
.hjm-checkbox-group[data-orientation="horizontal"][data-presentation="plain"] .hjm-checkbox-group__items { gap: var(--hjm-space-sm); }
|
|
802
786
|
.hjm-checkbox-group[data-orientation="horizontal"][data-presentation="grouped"] .hjm-checkbox-group__items { gap: 0; }
|
|
803
787
|
|
|
804
|
-
.hjm-switch { display: inline-flex; align-items: center; gap: var(--hjm-space-sm); min-block-size: var(--hjm-
|
|
788
|
+
.hjm-switch { display: inline-flex; align-items: center; gap: var(--hjm-space-sm); min-block-size: var(--hjm-switch-row-min-height); padding: 0; border: 0; color: inherit; background: transparent; font: inherit; cursor: pointer; }
|
|
805
789
|
/* Disabled switch colors preserve on/off contrast; row opacity would erase state
|
|
806
790
|
and double-fade the calibrated38% track. Only the label fades (switchRecipe.colors). */
|
|
807
791
|
.hjm-switch:disabled { cursor: not-allowed; }
|
|
@@ -815,6 +799,8 @@
|
|
|
815
799
|
.hjm-switch__copy { display: flex; flex-direction: column; gap: var(--hjm-space-xxs); min-inline-size: 0; text-align: start; overflow-wrap: anywhere; }
|
|
816
800
|
.hjm-switch__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); }
|
|
817
801
|
.hjm-switch[data-presentation="row"] { display: flex; inline-size: 100%; justify-content: space-between; }
|
|
802
|
+
/* switchRecipe.rowTwoLineMinHeight (= list-row comfortable two-line 68), same as Native for a described switch. */
|
|
803
|
+
.hjm-switch[data-two-line="true"] { min-block-size: var(--hjm-switch-row-two-line-min-height); }
|
|
818
804
|
.hjm-switch[data-presentation="row"] .hjm-switch__copy { order: -1; flex: 1; }
|
|
819
805
|
/* Inherited layout variables reset at nested providers and keep ./selection independent. */
|
|
820
806
|
.hjm-root { --hjm-switch-row-direction: row; --hjm-switch-row-align: center; --hjm-switch-copy-flex: 1; }
|
|
@@ -832,7 +818,8 @@
|
|
|
832
818
|
.hjm-switch[data-state="checked"] .hjm-switch__thumb { transform: translateX(var(--hjm-switch-track-offset)); box-shadow: 0 1px 3px rgb(0 0 0 / 20%); }
|
|
833
819
|
[dir="rtl"] .hjm-switch[data-state="checked"] .hjm-switch__thumb { transform: translateX(calc(-1 * var(--hjm-switch-track-offset))); }
|
|
834
820
|
|
|
835
|
-
|
|
821
|
+
/* margin: 0 resets the UA fieldset 2px inline margin (as the other HJM fieldsets do); it offset the track from the parent edges. */
|
|
822
|
+
.hjm-segmented { min-inline-size: 0; margin: 0; padding: 0; border: 0; }
|
|
836
823
|
/* segmentedControlRecipe (2026-10-06 follow-up): track padding/gap spacing.xxs 4, radius lg, 1px border; item radius md,
|
|
837
824
|
medium 44 · padding md, small 36 · padding sm with a 4px vertical hit slop. Web had drawn a 2px track with radius md,
|
|
838
825
|
no small size, and a 1px selected ring; Native already read the recipe. */
|
|
@@ -878,9 +865,9 @@
|
|
|
878
865
|
.hjm-tabs[data-orientation="vertical"] .hjm-tabs__tab[data-state="selected"]::after { inset-block: 0; inset-inline-start: auto; inset-inline-end: 0; inline-size: 2px; block-size: auto; }
|
|
879
866
|
|
|
880
867
|
.hjm-badge, .hjm-tag { display: inline-flex; align-items: center; gap: var(--hjm-space-xxs); max-inline-size: 100%; overflow-wrap: anywhere; }
|
|
881
|
-
.hjm-badge { min-block-size: 24px; padding: 2px var(--hjm-space-xs); border: 1px solid
|
|
868
|
+
.hjm-badge { min-block-size: 24px; padding: 2px var(--hjm-space-xs); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-full); color: var(--hjm-color-text-muted); background: var(--hjm-color-bg); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); font-weight: var(--hjm-font-weight-bold); }
|
|
882
869
|
.hjm-badge[data-size="small"] { min-block-size: 20px; padding-inline: var(--hjm-space-xxs); font-size: var(--hjm-type-caption-size); } /* badgeRecipe.sizes.small.paddingHorizontal xxs 4 (2026-10-06; Web had kept medium's 8) */
|
|
883
|
-
.hjm-badge[data-tone="strong"] { color: var(--hjm-color-bg); background: var(--hjm-color-text); }
|
|
870
|
+
.hjm-badge[data-tone="strong"] { color: var(--hjm-color-bg); background: var(--hjm-color-text); border-color: transparent; } /* neutral/brand plates are canvas-white and need badgeRecipe's border to stay visible (2026-10-17) */
|
|
884
871
|
.hjm-badge[data-tone="brand"] { color: var(--hjm-color-content-brand); }
|
|
885
872
|
.hjm-badge[data-tone="info"], .hjm-tag[data-tone="info"] { color: var(--hjm-accent-info); background: var(--hjm-color-bg); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
886
873
|
.hjm-badge[data-tone="success"], .hjm-tag[data-tone="success"] { color: var(--hjm-accent-success); background: color-mix(in srgb, var(--hjm-accent-success) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-success) 30%, transparent); }
|
|
@@ -894,7 +881,7 @@
|
|
|
894
881
|
.hjm-badge[data-variant="outline"][data-tone="warning"] { border-color: color-mix(in srgb, var(--hjm-accent-warning) 30%, transparent); }
|
|
895
882
|
.hjm-badge[data-variant="outline"][data-tone="attention"] { border-color: color-mix(in srgb, var(--hjm-accent-attention) 30%, transparent); }
|
|
896
883
|
.hjm-badge[data-variant="outline"][data-tone="danger"] { border-color: color-mix(in srgb, var(--hjm-color-danger) 30%, transparent); }
|
|
897
|
-
.hjm-tag { min-block-size: 20px; padding-inline: var(--hjm-space-xxs); border: 1px solid
|
|
884
|
+
.hjm-tag { min-block-size: 20px; padding-inline: var(--hjm-space-xxs); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-sm); color: var(--hjm-color-text-muted); background: var(--hjm-color-bg); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); font-weight: var(--hjm-font-weight-semibold); }
|
|
898
885
|
.hjm-tag[data-tone="brand"] { color: var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
899
886
|
.hjm-tag[data-tone="info"] { background: var(--hjm-color-bg); }
|
|
900
887
|
.hjm-tag[data-tone="success"] { background: color-mix(in srgb, var(--hjm-accent-success) 10%, transparent); }
|
|
@@ -918,7 +905,10 @@
|
|
|
918
905
|
|
|
919
906
|
.hjm-card { overflow: hidden; }
|
|
920
907
|
.hjm-card__media > * { display: block; inline-size: 100%; }
|
|
921
|
-
|
|
908
|
+
/* The implicit auto column grew to the min-content of slotted children (e.g. a SegmentedControl with max-content items),
|
|
909
|
+
pushing content past the card padding at narrow widths (2026-10-17 STEA schedule card at 402). minmax(0, 1fr) keeps every
|
|
910
|
+
slot inside the padded body so scroll/wrap rules of the child apply. */
|
|
911
|
+
.hjm-card__body { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--hjm-space-xs); padding: var(--hjm-space-md); }
|
|
922
912
|
.hjm-card__header { display: flex; align-items: flex-start; gap: var(--hjm-space-sm); min-inline-size: 0; }
|
|
923
913
|
.hjm-card__leading { flex: 0 0 auto; display: inline-grid; place-items: center; line-height: 1; }
|
|
924
914
|
.hjm-card__copy { flex: 1 1 auto; min-inline-size: 0; display: grid; gap: var(--hjm-space-xs); }
|
|
@@ -945,9 +935,11 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
945
935
|
.hjm-list-row__leading { display: flex; align-items: center; justify-content: center; inline-size: var(--hjm-list-row-leading-size); block-size: var(--hjm-list-row-leading-size); overflow: hidden; }
|
|
946
936
|
.hjm-list-row__leading[data-shape="circle"] { border-radius: var(--hjm-radius-full); }
|
|
947
937
|
.hjm-list-row__content { flex: 1 1 auto; min-inline-size: 0; display: grid; gap: var(--hjm-space-xxs); }
|
|
948
|
-
|
|
938
|
+
/* listRowRecipe title bodyLarge / description body (2026-10-17: Web inherited 14 for both while Native used the recipe). */
|
|
939
|
+
.hjm-list-row__title { color: var(--hjm-color-text-body); font-size: var(--hjm-type-body-large-size); line-height: var(--hjm-type-body-large-line-height); font-weight: var(--hjm-font-weight-bold); overflow-wrap: anywhere; }
|
|
949
940
|
.hjm-list-row[data-tone="danger"] .hjm-list-row__title { color: var(--hjm-color-danger); }
|
|
950
941
|
.hjm-list-row__description, .hjm-list-row__trailing { color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
942
|
+
.hjm-list-row__description { font-size: var(--hjm-type-body-size); line-height: var(--hjm-type-body-line-height); }
|
|
951
943
|
|
|
952
944
|
.hjm-section { display: grid; gap: var(--hjm-space-xs); min-inline-size: 0; overflow-wrap: anywhere; }
|
|
953
945
|
.hjm-section__header { display: flex; align-items: center; justify-content: space-between; gap: var(--hjm-space-sm); min-inline-size: 0; }
|
|
@@ -958,17 +950,19 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
958
950
|
.hjm-section__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); overflow-wrap: anywhere; }
|
|
959
951
|
.hjm-section__action { flex: 0 0 auto; }
|
|
960
952
|
.hjm-section__content { min-inline-size: 0; }
|
|
961
|
-
/*
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
}
|
|
953
|
+
/* The header stacks only at large text (provider data-large-text = largeTextThreshold 1.6), the same trigger as Native
|
|
954
|
+
Section (textScale >= 1.6). Until 2026-10-17 Web stacked below 600px, so every phone-width Web Section dropped and
|
|
955
|
+
stretched its action under the title while Native kept one row (screen review S5#3). */
|
|
956
|
+
.hjm-root[data-large-text="true"] .hjm-section__header { align-items: stretch; flex-direction: column; }
|
|
965
957
|
|
|
966
958
|
/* chipRecipe.sizes (2026-10-06 follow-up): medium 44 · padding md 16 · gap xs 8, small 36 · padding sm 12 · gap xxs 4 with a
|
|
967
959
|
4px vertical hit slop. Web had drawn padding 12/8 and gap 8 for both sizes. */
|
|
968
960
|
/* ActivityChip (2026-10-10): one 44px status pill in a header slot. Colours are the theme roles that
|
|
969
961
|
activityChipRecipe.emphasis references (surface/text/border, primary/onPrimary); the component sets the
|
|
970
962
|
recipe-only sizes as custom properties so theme.ts does not pull this opt-in contract into every graph. */
|
|
971
|
-
|
|
963
|
+
/* fit-content: a column Stack stretched the pill to its max width with empty space after the label; Native sizes it
|
|
964
|
+
to its content (2026-10-17 review F N13). Unlike align-self it keeps vertical centering in a TopBar row. */
|
|
965
|
+
.hjm-activity-chip { display: inline-flex; align-items: center; gap: var(--hjm-space-xxs); min-block-size: var(--hjm-control-min-touch-target); inline-size: fit-content; max-inline-size: var(--hjm-activity-chip-max-width); min-inline-size: 0; padding-block: 0; padding-inline: var(--hjm-space-xxs) var(--hjm-space-sm); border: 1px solid var(--hjm-color-border); border-radius: 999px; color: var(--hjm-color-text); background: var(--hjm-color-surface); font: inherit; font-size: var(--hjm-type-label-size, 0.75rem); line-height: var(--hjm-type-label-line-height, 1.5); font-weight: var(--hjm-font-weight-bold); cursor: pointer; }
|
|
972
966
|
/* Without media the pill keeps the symmetric label inset; the media hugs the start edge like an avatar chip. */
|
|
973
967
|
.hjm-activity-chip:not([data-media]) { padding-inline-start: var(--hjm-space-sm); }
|
|
974
968
|
.hjm-activity-chip[data-emphasis="emphasis"] { border-color: var(--hjm-color-primary); color: var(--hjm-color-on-primary); background: var(--hjm-color-primary); }
|
|
@@ -993,7 +987,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
993
987
|
/* Indent only the divider: moving the row shifted every title after the first
|
|
994
988
|
and narrowed its text column in the notification-settings composition. */
|
|
995
989
|
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item { position: relative; }
|
|
996
|
-
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item::before { content: ""; position: absolute; inset-block-start: 0; inset-inline: calc(40px + var(--hjm-space-sm)) 0; border-block-start: 1px solid var(--hjm-color-border); pointer-events: none; } /* listRecipe.separators.indented.insetStart = leading 40 + sm 12 =
|
|
990
|
+
.hjm-list[data-separator="indented"] > .hjm-list__item + .hjm-list__item::before { content: ""; position: absolute; inset-block-start: 0; inset-inline: calc(var(--hjm-space-xs) + 40px + var(--hjm-space-sm)) 0; border-block-start: 1px solid var(--hjm-color-border); pointer-events: none; } /* listRecipe.separators.indented.insetStart = row padding 8 + leading 40 + sm 12 = 60, as Native (2026-10-17) */
|
|
997
991
|
|
|
998
992
|
/* statisticRecipe.density (2026-10-06 follow-up): line gap comfortable xs 8 · compact xxs 4, surface padding md 16 · sm 12,
|
|
999
993
|
group gap xs 8. Web had drawn 4/2, a fixed 16 and 12, Native read the recipe. */
|
|
@@ -1033,28 +1027,38 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1033
1027
|
.hjm-notice__title, .hjm-notice__description { overflow-wrap: anywhere; }
|
|
1034
1028
|
|
|
1035
1029
|
/* emptyStateRecipe.density.regular paddingVertical xxxl 40 (2026-10-06; Web had xxl 32, Native read the recipe). */
|
|
1036
|
-
|
|
1037
|
-
.hjm-empty-state
|
|
1030
|
+
/* Like Native, a regular empty state fills the rest of a flex host and centers in it; compact (cards, sheets) stays content-high. */
|
|
1031
|
+
.hjm-empty-state { display: grid; flex-grow: 1; align-content: center; justify-items: center; gap: var(--hjm-space-xs); padding: var(--hjm-space-xxxl) var(--hjm-space-xl); color: var(--hjm-color-text-muted); text-align: center; }
|
|
1032
|
+
.hjm-empty-state[data-density="compact"] { flex-grow: 0; padding-block: var(--hjm-space-xl); }
|
|
1038
1033
|
.hjm-empty-state__title { color: var(--hjm-color-text); }
|
|
1039
1034
|
.hjm-result { display: grid; justify-items: center; gap: var(--hjm-space-sm); padding: var(--hjm-space-xxxl) var(--hjm-space-xl); text-align: center; }
|
|
1040
1035
|
.hjm-result__icon { inline-size: 3.5rem; block-size: 3.5rem; display: grid; place-items: center; border-radius: var(--hjm-radius-full); font-size: 1.5rem; font-weight: var(--hjm-font-weight-bold); }
|
|
1041
|
-
.hjm-result__icon:empty::before { content: "i"; }
|
|
1042
1036
|
.hjm-result[data-status="success"] .hjm-result__icon { color: var(--hjm-accent-success); background: color-mix(in srgb, var(--hjm-accent-success) 12%, transparent); }
|
|
1043
|
-
.hjm-result[data-status="success"] .hjm-result__icon:empty::before { content: "✓"; }
|
|
1044
1037
|
.hjm-result[data-status="failure"] .hjm-result__icon { color: var(--hjm-color-danger); background: color-mix(in srgb, var(--hjm-color-danger) 12%, transparent); }
|
|
1045
|
-
.hjm-result[data-status="failure"] .hjm-result__icon:empty::before { content: "!"; }
|
|
1046
1038
|
.hjm-result[data-status="info"] .hjm-result__icon { color: var(--hjm-accent-info); background: var(--hjm-color-bg); }
|
|
1047
1039
|
.hjm-result__title { margin: 0; color: var(--hjm-color-text); font-size: var(--hjm-type-title-large-size); line-height: var(--hjm-type-title-large-line-height); overflow-wrap: anywhere; }
|
|
1048
1040
|
.hjm-result__description { max-inline-size: 40rem; margin: 0; color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
1049
1041
|
.hjm-result__actions { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--hjm-space-sm); margin-block-start: var(--hjm-space-xs); }
|
|
1050
1042
|
.hjm-progress { display: grid; gap: var(--hjm-space-xs); }
|
|
1051
1043
|
.hjm-progress__copy { display: flex; justify-content: space-between; gap: var(--hjm-space-md); color: var(--hjm-color-text-body); }
|
|
1052
|
-
|
|
1044
|
+
/*
|
|
1045
|
+
progressRecipe paints a tone fill on the sunken track. Authored box styles drop Chromium/WebKit out of native
|
|
1046
|
+
appearance, which then ignores accent-color and paints its UA green bar on grey (2026-10-17 review), so the bar opts
|
|
1047
|
+
out of native appearance explicitly and paints both parts. The track uses the same surface as the circular ring.
|
|
1048
|
+
*/
|
|
1049
|
+
.hjm-progress { --hjm-progress-fill: var(--hjm-color-content-brand); --hjm-progress-track: var(--hjm-color-surface-alt); }
|
|
1050
|
+
.hjm-progress[data-tone="success"] { --hjm-progress-fill: var(--hjm-accent-success); }
|
|
1051
|
+
.hjm-progress[data-tone="warning"] { --hjm-progress-fill: var(--hjm-accent-warning); }
|
|
1052
|
+
.hjm-progress[data-tone="danger"] { --hjm-progress-fill: var(--hjm-color-danger); }
|
|
1053
|
+
.hjm-progress__native { -webkit-appearance: none; appearance: none; inline-size: 100%; block-size: 8px; border: 0; border-radius: var(--hjm-radius-full); overflow: hidden; background: var(--hjm-progress-track); color: var(--hjm-progress-fill); }
|
|
1054
|
+
.hjm-progress__native::-webkit-progress-bar { border-radius: inherit; background: var(--hjm-progress-track); }
|
|
1055
|
+
.hjm-progress__native::-webkit-progress-value { border-radius: inherit; background: var(--hjm-progress-fill); }
|
|
1056
|
+
.hjm-progress__native::-moz-progress-bar { border-radius: inherit; background: var(--hjm-progress-fill); }
|
|
1057
|
+
/* Without a value there is no progress-value box; show the same fixed 30% start-edge segment as the Native renderer. */
|
|
1058
|
+
.hjm-progress[data-state="indeterminate"] .hjm-progress__native { background: linear-gradient(to right, var(--hjm-progress-fill) 0 30%, var(--hjm-progress-track) 30%); }
|
|
1059
|
+
.hjm-progress[data-state="indeterminate"] .hjm-progress__native:dir(rtl) { background: linear-gradient(to left, var(--hjm-progress-fill) 0 30%, var(--hjm-progress-track) 30%); }
|
|
1053
1060
|
.hjm-progress[data-size="small"] .hjm-progress__native { block-size: 4px; }
|
|
1054
1061
|
.hjm-progress[data-size="large"] .hjm-progress__native { block-size: 12px; }
|
|
1055
|
-
.hjm-progress[data-tone="success"] .hjm-progress__native { accent-color: var(--hjm-accent-success); }
|
|
1056
|
-
.hjm-progress[data-tone="warning"] .hjm-progress__native { accent-color: var(--hjm-accent-warning); }
|
|
1057
|
-
.hjm-progress[data-tone="danger"] .hjm-progress__native { accent-color: var(--hjm-color-danger); }
|
|
1058
1062
|
/*
|
|
1059
1063
|
The circular shape hides the native bar and draws the same value as a conic
|
|
1060
1064
|
sweep. The element stays a <progress>, so the value, the indeterminate case
|
|
@@ -1071,13 +1075,10 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1071
1075
|
inline-size: var(--hjm-progress-diameter);
|
|
1072
1076
|
block-size: var(--hjm-progress-diameter);
|
|
1073
1077
|
border-radius: var(--hjm-radius-full);
|
|
1074
|
-
background: conic-gradient(var(--hjm-progress-
|
|
1078
|
+
background: conic-gradient(var(--hjm-progress-fill) var(--hjm-progress-sweep), var(--hjm-progress-track) 0);
|
|
1075
1079
|
-webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--hjm-progress-stroke)), #000 calc(100% - var(--hjm-progress-stroke)));
|
|
1076
1080
|
mask: radial-gradient(farthest-side, transparent calc(100% - var(--hjm-progress-stroke)), #000 calc(100% - var(--hjm-progress-stroke)));
|
|
1077
1081
|
}
|
|
1078
|
-
.hjm-progress[data-tone="success"] .hjm-progress__ring { --hjm-progress-ring-color: var(--hjm-accent-success); }
|
|
1079
|
-
.hjm-progress[data-tone="warning"] .hjm-progress__ring { --hjm-progress-ring-color: var(--hjm-accent-warning); }
|
|
1080
|
-
.hjm-progress[data-tone="danger"] .hjm-progress__ring { --hjm-progress-ring-color: var(--hjm-color-danger); }
|
|
1081
1082
|
.hjm-progress[data-state="indeterminate"][data-shape="circular"] .hjm-progress__ring { animation: hjm-provider-spin 1200ms linear infinite; }
|
|
1082
1083
|
@media (prefers-reduced-motion: reduce) {
|
|
1083
1084
|
.hjm-progress[data-state="indeterminate"][data-shape="circular"] .hjm-progress__ring { animation: none; }
|
|
@@ -1261,12 +1262,17 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1261
1262
|
.hjm-line-score__table th.hjm-line-score__team { padding-inline: var(--hjm-space-sm); text-align: start; color: var(--hjm-color-text-muted); font-weight: var(--hjm-font-weight-semibold); }
|
|
1262
1263
|
.hjm-line-score__team-content { display: inline-flex; align-items: center; gap: var(--hjm-space-xs); }
|
|
1263
1264
|
.hjm-line-score__table tr[data-leader] th.hjm-line-score__team { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-bold); }
|
|
1265
|
+
.hjm-line-score { --hjm-line-score-total-width: 30px; scroll-padding-inline-end: calc(var(--hjm-line-score-total-width) * var(--hjm-line-score-total-count, 0)); }
|
|
1266
|
+
.hjm-line-score__table .hjm-line-score__team, .hjm-line-score__table .hjm-line-score__total { position: sticky; z-index: 1; background: var(--hjm-color-surface); }
|
|
1267
|
+
.hjm-line-score__table .hjm-line-score__team { inset-inline-start: 0; }
|
|
1264
1268
|
.hjm-line-score__table td.hjm-line-score__period { min-inline-size: 26px; color: var(--hjm-color-text-sub); }
|
|
1265
1269
|
.hjm-line-score__table td[data-scored] { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-bold); }
|
|
1266
1270
|
.hjm-line-score__table [data-current] { background: var(--hjm-table-family-selected); }
|
|
1267
1271
|
.hjm-line-score__table th[data-current] { color: var(--hjm-color-content-brand); }
|
|
1268
|
-
.hjm-line-score__total { min-inline-size:
|
|
1269
|
-
|
|
1272
|
+
.hjm-line-score__total { inline-size: var(--hjm-line-score-total-width); min-inline-size: var(--hjm-line-score-total-width); color: var(--hjm-color-text-muted); font-weight: var(--hjm-font-weight-semibold); }
|
|
1273
|
+
/* A collapsed-table border stays with the table, not the pinned cell, so the edge is an inset shadow. */
|
|
1274
|
+
.hjm-line-score__total-edge { box-shadow: inset 1px 0 0 var(--hjm-color-border); }
|
|
1275
|
+
.hjm-line-score__total-edge:dir(rtl) { box-shadow: inset -1px 0 0 var(--hjm-color-border); }
|
|
1270
1276
|
.hjm-line-score__table tbody .hjm-line-score__total-edge { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-bold); }
|
|
1271
1277
|
.hjm-matrix-table__table th, .hjm-matrix-table__table td { padding: var(--hjm-space-xs); text-align: center; white-space: nowrap; border-block-start: 1px solid var(--hjm-color-border); }
|
|
1272
1278
|
.hjm-matrix-table__table thead th { border-block-start: 0; color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); font-weight: var(--hjm-font-weight-bold); }
|
|
@@ -1424,22 +1430,11 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1424
1430
|
border-block-end: 1px solid var(--hjm-color-border);
|
|
1425
1431
|
}
|
|
1426
1432
|
.hjm-transfer-list__title { font-weight: var(--hjm-font-weight-bold); overflow-wrap: anywhere; }
|
|
1427
|
-
.hjm-transfer-list__select-all
|
|
1428
|
-
.
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
inline-size: var(--hjm-space-md);
|
|
1433
|
-
block-size: var(--hjm-space-md);
|
|
1434
|
-
border: 1px solid var(--hjm-color-border-control);
|
|
1435
|
-
border-radius: var(--hjm-radius-sm);
|
|
1436
|
-
background: transparent;
|
|
1437
|
-
color: var(--hjm-color-on-primary);
|
|
1438
|
-
font-size: var(--hjm-type-label-size);
|
|
1439
|
-
}
|
|
1440
|
-
.hjm-transfer-list__select-all[aria-checked="true"],
|
|
1441
|
-
.hjm-transfer-list__select-all[aria-checked="mixed"],
|
|
1442
|
-
.hjm-transfer-list__mark[data-checked] { border-color: var(--hjm-color-primary); background: var(--hjm-color-primary); }
|
|
1433
|
+
.hjm-transfer-list__select-all { display: grid; place-items: center; flex: 0 0 auto; padding: 0; border: 0; background: transparent; }
|
|
1434
|
+
/* These rows center the indicator, so drop the 2px top offset Checkbox uses to sit on its first text line. */
|
|
1435
|
+
.hjm-transfer-list__select-all > .hjm-choice__indicator,
|
|
1436
|
+
.hjm-transfer-list__option > .hjm-choice__indicator,
|
|
1437
|
+
.hjm-agreement .hjm-choice__indicator { margin-block-start: 0; }
|
|
1443
1438
|
.hjm-transfer-list__options { display: flex; flex-direction: column; padding: var(--hjm-space-xxs); }
|
|
1444
1439
|
.hjm-transfer-list__option {
|
|
1445
1440
|
/* transferListRecipe.item = collectionItemContract: padding/gap sm 12, radius md (2026-10-06; Web had 8 and radius sm, Native 12). */
|
|
@@ -1462,7 +1457,14 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1462
1457
|
.hjm-transfer-list__empty:focus-visible,
|
|
1463
1458
|
.hjm-transfer-list__select-all:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: -2px; }
|
|
1464
1459
|
.hjm-transfer-list__empty { margin: 0; padding: var(--hjm-space-md) var(--hjm-space-sm); color: var(--hjm-color-text-muted); text-align: center; }
|
|
1465
|
-
.hjm-transfer-list__actions { display: flex; flex-direction: column; gap: var(--hjm-space-
|
|
1460
|
+
.hjm-transfer-list__actions { display: flex; flex-direction: column; gap: var(--hjm-space-xs); /* transferListRecipe.moveControls.gap xs 8 (stacked buttons), as Native */ padding-block-start: var(--hjm-space-xl); }
|
|
1461
|
+
.hjm-transfer-list__move-icon[data-orientation="stacked"] { display: none; }
|
|
1462
|
+
/* Stacked panels: the buttons follow the source panel directly and point down/up at the panel they move to. */
|
|
1463
|
+
@media (max-width: 30rem) {
|
|
1464
|
+
.hjm-transfer-list__actions { padding-block-start: 0; }
|
|
1465
|
+
.hjm-transfer-list__move-icon[data-orientation="inline"] { display: none; }
|
|
1466
|
+
.hjm-transfer-list__move-icon[data-orientation="stacked"] { display: inline-block; }
|
|
1467
|
+
}
|
|
1466
1468
|
|
|
1467
1469
|
/* AuthProviderButton ------------------------------------------------------ */
|
|
1468
1470
|
/* Provider guideline colors cannot follow the theme without failing provider review.
|
|
@@ -1946,7 +1948,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1946
1948
|
flex-wrap: wrap;
|
|
1947
1949
|
align-items: center;
|
|
1948
1950
|
gap: var(--hjm-space-xs);
|
|
1949
|
-
padding-inline: var(--hjm-space-
|
|
1951
|
+
padding-inline: var(--hjm-space-md); /* agreementRecipe.itemLayout.paddingHorizontal: marks align with the all row */
|
|
1950
1952
|
}
|
|
1951
1953
|
/* agreementRecipe.itemLayout.labelBasis: details wrap before consent copy is
|
|
1952
1954
|
squeezed into vertical text at 2x scale (Utilverse adoption QA, 2026-10-07). */
|
|
@@ -1977,23 +1979,6 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1977
1979
|
font-size: var(--hjm-type-label-size);
|
|
1978
1980
|
text-decoration: underline;
|
|
1979
1981
|
}
|
|
1980
|
-
.hjm-agreement__mark {
|
|
1981
|
-
display: grid;
|
|
1982
|
-
place-items: center;
|
|
1983
|
-
flex: 0 0 auto;
|
|
1984
|
-
inline-size: var(--hjm-space-md);
|
|
1985
|
-
block-size: var(--hjm-space-md);
|
|
1986
|
-
border: 1px solid var(--hjm-color-border-control);
|
|
1987
|
-
border-radius: var(--hjm-radius-sm);
|
|
1988
|
-
color: var(--hjm-color-on-primary);
|
|
1989
|
-
font-size: var(--hjm-type-label-size);
|
|
1990
|
-
}
|
|
1991
|
-
/* A mark is fixed artwork, not font-scaled copy. The former text glyph escaped
|
|
1992
|
-
the 16px frame when the provider doubled label typography. */
|
|
1993
|
-
.hjm-agreement__mark[data-state="true"] .hjm-agreement__ink { inline-size: 8px; block-size: 4px; border-left: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(-45deg); }
|
|
1994
|
-
.hjm-agreement__mark[data-state="mixed"] .hjm-agreement__ink { inline-size: 10px; block-size: 2px; background: currentColor; }
|
|
1995
|
-
.hjm-agreement__mark[data-state="true"],
|
|
1996
|
-
.hjm-agreement__mark[data-state="mixed"] { border-color: var(--hjm-color-primary); background: var(--hjm-color-primary); }
|
|
1997
1982
|
.hjm-agreement__all:focus-visible,
|
|
1998
1983
|
.hjm-agreement__toggle:focus-visible,
|
|
1999
1984
|
.hjm-agreement__detail:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
@@ -2249,6 +2234,10 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2249
2234
|
.hjm-sheet[data-placement="bottom"][data-detent="full"] { max-block-size: 100%; }
|
|
2250
2235
|
/* Detent handle: a control, so it carries the shared minimum target. */
|
|
2251
2236
|
.hjm-sheet__handle-row { display: flex; justify-content: center; flex: 0 0 auto; }
|
|
2237
|
+
/* Drag-to-dismiss zone (handle + header) of bottom sheets; vertical drags must not scroll the page. */
|
|
2238
|
+
.hjm-sheet__drag { flex: 0 0 auto; }
|
|
2239
|
+
.hjm-sheet__drag[data-swipe] { touch-action: none; cursor: grab; }
|
|
2240
|
+
.hjm-sheet[data-dragging] { transition: none !important; }
|
|
2252
2241
|
.hjm-sheet__handle {
|
|
2253
2242
|
display: grid;
|
|
2254
2243
|
place-items: center;
|
|
@@ -2617,7 +2606,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2617
2606
|
|
|
2618
2607
|
/* Expansion renderers --------------------------------------------------- */
|
|
2619
2608
|
.hjm-steps { display: grid; grid-template-columns: repeat(var(--hjm-steps-count, auto-fit), minmax(0, 1fr)); gap: var(--hjm-space-xs); margin: 0; padding: 0; list-style: none; }
|
|
2620
|
-
.hjm-steps__step { min-inline-size: 0; display: grid; gap: var(--hjm-space-xs); }
|
|
2609
|
+
.hjm-steps__step { min-inline-size: 0; display: grid; align-content: start; gap: var(--hjm-space-xs); }
|
|
2621
2610
|
.hjm-steps__rail { display: flex; align-items: center; min-inline-size: 0; }
|
|
2622
2611
|
.hjm-steps__indicator { flex: 0 0 auto; inline-size: 1.5rem; block-size: 1.5rem; display: grid; place-items: center; border: 1px solid var(--hjm-color-border); border-radius: 50%; color: var(--hjm-color-text-muted); background: var(--hjm-color-bg); font-size: var(--hjm-type-label-size); font-weight: var(--hjm-font-weight-bold); }
|
|
2623
2612
|
.hjm-steps__connector { flex: 1 1 auto; block-size: 1px; background: var(--hjm-color-border); }
|
|
@@ -2626,7 +2615,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2626
2615
|
.hjm-steps__step[data-status="complete"] .hjm-steps__connector { background: var(--hjm-color-content-brand); }
|
|
2627
2616
|
.hjm-steps__step[data-status="error"] .hjm-steps__indicator { border: 2px solid var(--hjm-color-danger); color: var(--hjm-color-danger); background: var(--hjm-color-danger-fill); }
|
|
2628
2617
|
.hjm-steps__copy { min-inline-size: 0; display: grid; gap: var(--hjm-space-xxs); padding-inline-end: var(--hjm-space-sm); }
|
|
2629
|
-
.hjm-steps__label { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); overflow-wrap: anywhere; }
|
|
2618
|
+
.hjm-steps__label { color: var(--hjm-color-text); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); font-weight: var(--hjm-font-weight-semibold); overflow-wrap: anywhere; }
|
|
2630
2619
|
.hjm-steps__step[data-status="pending"] .hjm-steps__label { color: var(--hjm-color-text-muted); }
|
|
2631
2620
|
.hjm-steps__step[data-status="error"] .hjm-steps__label { color: var(--hjm-color-danger); }
|
|
2632
2621
|
.hjm-steps__description { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-caption-size); overflow-wrap: anywhere; }
|
|
@@ -2651,13 +2640,12 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2651
2640
|
.hjm-upload-item .hjm-progress__copy > span:last-child:not(:first-child) { flex: 1 1 10rem; overflow-wrap: anywhere; text-align: end; }
|
|
2652
2641
|
.hjm-upload-item[data-status="success"] .hjm-upload-item__status { color: var(--hjm-accent-success); }
|
|
2653
2642
|
.hjm-upload-item[data-status="error"] .hjm-upload-item__status { color: var(--hjm-color-danger); }
|
|
2654
|
-
.hjm-upload-item__action { flex: 0 0 auto;
|
|
2655
|
-
.hjm-upload-item__action[data-action="cancel"] { color: var(--hjm-color-danger); }
|
|
2643
|
+
.hjm-upload-item__action { flex: 0 0 auto; margin-inline-start: auto; }
|
|
2656
2644
|
|
|
2657
2645
|
.hjm-date-picker { display: grid; gap: var(--hjm-space-xs); }
|
|
2658
2646
|
.hjm-date-picker__label { color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2659
2647
|
.hjm-date-picker__anchor { position: relative; display: flex; align-items: center; }
|
|
2660
|
-
.hjm-date-picker__trigger { inline-size: 100%; min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; gap: var(--hjm-space-sm); padding-inline: var(--hjm-space-md) 3rem; border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-md); color: var(--hjm-color-text-body); background: var(--hjm-color-bg); font: inherit; text-align: start; cursor: pointer; }
|
|
2648
|
+
.hjm-date-picker__trigger { inline-size: 100%; min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; gap: var(--hjm-space-sm); padding-inline: var(--hjm-space-md) 3rem; border: 1px solid var(--hjm-color-border-control); border-radius: var(--hjm-radius-md); color: var(--hjm-color-text-body); background: var(--hjm-color-bg); font: inherit; text-align: start; cursor: pointer; }
|
|
2661
2649
|
/* datePickerRecipe.sizes.large.minHeight is control.buttonHeight.large (52), as Select/NumberField large. Web drew 56 until 2026-10-06. */
|
|
2662
2650
|
.hjm-date-picker[data-size="large"] .hjm-date-picker__trigger { min-block-size: var(--hjm-control-button-large); padding-inline-start: var(--hjm-space-lg); }
|
|
2663
2651
|
.hjm-date-picker[data-invalid] .hjm-date-picker__trigger { border-color: var(--hjm-color-danger); }
|
|
@@ -2665,7 +2653,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2665
2653
|
looked enabled on both platforms. datePickerRecipe has no amount, so the field default applies. */
|
|
2666
2654
|
.hjm-date-picker[data-disabled] :is(.hjm-date-picker__label, .hjm-date-picker__anchor) { opacity: var(--hjm-field-disabled-opacity); }
|
|
2667
2655
|
.hjm-date-picker__trigger [data-placeholder] { color: var(--hjm-color-text-muted); }
|
|
2668
|
-
.hjm-date-picker__clear { position: absolute; inset-inline-end: 0;
|
|
2656
|
+
.hjm-date-picker__clear { position: absolute; inset-inline-end: 0; }
|
|
2669
2657
|
.hjm-date-picker__popover { position: absolute; z-index: var(--hjm-layer-dropdown); inset-block-start: calc(100% + var(--hjm-space-xs)); inset-inline-start: 0; inline-size: min(22.5rem, calc(100vw - 2rem)); padding: var(--hjm-space-sm); border: 1px solid var(--hjm-color-border); border-radius: var(--hjm-radius-lg); color: var(--hjm-color-text); background: var(--hjm-color-bg); box-shadow: var(--hjm-shadow-floating); }
|
|
2670
2658
|
.hjm-date-picker__description { color: var(--hjm-color-text-muted); }
|
|
2671
2659
|
.hjm-date-picker__error { color: var(--hjm-color-danger); }
|
|
@@ -2676,10 +2664,11 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2676
2664
|
.hjm-toast-viewport[data-placement^="bottom"] { inset-block-end: calc(max(var(--hjm-space-md), env(safe-area-inset-bottom)) + var(--hjm-toast-bottom-offset, 0px)); flex-direction: column-reverse; }
|
|
2677
2665
|
.hjm-toast-viewport[data-placement$="-start"] { margin-inline-start: 0; }
|
|
2678
2666
|
.hjm-toast-viewport[data-placement$="-end"] { margin-inline-end: 0; }
|
|
2679
|
-
/* Cards stay narrow on desktop too; keep close/action rows explicit (docs/toast.md).
|
|
2667
|
+
/* Cards stay narrow on desktop too; keep close/action rows explicit (docs/toast.md). The card owns its width cap so a
|
|
2668
|
+
controlled Toast outside the viewport keeps it too (it stretched to 1200px in the layout story, 2026-10-17 review).
|
|
2680
2669
|
1.10.0 layout: [tone badge][title + description][close] / action pill on its own row, end-aligned.
|
|
2681
2670
|
The 2px tone strip is retired — the tinted badge carries tone (toastRecipe.toneMark width 0). */
|
|
2682
|
-
.hjm-toast { position: relative; min-inline-size: 0; min-block-size: 3.5rem; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; column-gap: var(--hjm-space-sm); row-gap: var(--hjm-space-xs); padding: var(--hjm-space-sm) var(--hjm-space-xs) var(--hjm-space-sm) var(--hjm-space-md); overflow: hidden; border: var(--hjm-toast-border-width) solid var(--hjm-toast-border); border-radius: var(--hjm-toast-radius); color: var(--hjm-color-text); background: var(--hjm-toast-background); box-shadow: var(--hjm-toast-shadow); pointer-events: auto; }
|
|
2671
|
+
.hjm-toast { position: relative; min-inline-size: 0; max-inline-size: min(26.25rem, 100%); min-block-size: 3.5rem; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: start; column-gap: var(--hjm-space-sm); row-gap: var(--hjm-space-xs); padding: var(--hjm-space-sm) var(--hjm-space-xs) var(--hjm-space-sm) var(--hjm-space-md); overflow: hidden; border: var(--hjm-toast-border-width) solid var(--hjm-toast-border); border-radius: var(--hjm-toast-radius); color: var(--hjm-color-text); background: var(--hjm-toast-background); box-shadow: var(--hjm-toast-shadow); pointer-events: auto; }
|
|
2683
2672
|
/* Whole-card activation is a sibling surface; explicit controls stay above it. */
|
|
2684
2673
|
.hjm-toast__press { position: absolute; inset: 0; z-index: 1; border: 0; border-radius: inherit; padding: 0; background: transparent; cursor: pointer; }
|
|
2685
2674
|
.hjm-toast__press:focus-visible { outline: 2px solid var(--hjm-color-content-brand); outline-offset: -2px; }
|
|
@@ -2722,7 +2711,6 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2722
2711
|
.hjm-toast__action:focus-visible,
|
|
2723
2712
|
.hjm-toast__close:focus-visible,
|
|
2724
2713
|
.hjm-file-picker__dropzone button:focus-visible,
|
|
2725
|
-
.hjm-upload-item__action:focus-visible,
|
|
2726
2714
|
.hjm-date-picker__trigger:focus-visible,
|
|
2727
2715
|
.hjm-date-picker__clear:focus-visible,
|
|
2728
2716
|
.hjm-table-scroll:focus-visible {
|
|
@@ -2786,8 +2774,13 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2786
2774
|
.hjm-top-bar[data-large-text="true"] .hjm-top-bar__trailing { grid-column: 2; grid-row: 1; }
|
|
2787
2775
|
.hjm-bottom-cta { display: grid; gap: var(--hjm-bottom-cta-gap); min-block-size: var(--hjm-bottom-cta-min-height); padding: var(--hjm-bottom-cta-padding-top) var(--hjm-bottom-cta-padding-inline) max(var(--hjm-bottom-cta-padding-bottom), env(safe-area-inset-bottom, 0px), var(--hjm-bottom-cta-safe-area)); border-block-start: 1px solid var(--hjm-color-border); background: var(--hjm-color-bg); box-shadow: var(--hjm-bottom-cta-shadow, none); }
|
|
2788
2776
|
.hjm-bottom-cta[data-position="sticky"] { position: sticky; inset-block-end: 0; z-index: var(--hjm-layer-sticky); }
|
|
2777
|
+
/* Inside ScreenLayout's footer the footer owns border, padding, surface and safe area; BottomCTA keeps only its copy,
|
|
2778
|
+
actions and an explicit safeAreaBottom (2026-10-17: the doubled bar inset the buttons twice). */
|
|
2779
|
+
.hjm-bottom-cta[data-placement="screen-footer"] { position: static; min-block-size: 0; padding: 0 0 var(--hjm-bottom-cta-safe-area); border: 0; background: none; box-shadow: none; }
|
|
2789
2780
|
.hjm-bottom-cta__description { margin: 0; font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
2790
2781
|
.hjm-bottom-cta__actions { display: flex; flex-wrap: wrap; gap: var(--hjm-bottom-cta-gap); }
|
|
2782
|
+
/* bottomCtaRecipe.contentMaxWidth: the surface spans the viewport, its copy and actions stop at the reading width. */
|
|
2783
|
+
.hjm-bottom-cta__description, .hjm-bottom-cta__actions { box-sizing: border-box; inline-size: 100%; max-inline-size: var(--hjm-bottom-cta-content-max-width); margin-inline: auto; }
|
|
2791
2784
|
.hjm-bottom-cta__actions > div { flex: 1 1 calc(var(--hjm-control-min-touch-target) * 3); min-inline-size: 0; }
|
|
2792
2785
|
.hjm-bottom-cta__actions .hjm-button { inline-size: 100%; block-size: 100%; }
|
|
2793
2786
|
.hjm-bottom-cta[data-large-text="true"] .hjm-bottom-cta__actions { flex-direction: column-reverse; }
|
|
@@ -2800,14 +2793,11 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2800
2793
|
.hjm-carousel__slide input { max-inline-size: 100%; }
|
|
2801
2794
|
.hjm-carousel__rotation { justify-self: start; }
|
|
2802
2795
|
.hjm-carousel__controls, .hjm-carousel__dots { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: var(--hjm-space-xs); }
|
|
2796
|
+
.hjm-carousel__controls { flex-wrap: nowrap; } .hjm-carousel__dots { flex-shrink: 1; min-inline-size: 0; }
|
|
2803
2797
|
.hjm-carousel__dot { display: grid; place-items: center; min-inline-size: var(--hjm-control-min-touch-target); min-block-size: var(--hjm-control-min-touch-target); border: 0; border-radius: var(--hjm-radius-full); background: transparent; cursor: pointer; }
|
|
2804
|
-
.hjm-carousel__dot > span { inline-size: var(--hjm-space-xs); block-size: var(--hjm-space-xs); border-radius: var(--hjm-radius-full); background: var(--hjm-color-
|
|
2798
|
+
.hjm-carousel__dot > span { inline-size: var(--hjm-space-xs); block-size: var(--hjm-space-xs); border-radius: var(--hjm-radius-full); background: var(--hjm-color-text-weak); } /* carouselRecipe.dot.color.inactive (border.strong), as Native */
|
|
2805
2799
|
.hjm-carousel__dot[data-current="true"] > span { background: var(--hjm-color-content-brand); }
|
|
2806
2800
|
.hjm-carousel__dot:focus-visible { outline: 2px solid var(--hjm-color-content-brand); outline-offset: 2px; }
|
|
2807
|
-
/* Keep previous/next paired when scaled text would wrap only one to a new row. */
|
|
2808
|
-
.hjm-carousel[data-large-text="true"] .hjm-carousel__controls { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
|
|
2809
|
-
.hjm-carousel[data-large-text="true"] .hjm-carousel__dots { grid-column: 1 / -1; grid-row: 1; }
|
|
2810
|
-
.hjm-carousel[data-large-text="true"] .hjm-carousel__controls > .hjm-button { grid-row: 2; }
|
|
2811
2801
|
|
|
2812
2802
|
/* The viewport action follows the content in DOM order. Its measured clearance
|
|
2813
2803
|
belongs on the scroll content, not on the fixed button (docs/floating-action-button.md). */
|
|
@@ -2822,7 +2812,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2822
2812
|
|
|
2823
2813
|
/* Keep the seven-column spatial model and minimum targets; narrow hosts scroll
|
|
2824
2814
|
the grid instead of shrinking dates or wrapping a week onto another row. */
|
|
2825
|
-
.hjm-calendar { display: grid; gap: var(--hjm-space-xs); min-inline-size: 0; }
|
|
2815
|
+
.hjm-calendar { display: grid; gap: var(--hjm-space-xs); min-inline-size: 0; max-inline-size: var(--hjm-calendar-max-width); }
|
|
2826
2816
|
.hjm-calendar__header { display: grid; grid-template-columns: var(--hjm-control-min-touch-target) minmax(0, 1fr) var(--hjm-control-min-touch-target); align-items: center; gap: var(--hjm-space-xs); }
|
|
2827
2817
|
.hjm-calendar__header strong { text-align: center; overflow-wrap: anywhere; font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); font-weight: var(--hjm-font-weight-bold); }
|
|
2828
2818
|
.hjm-calendar__header button { min-block-size: var(--hjm-control-min-touch-target); border: 0; border-radius: var(--hjm-radius-full); background: transparent; color: var(--hjm-color-text-body); font: inherit; cursor: pointer; }
|
|
@@ -2837,8 +2827,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2837
2827
|
.hjm-calendar__day[data-disabled] { opacity: var(--hjm-calendar-disabled-opacity); cursor: not-allowed; }
|
|
2838
2828
|
.hjm-calendar__content { max-inline-size: 100%; min-block-size: var(--hjm-type-label-line-height); font-size: var(--hjm-type-label-size); line-height: var(--hjm-type-label-line-height); overflow-wrap: anywhere; }
|
|
2839
2829
|
.hjm-calendar__header button:focus-visible, .hjm-calendar__day:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
2840
|
-
.hjm-date-picker__calendar-close { display:
|
|
2841
|
-
.hjm-date-picker__calendar-close:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
2830
|
+
.hjm-date-picker__calendar-close { display: flex; margin-inline-start: auto; }
|
|
2842
2831
|
|
|
2843
2832
|
/* Reserve a common annotation row; dates with a dot must not sit above their neighbours. */
|
|
2844
2833
|
.hjm-calendar__day-label { display: grid; place-items: center; inline-size: var(--hjm-calendar-indicator-size, var(--hjm-calendar-cell-size)); min-block-size: var(--hjm-calendar-indicator-size, var(--hjm-calendar-cell-size)); border: 1px solid transparent; border-radius: var(--hjm-radius-full); }
|
|
@@ -2879,7 +2868,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2879
2868
|
.hjm-collapsible__trigger:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: 2px; }
|
|
2880
2869
|
/* The marker is decoration: aria-expanded carries the state, so it only needs
|
|
2881
2870
|
to keep one box while the glyph changes. */
|
|
2882
|
-
.hjm-collapsible__marker { flex: 0 0 auto; inline-
|
|
2871
|
+
.hjm-collapsible__marker { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--hjm-color-text-muted); }
|
|
2883
2872
|
.hjm-collapsible__content { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
2884
2873
|
|
|
2885
2874
|
/* Both surfaces reuse the menu's floating look; only the anchor differs. */
|
|
@@ -2889,6 +2878,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2889
2878
|
.hjm-context-menu__item { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; justify-content: space-between; gap: var(--hjm-space-sm); padding: var(--hjm-space-xs) var(--hjm-space-sm); border-radius: var(--hjm-radius-sm); color: var(--hjm-color-text-body); cursor: pointer; }
|
|
2890
2879
|
/* Wrap long labels so commands stay readable inside the viewport-bounded menu; truncation was rejected because it hides command meaning. */
|
|
2891
2880
|
.hjm-context-menu__item > span { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
2881
|
+
/* Leading icon slot is 24 wide with the item gap (sm 12) before the label, as Native ContextMenu; the label takes the rest so a trailing shortcut stays at the end. */
|
|
2882
|
+
.hjm-context-menu__icon { flex: 0 0 24px; display: inline-flex; align-items: center; justify-content: center; }
|
|
2883
|
+
.hjm-context-menu__label { flex: 1 1 auto; }
|
|
2892
2884
|
.hjm-context-menu__item[data-active] { background: var(--hjm-color-bg); box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); }
|
|
2893
2885
|
.hjm-context-menu__item[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
2894
2886
|
.hjm-context-menu__item[aria-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
|
|
@@ -2912,13 +2904,20 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2912
2904
|
.hjm-asset__frame { inline-size: var(--hjm-asset-size); block-size: var(--hjm-asset-size); display: grid; place-items: center; overflow: hidden; border: var(--hjm-stroke-default) solid var(--hjm-color-border); border-radius: var(--hjm-asset-radius); background: var(--hjm-color-bg); }
|
|
2913
2905
|
.hjm-asset__media { inline-size: 100%; block-size: 100%; display: grid; place-items: center; }
|
|
2914
2906
|
.hjm-asset__media > * { max-inline-size: 100%; max-block-size: 100%; }
|
|
2915
|
-
/* The accessory hangs off the outer corner
|
|
2916
|
-
|
|
2907
|
+
/* The accessory hangs off the outer end/bottom corner, assetRecipe.accessory.offset outside, as Native and the usage
|
|
2908
|
+
guide; a physical translate(25%) moved it into the frame in RTL (2026-10-17 review E22). */
|
|
2909
|
+
.hjm-asset__accessory { position: absolute; inset-block-end: calc(-1 * var(--hjm-asset-accessory-offset)); inset-inline-end: calc(-1 * var(--hjm-asset-accessory-offset)); display: inline-flex; }
|
|
2917
2910
|
.hjm-asset-group { display: inline-flex; align-items: center; }
|
|
2918
2911
|
.hjm-asset-group > .hjm-asset + .hjm-asset { margin-inline-start: var(--hjm-asset-overlap); }
|
|
2919
2912
|
|
|
2920
2913
|
/* Bloom owns geometry only; HJM owns target size, theme and keyboard focus. */
|
|
2921
2914
|
.hjm-menu-morph { position: relative; z-index: 1; }
|
|
2915
|
+
/* Closed, the morph surface is the HJM secondary button (same frame as the reduced-motion/RTL Menu trigger).
|
|
2916
|
+
Bloom animates box-shadow inline for both states, so the closed state needs !important to drop it. */
|
|
2917
|
+
.hjm-menu-morph__measure { position: absolute; visibility: hidden; pointer-events: none; inset-block-start: 0; inset-inline-start: 0; }
|
|
2918
|
+
.hjm-menu-morph__surface { color: var(--hjm-color-text); background: var(--hjm-color-bg); border: 1px solid var(--hjm-color-border-control); }
|
|
2919
|
+
.hjm-menu-morph[data-open="false"] .hjm-menu-morph__surface { box-shadow: none !important; }
|
|
2920
|
+
.hjm-menu-morph__trigger { gap: var(--hjm-space-xs); padding-inline: var(--hjm-space-md); font-family: var(--hjm-font-family-ui, inherit); font-size: var(--hjm-type-body-size); font-weight: var(--hjm-font-weight-semibold); line-height: var(--hjm-type-body-line-height); }
|
|
2922
2921
|
.hjm-menu-morph [role="button"]:focus-visible, .hjm-menu-morph__item:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: -2px; }
|
|
2923
2922
|
.hjm-menu-morph__item { display: flex; width: 100%; align-items: center; gap: var(--hjm-space-sm); min-height: var(--hjm-control-min-touch-target); padding: var(--hjm-space-sm); border: 0; background: transparent; color: inherit; font: inherit; text-align: start; cursor: pointer; }
|
|
2924
2923
|
.hjm-menu-morph__item:hover, .hjm-menu-morph__item:focus { background: var(--hjm-color-bg); }
|
|
@@ -3028,6 +3027,11 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3028
3027
|
.hjm-screen__heading > * { margin: 0; }
|
|
3029
3028
|
.hjm-screen__notice { padding-inline: var(--hjm-screen-padding); flex: 0 0 auto; }
|
|
3030
3029
|
.hjm-screen__body { flex: 1 1 0%; min-block-size: 0; min-inline-size: 0; padding: var(--hjm-screen-padding); overflow-wrap: anywhere; }
|
|
3030
|
+
/* contentInset="body-edge": header, notice and footer keep the gutter; full-width list rows own their inline inset
|
|
3031
|
+
(review S5#9: body 16 + row 16 put DM avatars ~32 from the edge). "none" keeps its host-owns-all meaning. */
|
|
3032
|
+
.hjm-screen[data-content-inset="body-edge"] > .hjm-screen__body { padding-inline: 0; }
|
|
3033
|
+
/* contentInset="none" hands every inset to the host: no footer rule, as on Native (BottomCTA then draws its own bar). */
|
|
3034
|
+
.hjm-screen[data-content-inset="none"] > .hjm-screen__footer { border-block-start: 0; }
|
|
3031
3035
|
.hjm-screen__body[data-scroll="screen"] { overflow-y: auto; }
|
|
3032
3036
|
.hjm-screen__body[data-scroll="content"] { display: flex; flex-direction: column; overflow: hidden; }
|
|
3033
3037
|
.hjm-screen__body[data-content-alignment="center"] { display: flex; flex-direction: column; }
|
|
@@ -3056,20 +3060,103 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3056
3060
|
.hjm-message-composer__row { display: flex; gap: var(--hjm-message-composer-gap, var(--hjm-space-sm)); align-items: flex-end; }
|
|
3057
3061
|
.hjm-message-composer__row > .hjm-field { flex: 1; min-inline-size: 0; }
|
|
3058
3062
|
.hjm-message-composer__row > .hjm-button { flex-shrink: 0; }
|
|
3059
|
-
|
|
3063
|
+
/* 2026-10-16 timeline standard (measured KakaoTalk iOS chat room, chatMessageRecipe): filled borderless
|
|
3064
|
+
bubbles, one avatar/author/tip per run, time beside the run's last bubble. */
|
|
3065
|
+
.hjm-chat-message { display: flex; align-items: flex-start; gap: 8px; }
|
|
3060
3066
|
.hjm-chat-message[data-direction="outgoing"] { flex-direction: row-reverse; }
|
|
3067
|
+
.hjm-chat-message__avatar { flex: 0 0 var(--hjm-chat-avatar-size); inline-size: var(--hjm-chat-avatar-size); display: flex; justify-content: center; }
|
|
3061
3068
|
/* A visible opposite edge distinguishes authorship even without color; long copy still wraps. */
|
|
3062
3069
|
.hjm-chat-message__content { max-inline-size: var(--hjm-message-max-width); min-inline-size: 0; display: flex; flex-direction: column; align-items: flex-start; gap: var(--hjm-space-xxs); }
|
|
3063
3070
|
.hjm-chat-message[data-direction="outgoing"] .hjm-chat-message__content { align-items: flex-end; }
|
|
3064
|
-
.hjm-chat-
|
|
3071
|
+
.hjm-chat-message__body { display: flex; align-items: flex-end; gap: var(--hjm-space-xxs); max-inline-size: 100%; min-inline-size: 0; }
|
|
3072
|
+
/* Wrapped bubbles (reaction trigger anchors) must shrink so the time stays beside them. */
|
|
3073
|
+
.hjm-chat-message__body > :not(.hjm-chat-message__meta) { flex: 0 1 auto; min-inline-size: 0; }
|
|
3074
|
+
.hjm-chat-message[data-direction="outgoing"] .hjm-chat-message__body { flex-direction: row-reverse; }
|
|
3075
|
+
.hjm-chat-message__bubble { border-radius: 14px; background: var(--hjm-color-surface); padding: 6px 10px; min-inline-size: 0; overflow-wrap: anywhere; white-space: pre-wrap; }
|
|
3065
3076
|
.hjm-chat-message[data-direction="outgoing"] .hjm-chat-message__bubble { background: var(--hjm-color-surface-accent); }
|
|
3066
|
-
/*
|
|
3067
|
-
.hjm-chat-message[data-tail] .hjm-chat-message__bubble { position: relative; }
|
|
3068
|
-
.hjm-chat-message[data-tail] .hjm-chat-message__bubble::before { content: ""; position: absolute;
|
|
3069
|
-
.hjm-chat-message[data-tail][data-direction="outgoing"] .hjm-chat-message__bubble
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
.hjm-chat-
|
|
3077
|
+
/* A flat-topped tip in the bubble surface continues the run's first top edge; that corner tightens to meet it. */
|
|
3078
|
+
.hjm-chat-message[data-tail] .hjm-chat-message__bubble { position: relative; border-start-start-radius: 4px; }
|
|
3079
|
+
.hjm-chat-message[data-tail] .hjm-chat-message__bubble::before { content: ""; position: absolute; top: 0; inset-inline-start: -6px; width: 7px; height: 10px; background: var(--hjm-color-surface); clip-path: polygon(0 0, 100% 0, 100% 100%); pointer-events: none; }
|
|
3080
|
+
.hjm-chat-message[data-tail][data-direction="outgoing"] .hjm-chat-message__bubble { border-start-start-radius: 14px; border-start-end-radius: 4px; }
|
|
3081
|
+
.hjm-chat-message[data-tail][data-direction="outgoing"] .hjm-chat-message__bubble::before { inset-inline-start: auto; inset-inline-end: -6px; background: var(--hjm-color-surface-accent); clip-path: polygon(0 0, 100% 0, 0 100%); }
|
|
3082
|
+
/* clip-path is physical; mirror the tip for right-to-left layouts. */
|
|
3083
|
+
[dir="rtl"] .hjm-chat-message[data-tail] .hjm-chat-message__bubble::before { transform: scaleX(-1); }
|
|
3084
|
+
|
|
3085
|
+
.hjm-chat-message__meta { display: flex; flex-shrink: 0; align-items: center; gap: var(--hjm-space-xs); }
|
|
3086
|
+
/* A quoted reply heads the bubble and is divided from the answer. */
|
|
3087
|
+
.hjm-chat-message__reply { border-block-end: 1px solid var(--hjm-color-border); padding-block-end: var(--hjm-space-xs); margin-block-end: var(--hjm-space-xs); display: flex; flex-direction: column; gap: 2px; min-inline-size: 0; }
|
|
3088
|
+
.hjm-chat-message__quote { inline-size: 100%; border-inline: 0; border-block-start: 0; background: none; padding-inline: 0; padding-block-start: 0; color: inherit; font: inherit; text-align: start; cursor: pointer; }
|
|
3089
|
+
.hjm-chat-message__quote:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: 2px; border-radius: var(--hjm-radius-sm); }
|
|
3090
|
+
.hjm-chat-message__quote-excerpt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3091
|
+
.hjm-chat-message__media { display: grid; border-radius: 14px; overflow: hidden; max-inline-size: 100%; }
|
|
3092
|
+
.hjm-chat-message__media-item { display: block; overflow: hidden; padding: 0; border: 0; background: var(--hjm-color-surface-alt); }
|
|
3093
|
+
.hjm-chat-message__media-item > img { display: block; inline-size: 100%; block-size: 100%; object-fit: cover; }
|
|
3094
|
+
button.hjm-chat-message__media-item { cursor: pointer; }
|
|
3095
|
+
button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: -2px; }
|
|
3096
|
+
.hjm-chat-message__bubble[data-photo-only] { background: none; padding: 0; }
|
|
3097
|
+
.hjm-chat-message__bubble[data-photo-only]::before { display: none; }
|
|
3098
|
+
/* Only the shared default gutter narrows to the timeline gutter; "none" and "body-edge" keep their own meaning. */
|
|
3099
|
+
.hjm-chat-screen[data-content-inset="default"] .hjm-screen__body { padding-inline: 10px; }
|
|
3100
|
+
.hjm-chat-screen__footer { position: relative; }
|
|
3101
|
+
/* ImageChoiceGroup (2026-10-16): square tiles, brand ring + check when chosen. */
|
|
3102
|
+
/* Screen exit (2026-10-17): back chevron follows reading direction. */
|
|
3103
|
+
.hjm-screen__exit-glyph[data-kind="back"]:dir(rtl) { transform: scaleX(-1); }
|
|
3104
|
+
|
|
3105
|
+
.hjm-image-choice { display: flex; flex-direction: column; gap: var(--hjm-space-xs); }
|
|
3106
|
+
.hjm-image-choice__label { font-weight: 600; }
|
|
3107
|
+
.hjm-image-choice__tiles { display: flex; flex-wrap: wrap; gap: var(--hjm-image-choice-gap); }
|
|
3108
|
+
.hjm-image-choice__tile { position: relative; inline-size: calc(var(--hjm-image-choice-size) + (var(--hjm-image-choice-ring) + var(--hjm-image-choice-offset)) * 2); aspect-ratio: 1; padding: var(--hjm-image-choice-offset); border: var(--hjm-image-choice-ring) solid transparent; border-radius: calc(var(--hjm-image-choice-radius) + var(--hjm-image-choice-ring) + var(--hjm-image-choice-offset)); background: none; cursor: pointer; }
|
|
3109
|
+
.hjm-image-choice__tile[data-selected] { border-color: var(--hjm-color-content-brand); }
|
|
3110
|
+
.hjm-image-choice__tile:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: 2px; }
|
|
3111
|
+
.hjm-image-choice__tile:disabled { opacity: 0.5; cursor: default; }
|
|
3112
|
+
.hjm-image-choice__image { display: block; inline-size: 100%; block-size: 100%; overflow: hidden; border-radius: var(--hjm-image-choice-radius); background: var(--hjm-color-surface); }
|
|
3113
|
+
.hjm-image-choice__image > img { inline-size: 100%; block-size: 100%; object-fit: cover; display: block; }
|
|
3114
|
+
.hjm-image-choice__check { position: absolute; inset-block-start: 0; inset-inline-end: 0; inline-size: var(--hjm-image-choice-check); block-size: var(--hjm-image-choice-check); border-radius: 50%; background: var(--hjm-color-content-brand); color: var(--hjm-color-on-primary); font-size: 12px; line-height: var(--hjm-image-choice-check); text-align: center; }
|
|
3115
|
+
.hjm-message-composer__leading { flex: 0 0 auto; align-self: center; display: inline-flex; }
|
|
3116
|
+
.hjm-message-composer__quick { display: flex; justify-content: space-between; gap: var(--hjm-space-xs); }
|
|
3117
|
+
/* Items share the composer width (max 44px) so eight emoji fit beside a host avatar. */
|
|
3118
|
+
.hjm-message-composer__quick-item { flex: 1 1 0; min-inline-size: 0; max-inline-size: var(--hjm-quick-size); block-size: var(--hjm-quick-size); border: 0; border-radius: 50%; background: none; font-size: var(--hjm-quick-emoji); line-height: 1; cursor: pointer; }
|
|
3119
|
+
.hjm-message-composer__quick-item:hover:not(:disabled) { background: var(--hjm-color-surface); }
|
|
3120
|
+
.hjm-message-composer__quick-item:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: 2px; }
|
|
3121
|
+
.hjm-message-composer__quick-item:disabled { opacity: 0.5; cursor: default; }
|
|
3122
|
+
.hjm-message-composer__trailing { display: inline-grid; place-items: center; }
|
|
3123
|
+
.hjm-message-composer__trailing > * { grid-area: 1 / 1; }
|
|
3124
|
+
|
|
3125
|
+
.hjm-message-composer__reply-card { display: flex; flex-direction: column; gap: var(--hjm-space-sm); }
|
|
3126
|
+
.hjm-message-composer__reply-card[data-replying] { padding: var(--hjm-space-sm); border-radius: var(--hjm-radius-xl); background: var(--hjm-color-surface); }
|
|
3127
|
+
.hjm-message-composer__reply { display: flex; align-items: flex-start; gap: var(--hjm-space-sm); }
|
|
3128
|
+
.hjm-message-composer__reply-text { flex: 1; min-inline-size: 0; display: flex; flex-direction: column; gap: 2px; }
|
|
3129
|
+
.hjm-message-composer__reply-excerpt { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
3130
|
+
/* Hold menu below the reaction strip: time header, then reply → product actions → report (danger). */
|
|
3131
|
+
.hjm-message-menu { display: flex; flex-direction: column; padding-block: var(--hjm-space-xs); }
|
|
3132
|
+
.hjm-message-menu__title { padding: var(--hjm-space-xs) var(--hjm-space-md); }
|
|
3133
|
+
.hjm-message-menu__item { min-block-size: 44px; display: flex; align-items: center; gap: var(--hjm-space-sm); padding-inline: var(--hjm-space-md); border: 0; background: none; color: var(--hjm-color-text); font: inherit; text-align: start; cursor: pointer; border-radius: var(--hjm-radius-sm); }
|
|
3134
|
+
.hjm-message-menu__item:hover:not(:disabled) { background: var(--hjm-color-surface); }
|
|
3135
|
+
.hjm-message-menu__item:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: -2px; }
|
|
3136
|
+
.hjm-message-menu__item:disabled { opacity: 0.5; cursor: default; }
|
|
3137
|
+
.hjm-message-menu__item[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
3138
|
+
.hjm-message-menu__icon { inline-size: 24px; display: inline-flex; justify-content: center; }
|
|
3139
|
+
.hjm-message-menu__label { flex: 1; min-inline-size: 0; }
|
|
3140
|
+
.hjm-message-menu__chevron { color: var(--hjm-color-text-muted); }
|
|
3141
|
+
/* Measured DM hold menu (holdMenuRecipe): touch rows 56, emoji 28 in 48 targets, card radius 18 when actions exist. */
|
|
3142
|
+
@media (pointer: coarse) { .hjm-message-menu__item { min-block-size: 56px; } }
|
|
3143
|
+
.hjm-message-reactions .hjm-reaction-picker__glyph { font-size: 28px; line-height: 1; }
|
|
3144
|
+
.hjm-message-reactions .hjm-reaction-picker__options > .hjm-button { min-inline-size: 48px; min-block-size: 48px; padding-inline: 0; }
|
|
3145
|
+
.hjm-message-reactions:has(.hjm-message-menu) { border-radius: 18px; inline-size: max(200px, max-content); }
|
|
3146
|
+
/* 2026-10-16 comment standard (measured Instagram iOS comment sheet, commentThreadRecipe). */
|
|
3147
|
+
.hjm-comment-thread { display: flex; flex-direction: column; }
|
|
3148
|
+
.hjm-comment-row__avatar { flex: 0 0 auto; display: flex; justify-content: center; }
|
|
3149
|
+
.hjm-comment-row__text { flex: 1; min-inline-size: 0; display: flex; flex-direction: column; }
|
|
3150
|
+
.hjm-comment-row__reactions { display: flex; flex-direction: column; gap: 2px; border-radius: var(--hjm-radius-sm); -webkit-touch-callout: none; }
|
|
3151
|
+
.hjm-comment-row__reactions:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: 2px; }
|
|
3152
|
+
.hjm-comment-row__media { align-self: flex-start; overflow: hidden; margin-block-start: 4px; }
|
|
3153
|
+
.hjm-comment-row__media > img { display: block; inline-size: 100%; block-size: auto; }
|
|
3154
|
+
.hjm-comment-row__like { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-start; }
|
|
3155
|
+
.hjm-comment-row__like-count { text-align: center; }
|
|
3156
|
+
.hjm-comment-row__action { align-self: flex-start; padding: 0; border: 0; background: none; color: var(--hjm-color-text-muted); font: inherit; font-size: var(--hjm-type-caption-size); line-height: var(--hjm-type-caption-line-height); font-weight: 600; cursor: pointer; }
|
|
3157
|
+
.hjm-comment-row__action:disabled { opacity: 0.5; cursor: default; }
|
|
3158
|
+
.hjm-comment-row__action:focus-visible { outline: 2px solid var(--hjm-color-focus, currentColor); outline-offset: 2px; border-radius: var(--hjm-radius-sm); }
|
|
3159
|
+
.hjm-chat-screen__jump { position: absolute; inset-block-end: calc(100% + var(--hjm-space-xs) + var(--hjm-screen-padding)); inset-inline-end: 0; }
|
|
3073
3160
|
|
|
3074
3161
|
/* A composer starts at one control row rather than the document editor minimum;
|
|
3075
3162
|
content sizing grows up to the shared line cap without stealing the timeline. */
|
|
@@ -3111,6 +3198,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3111
3198
|
/* Only the chat strip enlarges glyphs, to the title type step Native's strip uses. The default
|
|
3112
3199
|
wrap layout keeps the button's own size, as published before the strip existed. */
|
|
3113
3200
|
.hjm-reaction-picker[data-layout="strip"] .hjm-reaction-picker__glyph { font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); }
|
|
3201
|
+
/* Wrap reactions reuse the chip frame (chipRecipe). Emoji ignore the brand content color, so the chosen reaction
|
|
3202
|
+
also takes the accent fill that Native's strip and wrap items use. */
|
|
3203
|
+
.hjm-reaction-picker__chip[data-selected] { background: var(--hjm-color-surface-accent); }
|
|
3114
3204
|
|
|
3115
3205
|
/* The embedded circle uses the small 36px recipe; centre it in the field rather than on the text baseline.
|
|
3116
3206
|
Reduce only its trailing inset to 8px, preserving the text's 16px leading padding. */
|
|
@@ -3190,4 +3280,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3190
3280
|
.hjm-segmented[data-presentation="text"][data-text-emphasis="regular"] .hjm-segmented__item { font-weight:400; }
|
|
3191
3281
|
.hjm-segmented[data-presentation="text"][data-text-emphasis="regular"] .hjm-segmented__item[data-state="checked"] { font-weight:600; }
|
|
3192
3282
|
|
|
3283
|
+
/* Long read-only records need a stable label column across wrapped values. */
|
|
3284
|
+
.hjm-description-list[data-layout="inline"] { gap: 0; }
|
|
3285
|
+
.hjm-description-list[data-layout="inline"] .hjm-description-list__item { grid-template-columns: 24% minmax(0, 1fr); gap: var(--hjm-space-sm); padding-block: var(--hjm-space-sm); }
|
|
3286
|
+
.hjm-description-list[data-layout="inline"] .hjm-description-list__item + .hjm-description-list__item { border-block-start: 1px solid var(--hjm-color-border); }
|
|
3287
|
+
|
|
3193
3288
|
}
|