测试: - secure-storage: 26 tests (AES 加解密/明文 fallback/迁移/Base64 边界) - request.ts: 16 tests (扩展 ResponseCache/patientId 隔离/requestUnlimited) - mock-api: 修复 getCachedPatientId 缺失导致 health 测试失败 UX 无障碍 (10 组件): - SegmentTabs/DoctorTabBar: role=tablist/tab + aria-selected - PrimaryButton/SecondaryButton: role=button + aria-disabled/aria-busy - Loading/LoadingCard: role=status + aria-live=polite - EmptyState: role=status + aria-live=polite - ErrorState: role=alert + aria-live=assertive - TrendChart tooltip: role=tooltip + aria-live=polite - FormInput: aria-invalid + aria-label 焦点管理: - 新增 _focus-ring.scss mixin (focus + focus-visible) - 5 组件 SCSS 应用 focus-ring
58 lines
994 B
SCSS
58 lines
994 B
SCSS
@import '../../../styles/variables.scss';
|
|
|
|
.form-input {
|
|
&__label {
|
|
display: block;
|
|
font-size: var(--tk-font-cap);
|
|
color: $tx3;
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
&__field {
|
|
height: var(--tk-input-height);
|
|
background: $card;
|
|
border: 1.5px solid $bd;
|
|
border-radius: $r;
|
|
padding: 0 var(--tk-gap-lg);
|
|
display: flex;
|
|
align-items: center;
|
|
transition: border-color 0.2s;
|
|
|
|
&:focus-within {
|
|
outline: $focus-ring-width solid $focus-ring-color;
|
|
outline-offset: $focus-ring-offset;
|
|
border-color: var(--tk-pri);
|
|
}
|
|
}
|
|
|
|
&__control {
|
|
width: 100%;
|
|
height: 100%;
|
|
font-size: var(--tk-font-body);
|
|
color: $tx;
|
|
}
|
|
|
|
&__placeholder {
|
|
color: $tx3;
|
|
}
|
|
|
|
&--error &__field {
|
|
border-color: $dan;
|
|
}
|
|
|
|
&--disabled &__field {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
&--focus &__field {
|
|
border-color: var(--tk-pri);
|
|
}
|
|
|
|
&__error {
|
|
display: block;
|
|
font-size: var(--tk-font-cap);
|
|
color: $dan;
|
|
margin-top: 4px;
|
|
}
|
|
}
|