@icen.ai/ui 0.10.0 → 0.11.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/AGENTS.md +79 -309
- package/LICENSE +21 -0
- package/README.md +43 -54
- package/dist/base.css +68 -22
- package/dist/behaviors/accordion.mjs +1 -1
- package/dist/behaviors/ai-branch.mjs +14 -0
- package/dist/behaviors/ai-chat.d.mts +2 -2
- package/dist/behaviors/ai-chat.mjs +66 -10
- package/dist/behaviors/ai-composer.d.mts +5 -5
- package/dist/behaviors/ai-composer.mjs +34 -10
- package/dist/behaviors/ai-core.mjs +14 -0
- package/dist/behaviors/ai-diff.mjs +14 -0
- package/dist/behaviors/ai-feedback.mjs +14 -0
- package/dist/behaviors/ai-panel.d.mts +2 -2
- package/dist/behaviors/ai-panel.mjs +14 -0
- package/dist/behaviors/ai-provider.d.mts +1 -1
- package/dist/behaviors/ai-provider.mjs +14 -0
- package/dist/behaviors/ai-threads.mjs +14 -0
- package/dist/behaviors/ai-tool.d.mts +1 -1
- package/dist/behaviors/ai-tool.mjs +299 -24
- package/dist/behaviors/ai-tools.mjs +1179 -28
- package/dist/behaviors/autocomplete.d.mts +1 -1
- package/dist/behaviors/autocomplete.mjs +14 -0
- package/dist/behaviors/back-top.mjs +14 -0
- package/dist/behaviors/carousel.mjs +21 -1
- package/dist/behaviors/cascader.mjs +27 -0
- package/dist/behaviors/charts.d.mts +12 -1
- package/dist/behaviors/charts.mjs +298 -20
- package/dist/behaviors/code-block.mjs +22 -1
- package/dist/behaviors/command-palette.mjs +3 -3
- package/dist/behaviors/context-menu.d.mts +2 -2
- package/dist/behaviors/context-menu.mjs +14 -0
- package/dist/behaviors/controls.d.mts +8 -8
- package/dist/behaviors/controls.mjs +50 -6
- package/dist/behaviors/copy.mjs +14 -0
- package/dist/behaviors/datatable.d.mts +3 -3
- package/dist/behaviors/datatable.mjs +89 -11
- package/dist/behaviors/date-picker.mjs +14 -0
- package/dist/behaviors/events.d.mts +10 -10
- package/dist/behaviors/events.mjs +11 -1
- package/dist/behaviors/form-validate.d.mts +10 -1
- package/dist/behaviors/form-validate.mjs +279 -4611
- package/dist/behaviors/i18n.d.mts +14 -0
- package/dist/behaviors/i18n.mjs +28 -0
- package/dist/behaviors/input.mjs +16 -0
- package/dist/behaviors/kb-access.d.mts +2 -2
- package/dist/behaviors/kb-access.mjs +21 -2
- package/dist/behaviors/kb-acl.d.mts +2 -2
- package/dist/behaviors/kb-acl.mjs +14 -0
- package/dist/behaviors/kb-answer.d.mts +2 -2
- package/dist/behaviors/kb-answer.mjs +298 -23
- package/dist/behaviors/kb-audit.d.mts +2 -2
- package/dist/behaviors/kb-audit.mjs +14 -0
- package/dist/behaviors/kb-canvas.d.mts +3 -3
- package/dist/behaviors/kb-canvas.mjs +14 -0
- package/dist/behaviors/kb-chain.d.mts +2 -2
- package/dist/behaviors/kb-chain.mjs +14 -0
- package/dist/behaviors/kb-checkpoint.d.mts +2 -2
- package/dist/behaviors/kb-checkpoint.mjs +14 -0
- package/dist/behaviors/kb-chunks.d.mts +2 -2
- package/dist/behaviors/kb-chunks.mjs +14 -0
- package/dist/behaviors/kb-citation.d.mts +2 -2
- package/dist/behaviors/kb-citation.mjs +33 -6
- package/dist/behaviors/kb-clarify.d.mts +2 -2
- package/dist/behaviors/kb-clarify.mjs +14 -0
- package/dist/behaviors/kb-conflict.d.mts +2 -2
- package/dist/behaviors/kb-conflict.mjs +14 -0
- package/dist/behaviors/kb-connector.d.mts +2 -2
- package/dist/behaviors/kb-connector.mjs +14 -0
- package/dist/behaviors/kb-core.d.mts +1 -1
- package/dist/behaviors/kb-core.mjs +14 -0
- package/dist/behaviors/kb-eval.d.mts +2 -2
- package/dist/behaviors/kb-eval.mjs +21 -2
- package/dist/behaviors/kb-explain.d.mts +2 -2
- package/dist/behaviors/kb-explain.mjs +26 -2
- package/dist/behaviors/kb-filter.d.mts +2 -2
- package/dist/behaviors/kb-filter.mjs +21 -2
- package/dist/behaviors/kb-gap.d.mts +2 -2
- package/dist/behaviors/kb-gap.mjs +14 -0
- package/dist/behaviors/kb-hittest.d.mts +2 -2
- package/dist/behaviors/kb-hittest.mjs +15 -1
- package/dist/behaviors/kb-metadata.mjs +19 -0
- package/dist/behaviors/kb-passage.d.mts +2 -2
- package/dist/behaviors/kb-passage.mjs +14 -0
- package/dist/behaviors/kb-pipeline.d.mts +2 -2
- package/dist/behaviors/kb-pipeline.mjs +14 -0
- package/dist/behaviors/kb-qa.mjs +14 -0
- package/dist/behaviors/kb-rerank.d.mts +2 -2
- package/dist/behaviors/kb-rerank.mjs +14 -0
- package/dist/behaviors/kb-retrieval.d.mts +2 -2
- package/dist/behaviors/kb-retrieval.mjs +31 -4
- package/dist/behaviors/kb-review.d.mts +2 -2
- package/dist/behaviors/kb-review.mjs +21 -2
- package/dist/behaviors/kb-sandbox.d.mts +2 -2
- package/dist/behaviors/kb-sandbox.mjs +20 -1
- package/dist/behaviors/kb-segment.d.mts +2 -2
- package/dist/behaviors/kb-segment.mjs +15 -1
- package/dist/behaviors/kb-select.mjs +21 -2
- package/dist/behaviors/kb-sources.d.mts +2 -2
- package/dist/behaviors/kb-sources.mjs +14 -0
- package/dist/behaviors/kb-sql.d.mts +2 -2
- package/dist/behaviors/kb-sql.mjs +14 -0
- package/dist/behaviors/kb-trace.d.mts +2 -2
- package/dist/behaviors/kb-trace.mjs +22 -3
- package/dist/behaviors/kb-visibility.d.mts +2 -2
- package/dist/behaviors/kb-visibility.mjs +14 -0
- package/dist/behaviors/kb-who-can.d.mts +2 -2
- package/dist/behaviors/kb-who-can.mjs +21 -2
- package/dist/behaviors/mentions.d.mts +1 -1
- package/dist/behaviors/mentions.mjs +14 -0
- package/dist/behaviors/modal.d.mts +1 -1
- package/dist/behaviors/modal.mjs +14 -0
- package/dist/behaviors/motion.d.mts +16 -0
- package/dist/behaviors/motion.mjs +39 -0
- package/dist/behaviors/notification.d.mts +2 -2
- package/dist/behaviors/notification.mjs +27 -3
- package/dist/behaviors/panel.mjs +14 -0
- package/dist/behaviors/scroll-area.d.mts +17 -0
- package/dist/behaviors/scroll-area.mjs +59 -0
- package/dist/behaviors/select.mjs +21 -2
- package/dist/behaviors/slider.mjs +3 -3
- package/dist/behaviors/split-pane.mjs +2 -0
- package/dist/behaviors/suggestions.mjs +14 -0
- package/dist/behaviors/tabs.mjs +10 -0
- package/dist/behaviors/tag-input.mjs +14 -0
- package/dist/behaviors/theme-switcher.d.mts +2 -2
- package/dist/behaviors/theme-switcher.mjs +30 -2
- package/dist/behaviors/theme.mjs +16 -2
- package/dist/behaviors/toast.d.mts +2 -2
- package/dist/behaviors/toast.mjs +14 -0
- package/dist/behaviors/tree-select.mjs +27 -0
- package/dist/behaviors/tree.mjs +4 -4
- package/dist/behaviors/upload.mjs +14 -0
- package/dist/behaviors/url-safety.d.mts +8 -0
- package/dist/behaviors/url-safety.mjs +11 -0
- package/dist/components/accordion.d.mts +2 -0
- package/dist/components/ai-branch.d.mts +2 -0
- package/dist/components/ai-chat.css +40 -33
- package/dist/components/ai-chat.d.mts +2 -0
- package/dist/components/ai-composer.d.mts +2 -0
- package/dist/components/ai-context.d.mts +2 -0
- package/dist/components/ai-context.mjs +1 -0
- package/dist/components/ai-diff.css +6 -6
- package/dist/components/ai-diff.d.mts +2 -0
- package/dist/components/ai-feedback.d.mts +2 -0
- package/dist/components/ai-files.d.mts +2 -0
- package/dist/components/ai-message.d.mts +2 -0
- package/dist/components/ai-panel.css +12 -10
- package/dist/components/ai-reasoning.d.mts +2 -0
- package/dist/components/ai-subagent.d.mts +2 -0
- package/dist/components/ai-subagent.mjs +1 -0
- package/dist/components/ai-threads.d.mts +2 -0
- package/dist/components/ai-todo.d.mts +2 -0
- package/dist/components/ai-todo.mjs +1 -0
- package/dist/components/ai-tool-call.d.mts +2 -0
- package/dist/components/ai-tool-call.mjs +1 -0
- package/dist/components/ai-tool.css +16 -16
- package/dist/components/ai-usage.d.mts +2 -0
- package/dist/components/alert.d.mts +2 -0
- package/dist/components/autocomplete.css +12 -12
- package/dist/components/autocomplete.d.mts +2 -0
- package/dist/components/avatar.d.mts +2 -0
- package/dist/components/back-top.css +47 -16
- package/dist/components/back-top.d.mts +2 -0
- package/dist/components/badge.css +1 -1
- package/dist/components/badge.d.mts +2 -0
- package/dist/components/breadcrumb.css +26 -8
- package/dist/components/breadcrumb.d.mts +2 -0
- package/dist/components/btn.css +67 -62
- package/dist/components/btn.d.mts +2 -0
- package/dist/components/card.css +22 -22
- package/dist/components/card.d.mts +2 -0
- package/dist/components/carousel.d.mts +2 -0
- package/dist/components/cascader.css +56 -35
- package/dist/components/cascader.d.mts +2 -0
- package/dist/components/chart-area.css +46 -0
- package/dist/components/chart-area.d.mts +2 -0
- package/dist/components/chart-bar.css +66 -19
- package/dist/components/chart-bar.d.mts +2 -0
- package/dist/components/chart-calendar.d.mts +2 -0
- package/dist/components/chart-gauge.css +23 -3
- package/dist/components/chart-gauge.d.mts +2 -0
- package/dist/components/chart-graph.css +15 -3
- package/dist/components/chart-graph.d.mts +2 -0
- package/dist/components/chart-heatmap.css +117 -95
- package/dist/components/chart-heatmap.d.mts +2 -0
- package/dist/components/chart-line.css +54 -0
- package/dist/components/chart-line.d.mts +2 -0
- package/dist/components/chart-map.d.mts +2 -0
- package/dist/components/chart-pie.css +29 -0
- package/dist/components/chart-pie.d.mts +2 -0
- package/dist/components/chart-radar.css +50 -1
- package/dist/components/chart-radar.d.mts +2 -0
- package/dist/components/chart-scatter.css +39 -2
- package/dist/components/chart-scatter.d.mts +2 -0
- package/dist/components/chart-sparkline.css +20 -0
- package/dist/components/chart-sparkline.d.mts +2 -0
- package/dist/components/chart-stack.css +16 -5
- package/dist/components/chart-stack.d.mts +2 -0
- package/dist/components/charts.css +109 -35
- package/dist/components/charts.d.mts +2 -0
- package/dist/components/code-block.css +10 -8
- package/dist/components/code-block.d.mts +2 -0
- package/dist/components/command-palette.css +45 -38
- package/dist/components/command-palette.d.mts +2 -0
- package/dist/components/content.css +62 -57
- package/dist/components/context-menu.d.mts +2 -0
- package/dist/components/copy.css +10 -10
- package/dist/components/copy.d.mts +2 -0
- package/dist/components/datatable.css +72 -59
- package/dist/components/datatable.d.mts +2 -0
- package/dist/components/date-picker.css +26 -26
- package/dist/components/date-picker.d.mts +2 -0
- package/dist/components/desc.d.mts +2 -0
- package/dist/components/dropdown.d.mts +2 -0
- package/dist/components/empty.css +16 -16
- package/dist/components/empty.d.mts +2 -0
- package/dist/components/feedback.css +31 -29
- package/dist/components/form-validate.css +20 -6
- package/dist/components/form-validate.d.mts +2 -0
- package/dist/components/form.css +17 -14
- package/dist/components/form.d.mts +2 -0
- package/dist/components/icon.css +21 -10
- package/dist/components/icon.d.mts +2 -0
- package/dist/components/input.css +22 -22
- package/dist/components/input.d.mts +2 -0
- package/dist/components/kb-access.d.mts +2 -0
- package/dist/components/kb-acl.d.mts +2 -0
- package/dist/components/kb-agent.css +134 -55
- package/dist/components/kb-answer.d.mts +2 -0
- package/dist/components/kb-audit.d.mts +2 -0
- package/dist/components/kb-canvas.d.mts +2 -0
- package/dist/components/kb-chain.d.mts +2 -0
- package/dist/components/kb-checkpoint.d.mts +2 -0
- package/dist/components/kb-chunks.d.mts +2 -0
- package/dist/components/kb-citation.d.mts +2 -0
- package/dist/components/kb-clarify.d.mts +2 -0
- package/dist/components/kb-conflict.d.mts +2 -0
- package/dist/components/kb-connector.d.mts +2 -0
- package/dist/components/kb-data.css +192 -80
- package/dist/components/kb-eval.d.mts +2 -0
- package/dist/components/kb-explain.d.mts +2 -0
- package/dist/components/kb-filter.d.mts +2 -0
- package/dist/components/kb-gap.d.mts +2 -0
- package/dist/components/kb-ground.css +165 -73
- package/dist/components/kb-hittest.d.mts +2 -0
- package/dist/components/kb-ingest.css +308 -113
- package/dist/components/kb-metadata.d.mts +2 -0
- package/dist/components/kb-ops.css +189 -75
- package/dist/components/kb-passage.d.mts +2 -0
- package/dist/components/kb-perm.css +158 -87
- package/dist/components/kb-pipeline.d.mts +2 -0
- package/dist/components/kb-qa.d.mts +2 -0
- package/dist/components/kb-rerank.d.mts +2 -0
- package/dist/components/kb-retrieval.d.mts +2 -0
- package/dist/components/kb-review.d.mts +2 -0
- package/dist/components/kb-sandbox.d.mts +2 -0
- package/dist/components/kb-search.css +353 -116
- package/dist/components/kb-segment.d.mts +2 -0
- package/dist/components/kb-sources.d.mts +2 -0
- package/dist/components/kb-sql.d.mts +2 -0
- package/dist/components/kb-trace.d.mts +2 -0
- package/dist/components/kb-visibility.d.mts +2 -0
- package/dist/components/kb-who-can.d.mts +2 -0
- package/dist/components/kb.css +60 -36
- package/dist/components/kb.d.mts +2 -0
- package/dist/components/kbd.d.mts +2 -0
- package/dist/components/layout.css +10 -10
- package/dist/components/layout.d.mts +2 -0
- package/dist/components/list.d.mts +2 -0
- package/dist/components/material-chinese.css +10 -0
- package/dist/components/material-soviet.css +10 -0
- package/dist/components/material.css +61 -18
- package/dist/components/media-card.d.mts +2 -0
- package/dist/components/media.css +22 -27
- package/dist/components/mentions.css +18 -17
- package/dist/components/mentions.d.mts +2 -0
- package/dist/components/menu.css +32 -28
- package/dist/components/modal.css +30 -27
- package/dist/components/modal.d.mts +2 -0
- package/dist/components/nav.css +48 -44
- package/dist/components/nav.d.mts +2 -0
- package/dist/components/notification.css +31 -25
- package/dist/components/notification.d.mts +2 -0
- package/dist/components/pagination.css +15 -13
- package/dist/components/pagination.d.mts +2 -0
- package/dist/components/panel.css +19 -20
- package/dist/components/panel.d.mts +2 -0
- package/dist/components/pill.css +8 -7
- package/dist/components/pill.d.mts +2 -0
- package/dist/components/popover.css +32 -23
- package/dist/components/popover.d.mts +2 -0
- package/dist/components/progress.d.mts +2 -0
- package/dist/components/rating.d.mts +2 -0
- package/dist/components/result.d.mts +2 -0
- package/dist/components/scroll-area.css +84 -112
- package/dist/components/scroll-area.d.mts +2 -0
- package/dist/components/scroll-area.mjs +1 -0
- package/dist/components/segmented.css +47 -29
- package/dist/components/segmented.d.mts +2 -0
- package/dist/components/select.css +80 -41
- package/dist/components/select.d.mts +2 -0
- package/dist/components/sidebar.css +42 -38
- package/dist/components/sidebar.d.mts +2 -0
- package/dist/components/skeleton.d.mts +2 -0
- package/dist/components/slider.css +26 -22
- package/dist/components/slider.d.mts +2 -0
- package/dist/components/spinner.d.mts +2 -0
- package/dist/components/split-pane.css +16 -7
- package/dist/components/split-pane.d.mts +2 -0
- package/dist/components/stat.css +17 -16
- package/dist/components/stat.d.mts +2 -0
- package/dist/components/steps.css +26 -26
- package/dist/components/steps.d.mts +2 -0
- package/dist/components/switch.css +78 -39
- package/dist/components/switch.d.mts +2 -0
- package/dist/components/table.css +54 -32
- package/dist/components/table.d.mts +2 -0
- package/dist/components/tabs.css +53 -32
- package/dist/components/tabs.d.mts +2 -0
- package/dist/components/tag-input.css +12 -8
- package/dist/components/tag-input.d.mts +2 -0
- package/dist/components/tag.css +20 -12
- package/dist/components/tag.d.mts +2 -0
- package/dist/components/theme-switcher.css +7 -7
- package/dist/components/theme-switcher.d.mts +2 -0
- package/dist/components/timeline.d.mts +2 -0
- package/dist/components/toast.css +34 -30
- package/dist/components/toast.d.mts +2 -0
- package/dist/components/toolbar.css +19 -18
- package/dist/components/toolbar.d.mts +2 -0
- package/dist/components/tooltip.css +9 -8
- package/dist/components/tooltip.d.mts +2 -0
- package/dist/components/tree-select.css +63 -40
- package/dist/components/tree-select.d.mts +2 -0
- package/dist/components/tree.d.mts +2 -0
- package/dist/components/upload.css +9 -11
- package/dist/components/upload.d.mts +2 -0
- package/dist/index.d.mts +85 -84
- package/dist/index.mjs +14644 -13935
- package/dist/react.d.mts +18 -18
- package/dist/react.mjs +377 -36
- package/dist/registry.json +797 -64
- package/dist/tokens/colors.css +6 -0
- package/dist/tokens/design.css +137 -31
- package/dist/tokens/dtcg.json +9592 -2008
- package/dist/tokens/figma.variables.json +7451 -2141
- package/dist/tokens/motion.css +51 -0
- package/dist/tokens/pixel.css +10 -0
- package/dist/tokens/scrollbars.css +40 -0
- package/dist/tokens/tokens-studio.json +8390 -1142
- package/dist/tokens/typography.css +33 -0
- package/dist/tokens.css +402 -82
- package/dist/ui.css +4196 -2163
- package/dist/vue.d.mts +17 -17
- package/dist/vue.mjs +371 -34
- package/docs/spec/charts-scale-a11y.md +115 -0
- package/docs/spec/design-philosophy.md +5 -5
- package/docs/spec/design-primitives.md +10 -10
- package/docs/spec/motion-typography.md +105 -0
- package/docs/spec/scrollbars.md +46 -0
- package/package.json +17 -3
package/dist/tokens.css
CHANGED
|
@@ -359,6 +359,12 @@
|
|
|
359
359
|
--icen-token-surface-glass: color-mix(in srgb, var(--icen-token-surface) var(--icen-design-glass-opacity), transparent);
|
|
360
360
|
--icen-token-overlay-bg: var(--icen-token-surface-glass);
|
|
361
361
|
--icen-token-scrollbar-size: 8px;
|
|
362
|
+
--icen-token-scrollbar-size-sm: 6px;
|
|
363
|
+
--icen-token-scrollbar-size-lg: 12px;
|
|
364
|
+
--icen-token-scrollbar-inset: 2px;
|
|
365
|
+
--icen-token-scrollbar-gutter: auto;
|
|
366
|
+
--icen-token-scrollbar-idle-delay: 900ms;
|
|
367
|
+
--icen-token-scrollbar-fade-duration: var(--icen-duration-normal);
|
|
362
368
|
--icen-token-scrollbar-track: transparent;
|
|
363
369
|
--icen-token-scrollbar-thumb: color-mix(in srgb, var(--icen-design-ink) 22%, transparent);
|
|
364
370
|
--icen-token-scrollbar-thumb-hover: color-mix(in srgb, var(--icen-design-ink) 38%, transparent);
|
|
@@ -394,6 +400,46 @@
|
|
|
394
400
|
}
|
|
395
401
|
|
|
396
402
|
|
|
403
|
+
/* ── tokens/scrollbars.css ── */
|
|
404
|
+
/* Policy slots inherit across a component subtree; activity never inherits.
|
|
405
|
+
Without the optional behavior, auto/scroll retain a visible fallback. */
|
|
406
|
+
:where([data-icen-scrollbars-ready]) {
|
|
407
|
+
--icen-scrollbar-auto-idle: 0%;
|
|
408
|
+
--icen-scrollbar-idle: var(--icen-scrollbar-auto-idle);
|
|
409
|
+
--icen-scrollbar-hover: var(--icen-scrollbar-auto-idle);
|
|
410
|
+
}
|
|
411
|
+
:where([data-icen-scrollbars='auto'], [data-icen-scrollbars='scroll']) {
|
|
412
|
+
--icen-scrollbar-idle: var(--icen-scrollbar-auto-idle, 100%);
|
|
413
|
+
--icen-scrollbar-hover: 100%;
|
|
414
|
+
--icen-scrollbar-active: 100%;
|
|
415
|
+
--icen-scrollbar-width: thin;
|
|
416
|
+
--icen-scrollbar-webkit-width: auto;
|
|
417
|
+
--icen-scrollbar-display: block;
|
|
418
|
+
}
|
|
419
|
+
:where([data-icen-scrollbars='scroll']) {
|
|
420
|
+
--icen-scrollbar-hover: var(--icen-scrollbar-auto-idle, 100%);
|
|
421
|
+
}
|
|
422
|
+
:where([data-icen-scrollbars='visible']) {
|
|
423
|
+
--icen-scrollbar-idle: 100%;
|
|
424
|
+
--icen-scrollbar-hover: 100%;
|
|
425
|
+
--icen-scrollbar-active: 100%;
|
|
426
|
+
--icen-scrollbar-width: thin;
|
|
427
|
+
--icen-scrollbar-webkit-width: auto;
|
|
428
|
+
--icen-scrollbar-display: block;
|
|
429
|
+
}
|
|
430
|
+
:where([data-icen-scrollbars='hidden']) {
|
|
431
|
+
--icen-scrollbar-idle: 0%;
|
|
432
|
+
--icen-scrollbar-hover: 0%;
|
|
433
|
+
--icen-scrollbar-active: 0%;
|
|
434
|
+
--icen-scrollbar-width: none;
|
|
435
|
+
--icen-scrollbar-webkit-width: none;
|
|
436
|
+
--icen-scrollbar-display: none;
|
|
437
|
+
}
|
|
438
|
+
:where([data-icen-scrollbar-gutter='stable']) { --icen-token-scrollbar-gutter: stable; }
|
|
439
|
+
:where([data-icen-scrollbar-gutter='both-edges']) { --icen-token-scrollbar-gutter: stable both-edges; }
|
|
440
|
+
:where([data-icen-scrollbar-gutter='auto']) { --icen-token-scrollbar-gutter: auto; }
|
|
441
|
+
|
|
442
|
+
|
|
397
443
|
/* ── tokens/style-profiles.css ── */
|
|
398
444
|
/* Shared fallback defaults. Built-in primitive recipes live in design/pixel/chinese/soviet.css. */
|
|
399
445
|
:root {
|
|
@@ -475,6 +521,33 @@
|
|
|
475
521
|
--icen-line-height-body: 1.7;
|
|
476
522
|
/* 独家定义(style-profiles.css 的 :root 不再重复;profile 差异化在各 .style-* 块覆盖) */
|
|
477
523
|
--icen-line-height-heading: 1.2;
|
|
524
|
+
|
|
525
|
+
/* ── 内容排版尺度(模块比例 1.250 大三度,clamp 流体插值) ──
|
|
526
|
+
面向内容/文档排版(标题、正文、长文);控件字号仍由 --icen-density-font-size-* 驱动,
|
|
527
|
+
两套尺度解耦:密度档只压缩控件,不挤压阅读。DTCG 无法表示 clamp() → 明示跳过。 */
|
|
528
|
+
--icen-type-ratio: 1.25;
|
|
529
|
+
--icen-type-xs: clamp(.6875rem, .66rem + .12vw, .75rem);
|
|
530
|
+
--icen-type-sm: clamp(.7813rem, .74rem + .18vw, .9rem);
|
|
531
|
+
--icen-type-md: clamp(.875rem, .82rem + .24vw, 1rem);
|
|
532
|
+
--icen-type-lg: clamp(1rem, .92rem + .36vw, 1.25rem);
|
|
533
|
+
--icen-type-xl: clamp(1.25rem, 1.1rem + .66vw, 1.5625rem);
|
|
534
|
+
--icen-type-2xl: clamp(1.5625rem, 1.32rem + 1.05vw, 1.9531rem);
|
|
535
|
+
--icen-type-3xl: clamp(1.9531rem, 1.56rem + 1.7vw, 2.4414rem);
|
|
536
|
+
|
|
537
|
+
/* ── 行高 / 字距 / 字重尺度(角色别名 --icen-line-height-body 等保留;本组供新组件与内容区) ── */
|
|
538
|
+
--icen-leading-tight: 1.3; /* 大字号标题 */
|
|
539
|
+
--icen-leading-base: 1.6; /* 正文:拉丁与 CJK 混排的安全下限 */
|
|
540
|
+
--icen-leading-loose: 1.8; /* 长文/文档页 */
|
|
541
|
+
--icen-tracking-tight: -.02em; /* 大号拉丁标题收紧;CJK 不用(CJK 字距一律 0) */
|
|
542
|
+
--icen-tracking-base: 0;
|
|
543
|
+
--icen-tracking-wide: .04em; /* 眉标/小型大写 */
|
|
544
|
+
--icen-weight-regular: 400;
|
|
545
|
+
--icen-weight-medium: 500;
|
|
546
|
+
--icen-weight-semibold: 600;
|
|
547
|
+
--icen-weight-bold: 700;
|
|
548
|
+
|
|
549
|
+
/* ── 数据区 OpenType 特性(.icen-numeric / .icen-font-math 之外的增量入口) ── */
|
|
550
|
+
--icen-feature-data: "tnum" 1, "lnum" 1;
|
|
478
551
|
}
|
|
479
552
|
|
|
480
553
|
/* ── 全局排版 ── */
|
|
@@ -498,66 +571,215 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
498
571
|
font-variant-numeric: lining-nums tabular-nums;
|
|
499
572
|
}
|
|
500
573
|
|
|
574
|
+
/* ── CJK 标点挤压:渐进增强(text-spacing-trim,Chrome 123+)。
|
|
575
|
+
不支持时保持浏览器默认——不 polyfill,不猜不静默,此处是有意声明的可降级增强。 ── */
|
|
576
|
+
@supports (text-spacing-trim: trim-start) {
|
|
577
|
+
body { text-spacing-trim: trim-start; }
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
/* ── tokens/motion.css ── */
|
|
582
|
+
/*
|
|
583
|
+
* @icen.ai/ui — Motion Tokens(动效令牌层)
|
|
584
|
+
* 时长阶梯 / 缓动集 / 位移与缩放幅度 / 编排间隔。组件只消费令牌,不写死时长与曲线。
|
|
585
|
+
*
|
|
586
|
+
* 消费路径:
|
|
587
|
+
* 组件读语义别名 --icen-duration-* / --icen-ease-*(design.css 映射到本层 × --icen-design-motion);
|
|
588
|
+
* 新组件可直接读 --icen-motion-*(绝对基值,不经缩放)。
|
|
589
|
+
* 降级链:prefers-reduced-motion 或 <html data-icen-motion="reduce"> → base.css 把
|
|
590
|
+
* --icen-design-motion 归零(过渡瞬时完成,状态反馈保留)+ 循环动画单次瞬时 + 平滑滚动关闭;
|
|
591
|
+
* data-icen-motion="full" 可强制恢复(演示机 / 用户显式选择)。
|
|
592
|
+
* 原语联动:pixel 原语把本层缓动全部改写为 steps(1, end)(点阵逐帧美学)。
|
|
593
|
+
* DTCG:duration / cubicBezier / dimension / number 各族经 scripts/dtcg.mjs 导出;
|
|
594
|
+
* linear() / steps() / clamp() 超经典版规范,明示跳过(记录在 dtcg.json 的 ai.icen.skipped)。
|
|
595
|
+
*/
|
|
596
|
+
:root {
|
|
597
|
+
/* ── 时长阶梯(基值;语义别名经 --icen-design-motion 缩放) ── */
|
|
598
|
+
--icen-motion-duration-instant: 0ms; /* 即时:无动画状态切换(像素原语全量) */
|
|
599
|
+
--icen-motion-duration-fast: 110ms; /* 微反馈:hover / press / 焦点环 */
|
|
600
|
+
--icen-motion-duration-base: 180ms; /* 常规:展开收起、淡入淡出、勾选 */
|
|
601
|
+
--icen-motion-duration-slow: 260ms; /* 浮层进出、面板滑入、modal */
|
|
602
|
+
--icen-motion-duration-deliberate: 420ms; /* 页面级转场、强调入场(克制使用) */
|
|
603
|
+
|
|
604
|
+
/* ── 缓动集 ── */
|
|
605
|
+
--icen-motion-ease-standard: cubic-bezier(.45, 0, .25, 1); /* 持续类状态变化 */
|
|
606
|
+
--icen-motion-ease-enter: cubic-bezier(.16, 1, .3, 1); /* 入场:快出慢归 */
|
|
607
|
+
--icen-motion-ease-exit: cubic-bezier(.4, 0, 1, 1); /* 离场:快进加速 */
|
|
608
|
+
--icen-motion-ease-emphasized: cubic-bezier(.22, .8, .24, 1); /* 强调:长减速弧 */
|
|
609
|
+
--icen-motion-ease-spring: cubic-bezier(.22, .8, .24, 1); /* 弹簧近似;支持 linear() 时由下方覆盖 */
|
|
610
|
+
|
|
611
|
+
/* ── 幅度(位移/缩放令牌:编排一致的物理量) ── */
|
|
612
|
+
--icen-motion-shift-sm: 2px; /* 行内微移(列表项 hover) */
|
|
613
|
+
--icen-motion-shift-md: 6px; /* 浮层/气泡入场位移 */
|
|
614
|
+
--icen-motion-shift-lg: 12px; /* 抽屉/面板入场位移 */
|
|
615
|
+
--icen-motion-scale-enter: .96; /* 弹层入场起始缩放 */
|
|
616
|
+
--icen-motion-scale-press: .985; /* 按下形变 */
|
|
617
|
+
|
|
618
|
+
/* ── 编排(stagger:列表/卡片瀑布入场) ── */
|
|
619
|
+
--icen-motion-stagger-step: 24ms; /* 相邻项延迟步长 */
|
|
620
|
+
--icen-motion-stagger-count: 5; /* 最多级联项数(超出同拍,避免长尾等待) */
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
/* damped spring 近似(过冲 ≈8%):linear() 停点语法(Chrome 113+ / Safari 17.2+ / FF 112+)。
|
|
624
|
+
不支持时保持上方 emphasized 回退——不猜不静默之外,这里是有意声明的可降级增强。 */
|
|
625
|
+
@supports (transition-timing-function: linear(0, 1)) {
|
|
626
|
+
:root {
|
|
627
|
+
--icen-motion-ease-spring: linear(0, .42, .78, 1, 1.08, .96, 1.02, 1);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
501
631
|
|
|
502
632
|
/* ── tokens/design.css ── */
|
|
503
|
-
/* 现代 primitive: geometry, type, rhythm and lighting. Color palettes live in themes.json.
|
|
633
|
+
/* 现代 primitive: geometry, type, rhythm and lighting. Color palettes live in themes.json.
|
|
634
|
+
*
|
|
635
|
+
* The default primitive describes a precise desktop application surface: compact
|
|
636
|
+
* controls, restrained type, layered neutral surfaces and short, purposeful
|
|
637
|
+
* feedback. All values are semantic inputs; components never hardcode them.
|
|
638
|
+
* Other primitives (chinese / soviet / pixel) override this file's seeds and keep
|
|
639
|
+
* their own identity, so every rule here remains palette- and primitive-safe.
|
|
640
|
+
*/
|
|
504
641
|
:root {
|
|
642
|
+
/* ── Control geometry ── */
|
|
505
643
|
--icen-design-radius: 10px;
|
|
506
644
|
--icen-design-space: 4px;
|
|
507
|
-
--icen-design-control-height:
|
|
508
|
-
--icen-design-font-size:
|
|
509
|
-
--icen-design-font: -apple-system, BlinkMacSystemFont, '
|
|
510
|
-
|
|
645
|
+
--icen-design-control-height: 34px;
|
|
646
|
+
--icen-design-font-size: 13px;
|
|
647
|
+
--icen-design-font: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI Variable Text',
|
|
648
|
+
'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
|
|
649
|
+
--icen-design-glass-blur: 24px;
|
|
511
650
|
--icen-design-motion: 1;
|
|
512
|
-
}
|
|
513
651
|
|
|
514
|
-
/*
|
|
652
|
+
/* Semantic aliases consumed by component CSS. The height scale follows the
|
|
653
|
+
* active density; the aliases exist so components read intent, not arithmetic. */
|
|
654
|
+
--icen-control-height-sm: var(--icen-density-input-height-sm);
|
|
655
|
+
--icen-control-height-md: var(--icen-density-input-height-md);
|
|
656
|
+
--icen-control-height-lg: var(--icen-density-input-height-lg);
|
|
657
|
+
--icen-control-radius-sm: var(--icen-radius-sm);
|
|
658
|
+
--icen-control-radius: var(--icen-radius-sm);
|
|
659
|
+
--icen-control-radius-lg: var(--icen-radius-md);
|
|
660
|
+
--icen-control-padding-inline-sm: 9px;
|
|
661
|
+
--icen-control-padding-inline: 12px;
|
|
662
|
+
--icen-control-padding-inline-lg: 16px;
|
|
663
|
+
--icen-field-padding-inline: 9px;
|
|
664
|
+
--icen-field-padding-inline-sm: 8px;
|
|
665
|
+
--icen-control-gap: 6px;
|
|
666
|
+
--icen-control-gap-sm: 4px;
|
|
667
|
+
--icen-control-icon: 15px;
|
|
668
|
+
--icen-control-border-width: 1px;
|
|
669
|
+
|
|
670
|
+
/* Type roles. Sizes stay on the density scale; these aliases name the role. */
|
|
671
|
+
--icen-font-size-title: var(--icen-density-font-size-lg);
|
|
672
|
+
--icen-font-size-section: var(--icen-density-font-size-md);
|
|
673
|
+
--icen-font-size-control: var(--icen-density-font-size-md);
|
|
674
|
+
--icen-font-size-caption: var(--icen-density-font-size-xs);
|
|
675
|
+
--icen-font-weight-control: 500;
|
|
676
|
+
--icen-font-weight-title: 600;
|
|
677
|
+
--icen-font-weight-label: 500;
|
|
678
|
+
--icen-letter-spacing-control: -.006em;
|
|
679
|
+
--icen-letter-spacing-caption: .01em;
|
|
680
|
+
|
|
681
|
+
/* Motion: one-shot state changes are short; spatial entrances use the enter
|
|
682
|
+
* curve. No bouncy physics for ordinary controls.
|
|
683
|
+
* 语义别名 → tokens/motion.css 基值 × --icen-design-motion(reduced-motion / pixel 原语归零)。 */
|
|
684
|
+
--icen-duration-instant: calc(var(--icen-motion-duration-instant) * var(--icen-design-motion));
|
|
685
|
+
--icen-duration-fast: calc(var(--icen-motion-duration-fast) * var(--icen-design-motion));
|
|
686
|
+
--icen-duration-normal: calc(var(--icen-motion-duration-base) * var(--icen-design-motion));
|
|
687
|
+
--icen-duration-slow: calc(var(--icen-motion-duration-slow) * var(--icen-design-motion));
|
|
688
|
+
--icen-duration-deliberate: calc(var(--icen-motion-duration-deliberate) * var(--icen-design-motion));
|
|
689
|
+
--icen-ease-out: var(--icen-motion-ease-emphasized);
|
|
690
|
+
--icen-ease-in: cubic-bezier(.5, 0, .8, .2);
|
|
691
|
+
--icen-ease-in-out: var(--icen-motion-ease-standard);
|
|
692
|
+
--icen-ease-enter: var(--icen-motion-ease-enter);
|
|
693
|
+
--icen-ease-exit: var(--icen-motion-ease-exit);
|
|
694
|
+
--icen-ease-bounce: var(--icen-ease-out);
|
|
695
|
+
--icen-hover-border: var(--icen-token-line);
|
|
696
|
+
--icen-hover-border-strong: var(--icen-token-line-strong);
|
|
697
|
+
--icen-press: scale(.985);
|
|
698
|
+
--icen-press-soft: none;
|
|
699
|
+
--icen-disabled-opacity: .45;
|
|
700
|
+
--icen-ring: 0 0 0 2px var(--icen-token-surface), 0 0 0 4px color-mix(in srgb, var(--icen-token-accent) 62%, transparent);
|
|
701
|
+
--icen-ring-soft: 0 0 0 3px color-mix(in srgb, var(--icen-token-accent) 18%, transparent);
|
|
702
|
+
--icen-control-focus-border: color-mix(in srgb, var(--icen-token-accent) 62%, var(--icen-token-line));
|
|
703
|
+
--icen-control-focus-shadow: inset 0 1px 2px color-mix(in srgb, var(--icen-design-shadow-color) 8%, transparent), 0 0 0 3px color-mix(in srgb, var(--icen-token-accent) 18%, transparent);
|
|
704
|
+
|
|
705
|
+
/* Material motion: chrome and floating surfaces share a blur radius family. */
|
|
706
|
+
--icen-material-blur-chrome: 18px;
|
|
707
|
+
--icen-material-blur-floating: 28px;
|
|
708
|
+
--icen-material-saturate: 1.4;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
/* Materials and geometry belong to the primitive, across every palette.
|
|
712
|
+
* Recompute the whole derived surface at each palette/theme boundary so an
|
|
713
|
+
* inherited resolved value can never freeze across a theme switch. */
|
|
515
714
|
:root, [data-icen-preset], [data-icen-theme="dark"] {
|
|
715
|
+
/* Surface hierarchy: canvas → content → chrome → floating → modal. Chrome and
|
|
716
|
+
* toolbar sit between canvas and content; selected rows are a tinted content
|
|
717
|
+
* surface, not a second card. */
|
|
718
|
+
--icen-token-surface-chrome: color-mix(in srgb, var(--icen-design-canvas) 46%, var(--icen-design-surface));
|
|
719
|
+
--icen-token-surface-toolbar: color-mix(in srgb, var(--icen-design-canvas) 38%, var(--icen-design-surface));
|
|
720
|
+
--icen-token-surface-sidebar: color-mix(in srgb, var(--icen-design-canvas) 66%, var(--icen-design-surface));
|
|
721
|
+
--icen-token-surface-content: var(--icen-design-surface);
|
|
722
|
+
--icen-token-surface-raised: var(--icen-design-raised);
|
|
723
|
+
--icen-token-surface-pressed: color-mix(in srgb, var(--icen-design-ink) 8%, var(--icen-design-surface));
|
|
724
|
+
--icen-token-surface-selected: var(--icen-token-accent-subtle);
|
|
725
|
+
|
|
726
|
+
/* Interaction fills. Hover is a hint, pressed a physical push, selected a
|
|
727
|
+
* persistent state; none of them is used as a substitute for another. */
|
|
728
|
+
--icen-token-fill-hover: color-mix(in srgb, var(--icen-design-ink) 5%, transparent);
|
|
729
|
+
--icen-token-fill-pressed: color-mix(in srgb, var(--icen-design-ink) 9%, transparent);
|
|
730
|
+
--icen-token-fill-selected: color-mix(in srgb, var(--icen-design-accent) 13%, transparent);
|
|
731
|
+
--icen-token-separator-soft: var(--icen-token-line-soft);
|
|
732
|
+
--icen-token-separator: var(--icen-token-line);
|
|
733
|
+
--icen-token-separator-strong: var(--icen-token-line-strong);
|
|
734
|
+
--icen-token-focus-indicator: color-mix(in srgb, var(--icen-token-accent) 62%, transparent);
|
|
735
|
+
--icen-token-control-border: color-mix(in srgb, var(--icen-design-ink) 19%, transparent);
|
|
736
|
+
--icen-token-control-border-hover: color-mix(in srgb, var(--icen-design-ink) 28%, transparent);
|
|
516
737
|
--icen-token-surface-glass: color-mix(in srgb, var(--icen-token-surface) var(--icen-design-glass-opacity), transparent);
|
|
738
|
+
--icen-token-surface-glass-chrome: color-mix(in srgb, var(--icen-token-surface-toolbar) 88%, transparent);
|
|
739
|
+
|
|
517
740
|
/* Contact, near-field and ambient shadows share a light source. Negative
|
|
518
741
|
* spread keeps the shadow under the object instead of fogging its outline. */
|
|
519
|
-
--icen-token-shadow-card:
|
|
520
|
-
|
|
521
|
-
|
|
742
|
+
--icen-token-shadow-card:
|
|
743
|
+
0 1px 1px -1px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .5), transparent),
|
|
744
|
+
0 3px 8px -4px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .55), transparent),
|
|
745
|
+
0 10px 24px -16px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .45), transparent);
|
|
746
|
+
--icen-token-shadow-elevated:
|
|
747
|
+
0 1px 2px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .55), transparent),
|
|
748
|
+
0 8px 20px -8px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .8), transparent),
|
|
749
|
+
0 26px 52px -22px color-mix(in srgb, var(--icen-design-shadow-color) var(--icen-design-shadow-strength), transparent);
|
|
750
|
+
--icen-token-shadow-overlay:
|
|
751
|
+
0 2px 6px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .7), transparent),
|
|
752
|
+
0 16px 36px -12px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * 1.1), transparent),
|
|
753
|
+
0 44px 88px -28px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * 1.15), transparent);
|
|
754
|
+
--icen-token-shadow-control:
|
|
755
|
+
inset 0 1px 0 color-mix(in srgb, var(--icen-token-top-highlight) 55%, transparent),
|
|
756
|
+
0 1px 1.5px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .38), transparent);
|
|
757
|
+
--icen-token-shadow-field: inset 0 1px 2px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .3), transparent);
|
|
522
758
|
--icen-token-top-highlight: color-mix(in srgb, var(--icen-design-light) var(--icen-design-highlight-strength), transparent);
|
|
523
759
|
--icen-token-shadow-inset: inset 0 1px 2px color-mix(in srgb, var(--icen-design-shadow-color) calc(var(--icen-design-shadow-strength) * .35), transparent), inset 0 -1px 0 color-mix(in srgb, var(--icen-token-top-highlight) 45%, transparent);
|
|
524
760
|
--icen-token-shadow-popover: var(--icen-token-shadow-elevated);
|
|
525
761
|
--icen-token-material-edge: color-mix(in srgb, var(--icen-token-text) var(--icen-design-edge-strength), transparent);
|
|
526
762
|
--icen-token-material-light: inset 0 1px 0 var(--icen-token-top-highlight), inset 0 -1px 0 color-mix(in srgb, var(--icen-token-top-highlight) 18%, transparent);
|
|
527
|
-
--icen-token-scrim: color-mix(in srgb, var(--icen-design-shadow-color)
|
|
763
|
+
--icen-token-scrim: color-mix(in srgb, var(--icen-design-shadow-color) 38%, transparent);
|
|
528
764
|
}
|
|
529
765
|
|
|
530
766
|
:root {
|
|
531
767
|
--icen-design-light: #ffffff;
|
|
532
|
-
--icen-radius-xs: max(0px, calc(var(--icen-design-radius) -
|
|
768
|
+
--icen-radius-xs: max(0px, calc(var(--icen-design-radius) - 5px));
|
|
533
769
|
--icen-radius-sm: max(0px, calc(var(--icen-design-radius) - 2px));
|
|
534
770
|
--icen-radius-md: var(--icen-design-radius);
|
|
535
|
-
--icen-radius-lg: calc(var(--icen-design-radius) +
|
|
536
|
-
--icen-radius-xl: calc(var(--icen-design-radius) +
|
|
771
|
+
--icen-radius-lg: calc(var(--icen-design-radius) + 4px);
|
|
772
|
+
--icen-radius-xl: calc(var(--icen-design-radius) + 10px);
|
|
537
773
|
--icen-radius-full: 999px;
|
|
538
774
|
--icen-font-body: var(--icen-design-font);
|
|
539
775
|
--icen-font-heading: var(--icen-design-font);
|
|
540
776
|
--icen-font-cjk: var(--icen-design-font);
|
|
541
|
-
--icen-font-mono: ui-monospace, SFMono-Regular, Consolas, monospace;
|
|
777
|
+
--icen-font-mono: ui-monospace, 'SF Mono', SFMono-Regular, 'Cascadia Mono', 'Segoe UI Mono', Consolas, monospace;
|
|
542
778
|
--icen-font-mono-paper: var(--icen-font-mono);
|
|
543
|
-
--icen-line-height-body: 1.
|
|
779
|
+
--icen-line-height-body: 1.5;
|
|
544
780
|
--icen-line-height-heading: 1.25;
|
|
545
781
|
--icen-letter-spacing-body: 0;
|
|
546
|
-
--icen-letter-spacing-heading: -.
|
|
547
|
-
--icen-duration-fast: calc(120ms * var(--icen-design-motion));
|
|
548
|
-
--icen-duration-normal: calc(180ms * var(--icen-design-motion));
|
|
549
|
-
--icen-duration-slow: calc(260ms * var(--icen-design-motion));
|
|
550
|
-
--icen-ease-out: cubic-bezier(.16, 1, .3, 1);
|
|
551
|
-
--icen-ease-bounce: var(--icen-ease-out);
|
|
552
|
-
--icen-hover-border: var(--icen-token-line);
|
|
553
|
-
--icen-hover-border-strong: var(--icen-token-line-strong);
|
|
554
|
-
--icen-press: scale(.985);
|
|
555
|
-
--icen-press-soft: scale(.99);
|
|
556
|
-
--icen-disabled-opacity: .48;
|
|
557
|
-
--icen-ring: 0 0 0 2px var(--icen-token-surface), 0 0 0 4px var(--icen-token-accent);
|
|
558
|
-
--icen-ring-soft: 0 0 0 3px var(--icen-token-accent-subtle);
|
|
559
|
-
--icen-control-focus-border: var(--icen-token-accent);
|
|
560
|
-
--icen-control-focus-shadow: var(--icen-token-shadow-inset), var(--icen-ring-soft);
|
|
782
|
+
--icen-letter-spacing-heading: -.015em;
|
|
561
783
|
}
|
|
562
784
|
|
|
563
785
|
/* Density changes rhythm and row height, never shrinks reading text. Re-declare
|
|
@@ -578,6 +800,12 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
578
800
|
--icen-density-input-height-sm: max(28px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset) - 8px));
|
|
579
801
|
--icen-density-input-height-md: calc(var(--icen-design-control-height) + var(--icen-design-density-offset));
|
|
580
802
|
--icen-density-input-height-lg: calc(var(--icen-design-control-height) + var(--icen-design-density-offset) + 8px);
|
|
803
|
+
--icen-density-item-height: max(24px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset) - 6px));
|
|
804
|
+
/* 控件高度别名必须在密度边界重新声明:只写在 :root 会在根上解析成固定值,
|
|
805
|
+
* 之后嵌套 [data-icen-density] 覆盖密度时不再联动。 */
|
|
806
|
+
--icen-control-height-sm: var(--icen-density-input-height-sm);
|
|
807
|
+
--icen-control-height-md: var(--icen-density-input-height-md);
|
|
808
|
+
--icen-control-height-lg: var(--icen-density-input-height-lg);
|
|
581
809
|
--icen-density-font-size-2xs: max(12px, calc(var(--icen-design-font-size) - 2px));
|
|
582
810
|
--icen-density-font-size-xs: max(12px, calc(var(--icen-design-font-size) - 2px));
|
|
583
811
|
--icen-density-font-size-sm: max(12px, calc(var(--icen-design-font-size) - 1px));
|
|
@@ -585,6 +813,10 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
585
813
|
--icen-density-font-size-lg: calc(var(--icen-design-font-size) + 2px);
|
|
586
814
|
--icen-density-font-size-xl: calc(var(--icen-design-font-size) + 6px);
|
|
587
815
|
--icen-density-font-size-2xl: calc(var(--icen-design-font-size) + 12px);
|
|
816
|
+
--icen-font-size-title: var(--icen-density-font-size-lg);
|
|
817
|
+
--icen-font-size-section: var(--icen-density-font-size-md);
|
|
818
|
+
--icen-font-size-control: var(--icen-density-font-size-md);
|
|
819
|
+
--icen-font-size-caption: var(--icen-density-font-size-xs);
|
|
588
820
|
}
|
|
589
821
|
:root[data-icen-density="compact"],
|
|
590
822
|
:root [data-icen-density="compact"] {
|
|
@@ -601,11 +833,15 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
601
833
|
--icen-density-input-height-sm: max(44px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset) - 8px));
|
|
602
834
|
--icen-density-input-height-md: max(44px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset)));
|
|
603
835
|
--icen-density-input-height-lg: max(44px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset) + 8px));
|
|
836
|
+
--icen-density-item-height: max(44px, calc(var(--icen-design-control-height) + var(--icen-design-density-offset) - 6px));
|
|
604
837
|
}
|
|
605
838
|
}
|
|
839
|
+
/* reduced-motion:本原语时长乘数归零(唯一的变量开关点;base.css 负责动画/滚动压制)。
|
|
840
|
+
手动覆盖:data-icen-motion="full" 在系统降级时恢复;"reduce" 无需系统设置即降级。 */
|
|
606
841
|
@media (prefers-reduced-motion: reduce) {
|
|
607
|
-
:root { --icen-design-motion: 0; }
|
|
842
|
+
:root:not([data-icen-motion="full"]) { --icen-design-motion: 0; }
|
|
608
843
|
}
|
|
844
|
+
:root[data-icen-motion="reduce"] { --icen-design-motion: 0; }
|
|
609
845
|
|
|
610
846
|
|
|
611
847
|
/* ── tokens/chinese.css ── */
|
|
@@ -741,6 +977,16 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
741
977
|
--icen-ring: 0 0 0 2px var(--icen-token-surface), 0 0 0 4px var(--icen-token-accent);
|
|
742
978
|
--icen-ring-soft: 0 0 0 2px var(--icen-token-accent);
|
|
743
979
|
--icen-control-focus-shadow: 0 0 0 2px var(--icen-token-accent);
|
|
980
|
+
/* shadow-inset 被本原语置 none,base.css 合成的 error 版会变成非法的「none, …」
|
|
981
|
+
列表 → 整条 box-shadow 失效:像素原语自持一份硬边错误光环 */
|
|
982
|
+
--icen-control-error-shadow: 0 0 0 2px var(--icen-token-error);
|
|
983
|
+
/* 点阵逐帧美学:动效令牌层全部改写为 steps(时长已由 --icen-design-motion: 0 归零,
|
|
984
|
+
缓动改写面向直接消费 --icen-motion-ease-* 的新组件,双保险) */
|
|
985
|
+
--icen-motion-ease-standard: steps(1, end);
|
|
986
|
+
--icen-motion-ease-enter: steps(1, end);
|
|
987
|
+
--icen-motion-ease-exit: steps(1, end);
|
|
988
|
+
--icen-motion-ease-emphasized: steps(1, end);
|
|
989
|
+
--icen-motion-ease-spring: steps(1, end);
|
|
744
990
|
--icen-ease-out: steps(1, end);
|
|
745
991
|
--icen-ease-bounce: steps(1, end);
|
|
746
992
|
}
|
|
@@ -829,17 +1075,21 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
829
1075
|
@layer icen.components {
|
|
830
1076
|
/* Material contract (default 现代 primitive; theme via data-icen-preset):
|
|
831
1077
|
* <section data-icen-material="content|chrome|floating">arbitrary content</section>
|
|
832
|
-
* content = opaque reading; chrome =
|
|
1078
|
+
* content = opaque reading; chrome = navigation; floating = temporary
|
|
833
1079
|
* operations. HTML primitives need no JS. Existing components consume the same
|
|
834
1080
|
* recipes automatically. Force opaque via html[data-icen-transparency="reduced"].
|
|
835
1081
|
* This file ships with tokens.css as well as ui.css; kit consumers need no extras.
|
|
1082
|
+
*
|
|
1083
|
+
* 分层登记(guard: tier-direction 文件级白名单):材料适配是横切层——选中态/磨砂
|
|
1084
|
+
* 配方覆盖 .icen-ai-composer-popup* 与 .icen-kb-checkpoint-menu-item 等 Beta 类名;
|
|
1085
|
+
* Beta 类名变更对本文件仅静默降级,不破坏 Core 用户,故允许 Core 引用 Beta。
|
|
836
1086
|
*/
|
|
837
1087
|
/* The base layer also defines interaction defaults. Keep the primitive's
|
|
838
1088
|
* interaction recipe in the components layer so separately imported base.css
|
|
839
1089
|
* cannot quietly restore a different press/focus model. */
|
|
840
1090
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) {
|
|
841
1091
|
--icen-press: scale(.985);
|
|
842
|
-
--icen-press-soft:
|
|
1092
|
+
--icen-press-soft: none;
|
|
843
1093
|
--icen-hover-border: var(--icen-token-line);
|
|
844
1094
|
--icen-hover-border-strong: var(--icen-token-line-strong);
|
|
845
1095
|
--icen-ring: 0 0 0 2px var(--icen-token-surface), 0 0 0 4px var(--icen-token-accent);
|
|
@@ -951,23 +1201,21 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
951
1201
|
}
|
|
952
1202
|
:root .icen-nav { box-shadow: var(--icen-token-material-light); }
|
|
953
1203
|
:root .icen-btn {
|
|
954
|
-
--btn-border-hover: var(--icen-
|
|
955
|
-
gap: var(--icen-
|
|
956
|
-
border-radius: var(--icen-radius
|
|
957
|
-
letter-spacing:
|
|
1204
|
+
--btn-border-hover: var(--icen-hover-border);
|
|
1205
|
+
gap: var(--icen-control-gap);
|
|
1206
|
+
border-radius: var(--icen-control-radius);
|
|
1207
|
+
letter-spacing: var(--icen-letter-spacing-control);
|
|
958
1208
|
}
|
|
959
1209
|
:root .icen-btn-primary { --btn-border-hover: var(--icen-token-accent-strong); }
|
|
960
1210
|
:root :is(.icen-btn-ghost,.icen-btn-link) { --btn-border-hover: transparent; }
|
|
961
1211
|
:root .icen-btn-link { --btn-fg: var(--icen-token-accent-text); }
|
|
962
|
-
:root .icen-btn-
|
|
963
|
-
:root .icen-
|
|
964
|
-
:root .icen-
|
|
965
|
-
:root .icen-segmented { padding: var(--icen-density-space-xs); gap: var(--icen-density-space-xs); }
|
|
966
|
-
:root .icen-segmented-item { border-radius: max(0px, calc(var(--icen-radius-md) - var(--icen-density-space-xs) - 1px)); }
|
|
1212
|
+
:root .icen-btn-danger:hover:not(:disabled) { color: var(--icen-token-error); background: var(--icen-token-error-muted); }
|
|
1213
|
+
:root .icen-segmented { padding: 3px; gap: 2px; }
|
|
1214
|
+
:root .icen-segmented-item { border-radius: max(0px, calc(var(--icen-radius-md) - 4px)); }
|
|
967
1215
|
:root :is(.icen-segmented-item.is-active,.icen-segmented-item[aria-checked="true"],.icen-toggle-group-btn.is-active) {
|
|
968
1216
|
background: var(--icen-token-surface);
|
|
969
1217
|
color: var(--icen-token-text);
|
|
970
|
-
box-shadow: var(--icen-token-shadow-
|
|
1218
|
+
box-shadow: var(--icen-token-shadow-control);
|
|
971
1219
|
}
|
|
972
1220
|
:root :is(.icen-menu,.icen-popover,.icen-select-panel) { border-radius: var(--icen-radius-lg); }
|
|
973
1221
|
:root .icen-modal {
|
|
@@ -980,33 +1228,74 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
980
1228
|
-webkit-backdrop-filter: none;
|
|
981
1229
|
}
|
|
982
1230
|
:root .icen-card--elevated { box-shadow: var(--icen-token-shadow-card); }
|
|
983
|
-
:root .icen-card--interactive:hover { transform: none; border-color: var(--icen-token-
|
|
1231
|
+
:root .icen-card--interactive:hover { transform: none; border-color: var(--icen-token-control-border-hover); }
|
|
984
1232
|
:root .icen-card--interactive:focus-within { box-shadow: var(--icen-ring); }
|
|
985
|
-
:root .icen-switch-thumb { background: var(--icen-token-text-muted); }
|
|
986
|
-
:root .icen-switch[aria-checked="true"] .icen-switch-thumb { background: var(--icen-token-on-accent); }
|
|
987
|
-
:root .icen-input-wrap--sm { padding-inline: var(--icen-density-space-sm); }
|
|
988
1233
|
/* 现代: small controls have a legible edge and a quiet, tactile surface. Keep
|
|
989
1234
|
* these optical refinements local to the default primitive; other primitives
|
|
990
1235
|
* supply their own surface physics without fighting a global component rule. */
|
|
991
1236
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:not(.icen-btn-ghost):not(.icen-btn-link) {
|
|
992
|
-
|
|
1237
|
+
background-image: linear-gradient(
|
|
1238
|
+
to bottom,
|
|
1239
|
+
color-mix(in srgb, var(--icen-token-top-highlight) 32%, transparent),
|
|
1240
|
+
transparent 52%
|
|
1241
|
+
);
|
|
1242
|
+
box-shadow: var(--icen-token-shadow-control);
|
|
1243
|
+
}
|
|
1244
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn-primary {
|
|
1245
|
+
background-image: linear-gradient(
|
|
1246
|
+
to bottom,
|
|
1247
|
+
color-mix(in srgb, var(--icen-token-top-highlight) 16%, transparent),
|
|
1248
|
+
transparent 58%
|
|
1249
|
+
);
|
|
993
1250
|
}
|
|
994
1251
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:focus-visible {
|
|
995
1252
|
box-shadow: var(--icen-ring);
|
|
996
1253
|
}
|
|
1254
|
+
/* Stable opaque planes keep content readable over any application backdrop. */
|
|
1255
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is([data-icen-material],.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-card--glass,.icen-nav,.icen-toast,.icen-notification,.icen-chart-tooltip,.icen-back-top,.icen-carousel-arrow) {
|
|
1256
|
+
background: var(--icen-token-surface);
|
|
1257
|
+
backdrop-filter: none;
|
|
1258
|
+
-webkit-backdrop-filter: none;
|
|
1259
|
+
}
|
|
1260
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) [data-icen-material="chrome"] {
|
|
1261
|
+
background: var(--icen-token-surface-toolbar);
|
|
1262
|
+
}
|
|
1263
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-nav.is-scrolled {
|
|
1264
|
+
background: var(--icen-token-surface-toolbar);
|
|
1265
|
+
}
|
|
1266
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-card-tag,.icen-media-card-overlay,.icen-carousel-dot,.icen-carousel-index,.icen-spinner-overlay) {
|
|
1267
|
+
backdrop-filter: none;
|
|
1268
|
+
-webkit-backdrop-filter: none;
|
|
1269
|
+
}
|
|
997
1270
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:active:not(:disabled):not([aria-disabled="true"]):not([data-icen-disabled]):not(.is-loading) {
|
|
1271
|
+
background-image: none;
|
|
998
1272
|
box-shadow: var(--icen-token-shadow-inset);
|
|
999
1273
|
}
|
|
1000
1274
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-btn:active:focus-visible {
|
|
1001
1275
|
box-shadow: var(--icen-token-shadow-inset), var(--icen-ring);
|
|
1002
1276
|
}
|
|
1003
1277
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-input-wrap,.icen-textarea-wrap) {
|
|
1004
|
-
padding-inline: var(--icen-
|
|
1278
|
+
padding-inline: var(--icen-field-padding-inline);
|
|
1279
|
+
padding-block: 0;
|
|
1005
1280
|
}
|
|
1006
1281
|
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) :is(.icen-input,.icen-textarea)::placeholder {
|
|
1007
1282
|
color: var(--icen-token-text-faint);
|
|
1008
1283
|
opacity: 1;
|
|
1009
1284
|
}
|
|
1285
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented {
|
|
1286
|
+
background: var(--icen-token-surface-raised);
|
|
1287
|
+
border-color: var(--icen-token-line-soft);
|
|
1288
|
+
box-shadow: none;
|
|
1289
|
+
}
|
|
1290
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented-item.is-active,
|
|
1291
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-segmented-item[aria-checked="true"] {
|
|
1292
|
+
border: 1px solid color-mix(in srgb, var(--icen-token-line) 72%, transparent);
|
|
1293
|
+
margin: -1px;
|
|
1294
|
+
}
|
|
1295
|
+
:root:where(:not([data-icen-style]),[data-icen-style="modern"]) .icen-toggle-group {
|
|
1296
|
+
background: var(--icen-token-surface-raised);
|
|
1297
|
+
border-color: var(--icen-token-line-soft);
|
|
1298
|
+
}
|
|
1010
1299
|
/* Data readability is explicit, never applied to every numeral in prose. */
|
|
1011
1300
|
:root :is(.icen-numeric,.icen-table,.icen-datatable,.icen-stat-num) { font-variant-numeric: lining-nums tabular-nums; }
|
|
1012
1301
|
/* Any translucent material has an opaque alternative, including native controls. */
|
|
@@ -1103,6 +1392,8 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1103
1392
|
/* 中式 material adapter. DOM contract: html[data-icen-style="chinese"] with
|
|
1104
1393
|
* existing ICEN components or [data-icen-material="content|chrome|floating"].
|
|
1105
1394
|
* No additional wrappers, decorative pseudo-elements or JavaScript required.
|
|
1395
|
+
* 分层登记(guard: tier-direction 白名单):横切材料适配引用 Beta 类名
|
|
1396
|
+
* .icen-ai-composer-popup,理由同 material.css 头注释。
|
|
1106
1397
|
*/
|
|
1107
1398
|
:root[data-icen-style="chinese"] {
|
|
1108
1399
|
--icen-press: scale(.995);
|
|
@@ -1160,6 +1451,14 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1160
1451
|
@media (prefers-reduced-motion: reduce) {
|
|
1161
1452
|
:root[data-icen-style="chinese"] { --icen-press: none; --icen-press-soft: none; }
|
|
1162
1453
|
}
|
|
1454
|
+
/* 减少透明偏好:玻璃面回落实底,文字不叠在内容上 */
|
|
1455
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
1456
|
+
:root[data-icen-style="chinese"] :is(.icen-card--glass, [data-icen-material="floating"], .icen-command-palette) {
|
|
1457
|
+
background: var(--icen-token-surface-raised);
|
|
1458
|
+
-webkit-backdrop-filter: none;
|
|
1459
|
+
backdrop-filter: none;
|
|
1460
|
+
}
|
|
1461
|
+
}
|
|
1163
1462
|
@media (forced-colors: active) {
|
|
1164
1463
|
:root[data-icen-style="chinese"] :is([data-icen-material],.icen-card,.icen-panel,.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-modal,.icen-nav) {
|
|
1165
1464
|
background: Canvas;
|
|
@@ -1174,6 +1473,8 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1174
1473
|
/* 苏式 material adapter. DOM contract: html[data-icen-style="soviet"] with
|
|
1175
1474
|
* existing ICEN components or [data-icen-material="content|chrome|floating"].
|
|
1176
1475
|
* Structural emphasis belongs to frame/header/action, not long-form text.
|
|
1476
|
+
* 分层登记(guard: tier-direction 白名单):横切材料适配引用 Beta 类名
|
|
1477
|
+
* .icen-ai-composer-popup,理由同 material.css 头注释。
|
|
1177
1478
|
*/
|
|
1178
1479
|
:root[data-icen-style="soviet"] {
|
|
1179
1480
|
--icen-press: translateY(1px);
|
|
@@ -1233,6 +1534,14 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1233
1534
|
@media (prefers-reduced-motion: reduce) {
|
|
1234
1535
|
:root[data-icen-style="soviet"] { --icen-press: none; --icen-press-soft: none; }
|
|
1235
1536
|
}
|
|
1537
|
+
/* 减少透明偏好:玻璃面回落实底,文字不叠在内容上 */
|
|
1538
|
+
@media (prefers-reduced-transparency: reduce) {
|
|
1539
|
+
:root[data-icen-style="soviet"] :is(.icen-card--glass, [data-icen-material="floating"], .icen-command-palette) {
|
|
1540
|
+
background: var(--icen-token-surface-raised);
|
|
1541
|
+
-webkit-backdrop-filter: none;
|
|
1542
|
+
backdrop-filter: none;
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1236
1545
|
@media (forced-colors: active) {
|
|
1237
1546
|
:root[data-icen-style="soviet"] :is([data-icen-material],.icen-card,.icen-panel,.icen-menu,.icen-popover,.icen-select-panel,.icen-date-picker-panel,.icen-autocomplete-panel,.icen-cascader-panel,.icen-tree-select-panel,.icen-mentions-panel,.icen-ai-composer-popup,.icen-command-palette,.icen-modal,.icen-nav) {
|
|
1238
1547
|
background: Canvas;
|
|
@@ -1265,9 +1574,9 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1265
1574
|
cursor: pointer;
|
|
1266
1575
|
transition: opacity var(--icen-tx-fast), background-color var(--icen-tx-fast), color var(--icen-tx-fast), transform var(--icen-tx-fast);
|
|
1267
1576
|
}
|
|
1268
|
-
.icen-icon-action:hover { background: var(--icen-token-fill-
|
|
1269
|
-
.icen-icon-action:active {
|
|
1270
|
-
.icen-icon-action:focus-visible { outline:
|
|
1577
|
+
.icen-icon-action:hover { background: var(--icen-token-fill-hover); color: var(--icen-token-text); }
|
|
1578
|
+
.icen-icon-action:active { background: var(--icen-token-fill-pressed); }
|
|
1579
|
+
.icen-icon-action:focus-visible { outline: none; box-shadow: var(--icen-ring); }
|
|
1271
1580
|
.icen-icon-action:disabled { opacity: var(--icen-disabled-opacity); pointer-events: none; }
|
|
1272
1581
|
@media (hover: hover) and (pointer: fine) {
|
|
1273
1582
|
.icen-icon-action[data-icen-reveal] { opacity: 0; }
|
|
@@ -1280,7 +1589,6 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1280
1589
|
}
|
|
1281
1590
|
@media (prefers-reduced-motion: reduce) {
|
|
1282
1591
|
.icen-icon-action { transition: none; }
|
|
1283
|
-
.icen-icon-action:active { transform: none; }
|
|
1284
1592
|
}
|
|
1285
1593
|
|
|
1286
1594
|
:root[data-icen-style="pixel"] .icen-symbol { stroke-linecap: square; stroke-linejoin: miter; shape-rendering: crispEdges; }
|
|
@@ -1312,11 +1620,14 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1312
1620
|
.icen-search-clear > svg { inline-size: 16px; block-size: 16px; pointer-events: none; }
|
|
1313
1621
|
.icen-search-clear:hover {
|
|
1314
1622
|
color: var(--icen-token-text);
|
|
1315
|
-
background: var(--icen-token-
|
|
1623
|
+
background: var(--icen-token-fill-hover);
|
|
1624
|
+
}
|
|
1625
|
+
.icen-search-clear:active {
|
|
1626
|
+
background: var(--icen-token-fill-pressed);
|
|
1316
1627
|
}
|
|
1317
1628
|
.icen-search-clear:focus-visible {
|
|
1318
|
-
outline:
|
|
1319
|
-
|
|
1629
|
+
outline: none;
|
|
1630
|
+
box-shadow: var(--icen-ring);
|
|
1320
1631
|
}
|
|
1321
1632
|
@media (prefers-reduced-motion: reduce) {
|
|
1322
1633
|
.icen-search-clear { transition: none; }
|
|
@@ -1338,13 +1649,22 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1338
1649
|
.icen-suggestion-symbol > svg { inline-size: 16px; block-size: 16px; }
|
|
1339
1650
|
.icen-suggestion-copy { flex: 1; min-inline-size: 0; overflow-wrap: anywhere; }
|
|
1340
1651
|
.icen-suggestion-status.is-loading .icen-suggestion-symbol > svg { animation: icen-spin calc(var(--icen-duration-normal) * 4) linear infinite; }
|
|
1341
|
-
.icen-suggestion-retry { flex: 0 0 auto; padding-inline: var(--icen-density-space-sm); min-block-size: var(--icen-density-input-height-sm); border: 1px solid var(--icen-token-outline-soft); border-radius: var(--icen-radius-sm); background: var(--icen-token-fill-1); color: var(--icen-token-text); font: inherit; cursor: pointer; }
|
|
1342
|
-
.icen-suggestion-retry:focus-visible { outline:
|
|
1343
|
-
@media (hover: hover) and (pointer: fine) { .icen-suggestion-retry:hover { background: var(--icen-token-fill-2); } }
|
|
1652
|
+
.icen-suggestion-retry { flex: 0 0 auto; padding-inline: var(--icen-density-space-sm); min-block-size: var(--icen-density-input-height-sm); border: 1px solid var(--icen-token-outline-soft); border-radius: var(--icen-radius-sm); background: var(--icen-token-fill-1); color: var(--icen-token-text); font: inherit; cursor: pointer; transition: background-color var(--icen-tx-fast), border-color var(--icen-tx-fast); }
|
|
1653
|
+
.icen-suggestion-retry:focus-visible { outline: none; box-shadow: var(--icen-ring); }
|
|
1654
|
+
@media (hover: hover) and (pointer: fine) { .icen-suggestion-retry:hover { background: var(--icen-token-fill-2); border-color: var(--icen-token-line); } }
|
|
1344
1655
|
@media (pointer: coarse) { .icen-suggestion-retry { min-inline-size: 44px; min-block-size: 44px; } }
|
|
1345
1656
|
:root[data-icen-style="pixel"] .icen-suggestion-status.is-loading .icen-suggestion-symbol > svg { animation-timing-function: steps(8,end); }
|
|
1346
1657
|
@media (prefers-reduced-motion: reduce) { .icen-suggestion-status.is-loading .icen-suggestion-symbol > svg { animation: none; } }
|
|
1347
1658
|
|
|
1659
|
+
@media (forced-colors: active) {
|
|
1660
|
+
.icen-icon-action,
|
|
1661
|
+
.icen-search-clear,
|
|
1662
|
+
.icen-suggestion-retry { border: 1px solid CanvasText; }
|
|
1663
|
+
.icen-icon-action:focus-visible,
|
|
1664
|
+
.icen-search-clear:focus-visible,
|
|
1665
|
+
.icen-suggestion-retry:focus-visible { outline: 2px solid Highlight; outline-offset: 1px; box-shadow: none; }
|
|
1666
|
+
}
|
|
1667
|
+
|
|
1348
1668
|
/*
|
|
1349
1669
|
* @icen.ai/ui — Component: input(wrapper 式输入框 / 多行 / 搜索)
|
|
1350
1670
|
* 规格源自 opengal primitives/input.tsx;与 behaviors/input.ts 配套。
|
|
@@ -1376,16 +1696,16 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1376
1696
|
.icen-kb-filter-value {
|
|
1377
1697
|
box-sizing: border-box;
|
|
1378
1698
|
min-inline-size: 0;
|
|
1379
|
-
block-size: var(--input-height, var(--icen-
|
|
1380
|
-
padding: 0 var(--input-padding-inline, var(--icen-
|
|
1699
|
+
block-size: var(--input-height, var(--icen-control-height-md));
|
|
1700
|
+
padding: 0 var(--input-padding-inline, var(--icen-field-padding-inline));
|
|
1381
1701
|
font-family: var(--icen-font-body);
|
|
1382
|
-
font-size: var(--input-font-size, var(--icen-
|
|
1383
|
-
line-height: 1.
|
|
1702
|
+
font-size: var(--input-font-size, var(--icen-font-size-control));
|
|
1703
|
+
line-height: 1.4;
|
|
1384
1704
|
color: var(--icen-token-text);
|
|
1385
1705
|
background: var(--icen-token-control);
|
|
1386
|
-
border:
|
|
1387
|
-
border-radius: var(--icen-radius
|
|
1388
|
-
box-shadow: var(--icen-token-shadow-
|
|
1706
|
+
border: var(--icen-control-border-width) solid var(--icen-token-control-border);
|
|
1707
|
+
border-radius: var(--icen-control-radius);
|
|
1708
|
+
box-shadow: var(--icen-token-shadow-field);
|
|
1389
1709
|
transition: border-color var(--icen-tx-fast), box-shadow var(--icen-tx-fast);
|
|
1390
1710
|
}
|
|
1391
1711
|
.icen-input-wrap {
|
|
@@ -1396,7 +1716,7 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1396
1716
|
inline-size: 100%;
|
|
1397
1717
|
}
|
|
1398
1718
|
:is(.icen-input-wrap,.icen-input-control,.icen-kb-input,.icen-kb-retrieval-query,.icen-kb-hittest-input,.icen-kb-filter-field,.icen-kb-filter-value):hover {
|
|
1399
|
-
border-color: var(--icen-
|
|
1719
|
+
border-color: var(--icen-token-control-border-hover);
|
|
1400
1720
|
}
|
|
1401
1721
|
:is(.icen-input-wrap,.icen-input-control,.icen-kb-input,.icen-kb-retrieval-query,.icen-kb-hittest-input,.icen-kb-filter-field,.icen-kb-filter-value):focus-within {
|
|
1402
1722
|
outline: none;
|
|
@@ -1423,13 +1743,13 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1423
1743
|
/* 尺寸变体 */
|
|
1424
1744
|
.icen-input-wrap--sm, .icen-input-control--sm,
|
|
1425
1745
|
.icen-kb-input, .icen-kb-retrieval-query, .icen-kb-hittest-input, .icen-kb-filter-field, .icen-kb-filter-value {
|
|
1426
|
-
--input-height: var(--icen-
|
|
1427
|
-
--input-padding-inline:
|
|
1746
|
+
--input-height: var(--icen-control-height-sm);
|
|
1747
|
+
--input-padding-inline: var(--icen-field-padding-inline-sm);
|
|
1428
1748
|
--input-font-size: var(--icen-density-font-size-sm);
|
|
1429
1749
|
}
|
|
1430
1750
|
.icen-input-wrap--lg, .icen-input-control--lg {
|
|
1431
|
-
--input-height: var(--icen-
|
|
1432
|
-
--input-padding-inline: var(--icen-
|
|
1751
|
+
--input-height: var(--icen-control-height-lg);
|
|
1752
|
+
--input-padding-inline: var(--icen-control-padding-inline-lg);
|
|
1433
1753
|
--input-font-size: var(--icen-density-font-size-lg);
|
|
1434
1754
|
}
|
|
1435
1755
|
|
|
@@ -1445,7 +1765,7 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1445
1765
|
font: inherit;
|
|
1446
1766
|
}
|
|
1447
1767
|
.icen-input::placeholder {
|
|
1448
|
-
color:
|
|
1768
|
+
color: var(--icen-token-text-faint); /* 全量 faint:60% 混透浅色仅 ~2.4:1 低于 AA(faint 全量 ≥4.9:1) */
|
|
1449
1769
|
}
|
|
1450
1770
|
.icen-input:read-only {
|
|
1451
1771
|
color: var(--icen-token-text-muted);
|
|
@@ -1508,7 +1828,7 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1508
1828
|
align-items: center;
|
|
1509
1829
|
justify-content: center;
|
|
1510
1830
|
flex-shrink: 0;
|
|
1511
|
-
width:
|
|
1831
|
+
width: 24px; height: 24px; /* WCAG 2.5.8 下限(22 → 24) */
|
|
1512
1832
|
padding: 0;
|
|
1513
1833
|
border: none;
|
|
1514
1834
|
background: transparent;
|
|
@@ -1537,14 +1857,14 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1537
1857
|
display: flex;
|
|
1538
1858
|
width: 100%;
|
|
1539
1859
|
background: var(--icen-token-control);
|
|
1540
|
-
border:
|
|
1541
|
-
border-radius: var(--icen-radius
|
|
1542
|
-
box-shadow: var(--icen-token-shadow-
|
|
1860
|
+
border: var(--icen-control-border-width) solid var(--icen-token-control-border);
|
|
1861
|
+
border-radius: var(--icen-control-radius);
|
|
1862
|
+
box-shadow: var(--icen-token-shadow-field);
|
|
1543
1863
|
transition: border-color var(--icen-tx-fast),
|
|
1544
1864
|
box-shadow var(--icen-tx-fast);
|
|
1545
1865
|
}
|
|
1546
1866
|
.icen-textarea-wrap:hover {
|
|
1547
|
-
border-color: var(--icen-
|
|
1867
|
+
border-color: var(--icen-token-control-border-hover);
|
|
1548
1868
|
}
|
|
1549
1869
|
.icen-textarea-wrap:focus-within {
|
|
1550
1870
|
box-shadow: var(--icen-control-focus-shadow);
|
|
@@ -1567,19 +1887,19 @@ h1, h2, h3, h4, h5, h6 {
|
|
|
1567
1887
|
|
|
1568
1888
|
.icen-textarea {
|
|
1569
1889
|
width: 100%;
|
|
1570
|
-
padding: var(--icen-density-space-sm) var(--icen-
|
|
1890
|
+
padding: var(--icen-density-space-sm) var(--icen-field-padding-inline);
|
|
1571
1891
|
background: transparent;
|
|
1572
1892
|
border: none;
|
|
1573
1893
|
outline: none;
|
|
1574
1894
|
resize: vertical;
|
|
1575
1895
|
color: var(--icen-token-text);
|
|
1576
1896
|
font: inherit;
|
|
1577
|
-
font-size: var(--icen-
|
|
1897
|
+
font-size: var(--icen-font-size-control);
|
|
1578
1898
|
line-height: 1.5;
|
|
1579
|
-
min-height: calc(3 * 1.5em +
|
|
1899
|
+
min-height: calc(3 * 1.5em + 22px);
|
|
1580
1900
|
}
|
|
1581
1901
|
.icen-textarea::placeholder {
|
|
1582
|
-
color:
|
|
1902
|
+
color: var(--icen-token-text-faint); /* 全量 faint:60% 混透浅色仅 ~2.4:1 低于 AA(faint 全量 ≥4.9:1) */
|
|
1583
1903
|
}
|
|
1584
1904
|
|
|
1585
1905
|
/* 字符计数(behavior 可挂到 .icen-input-wrap 或 .icen-textarea-wrap 内行内末端) */
|