/*
 * 共享交互基础。各页面保留自己的数据密度与领域配色，这里只统一
 * 可访问性、焦点、禁用状态、数字稳定性和动效降级，不替代业务状态。
 */
/* 状态色引用 design-tokens.css 的语义层；fallback 供未加载令牌的极端情况。 */
:root {
    --ui-focus: var(--accent, #22d3ee);
    --ui-focus-shadow: rgba(58, 134, 201, 0.28);
    --ui-disabled-opacity: 0.52;
    --ui-status-positive: var(--up, #34d399);
    --ui-status-negative: var(--down, #fb7185);
    --ui-status-caution: var(--caution, #fbbf24);
    --ui-status-neutral: var(--neutral, #94a3b8);
}

html[data-theme="light"] {
    --ui-focus-shadow: rgba(34, 104, 159, 0.22);
}

html[data-color-mode="colorblind"] {
    --ui-focus-shadow: rgba(0, 114, 178, 0.26);
}

html[data-ui-page] {
    font-synthesis: none;
    text-rendering: optimizeLegibility;
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}

body[data-ui-page] button,
body[data-ui-page] input,
body[data-ui-page] select,
body[data-ui-page] textarea {
    font: inherit;
}

body[data-ui-page] :where(button, a, input, select, textarea, summary):focus-visible {
    outline: 2px solid var(--ui-focus) !important;
    outline-offset: 2px;
    box-shadow: 0 0 0 4px var(--ui-focus-shadow);
}

body[data-ui-page] button:disabled,
body[data-ui-page] [aria-disabled="true"] {
    cursor: not-allowed;
    opacity: var(--ui-disabled-opacity);
}

body[data-ui-page] [data-ui-numeric],
body[data-ui-page] .font-mono,
body[data-ui-page] .font-data {
    font-variant-numeric: tabular-nums;
}

body[data-ui-page] [role="status"],
body[data-ui-page] [aria-live="polite"] {
    overflow-wrap: anywhere;
}

body[data-ui-page] [data-ui-viewport-control="true"] {
    position: fixed !important;
    z-index: 2147483000 !important;
}

@media (prefers-reduced-motion: reduce) {
    body[data-ui-page] *,
    body[data-ui-page] *::before,
    body[data-ui-page] *::after {
        scroll-behavior: auto !important;
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
    }
}
