/* Kole UI Mobile · Message 样式 — 对齐移动端规格 §42 轻量消息通知:顶部居中,一行「图标 + 文字」,四态(success / warning / error / info)。 与轻提示 Toast 的分工:Toast 占据视口中央并阻断交互,Message 贴在顶部、**不阻断**任何操作 (只占顶部一条,下面的页面照常可点),因此它的 z-index 低于遮罩与弹窗。 自动消失时长由宿主的定时器控制,本组件只负责显示态与退出动画。 */ .kole-m-message { --kole-m-message-duration: 240ms; --kole-m-message-gap: var(--kole-space-8); position: fixed; top: 0; left: 0; right: 0; z-index: 1900; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; gap: var(--kole-m-message-gap); padding: calc(var(--kole-m-safe-top) + var(--kole-space-12)) var(--kole-m-gutter) 0; pointer-events: none; } .kole-m-message__item { box-sizing: border-box; display: flex; align-items: center; gap: var(--kole-space-8); width: 100%; max-width: 343px; min-height: var(--kole-m-touch-target); padding: var(--kole-space-8) var(--kole-space-12); border: 1px solid var(--kole-color-border); border-radius: var(--kole-radius-base); background: var(--kole-color-card-bg); color: var(--kole-color-text-body); font-family: var(--kole-font-family); font-size: var(--kole-m-font-size-label); line-height: 1.5; box-shadow: var(--kole-shadow-medium); /* 入场:从上方滑下 + 淡入;出场沿用同一个过渡(宿主移除 is-open 即可) */ opacity: 0; transform: translateY(-100%); transition: opacity var(--kole-m-message-duration) var(--kole-m-ease-slide), transform var(--kole-m-message-duration) var(--kole-m-ease-slide); } .kole-m-message__item.is-open { opacity: 1; transform: translateY(0); } /* 变体 tone:四种语气(图标字形 + 侧边描边同族,文字保持正文色以保证对比度) */ .kole-m-message__item--info { border-inline-start: 3px solid var(--kole-color-info); } .kole-m-message__item--success { border-inline-start: 3px solid var(--kole-color-success); } .kole-m-message__item--warning { border-inline-start: 3px solid var(--kole-color-warning); } .kole-m-message__item--error { border-inline-start: 3px solid var(--kole-color-error); } .kole-m-message__icon { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: var(--kole-icon-size-16); font-size: var(--kole-m-font-size-body); line-height: 1; } .kole-m-message__item--info .kole-m-message__icon { color: var(--kole-color-info); } .kole-m-message__item--success .kole-m-message__icon { color: var(--kole-color-success); } .kole-m-message__item--warning .kole-m-message__icon { color: var(--kole-color-warning); } .kole-m-message__item--error .kole-m-message__icon { color: var(--kole-color-error); } .kole-m-message__text { flex: 1 1 auto; min-width: 0; word-break: break-word; } /* 关闭按钮(可选):原生 button,24px 视觉 + 44px 触控热区(靠 min-height 撑住) */ .kole-m-message__close { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; box-sizing: border-box; width: var(--kole-m-touch-target); height: var(--kole-m-touch-target); margin-block: calc(-1 * var(--kole-space-8)); margin-inline-end: calc(-1 * var(--kole-space-8)); padding: 0; border: 0; border-radius: 50%; background: none; color: var(--kole-color-text-secondary); font-family: inherit; font-size: var(--kole-m-font-size-body); line-height: 1; cursor: pointer; touch-action: manipulation; pointer-events: auto; } .kole-m-message__close:active { background: var(--kole-color-table-header-bg); } .kole-m-message__close:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: -2px; } @media (prefers-reduced-motion: reduce) { .kole-m-message__item { transition: none; } }