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