/* =========================================================
   DS · Base
   基础排版、焦点、滚动条、布局工具。不覆盖业务模块样式。
   ========================================================= */

.ds-page {
    display: flex;
    flex-direction: column;
    gap: var(--ds-space-2);
    min-height: 0;
}

.ds-row {
    display: flex;
    align-items: center;
    gap: var(--ds-space-2);
}

.ds-row--between {
    justify-content: space-between;
}

.ds-stack {
    display: flex;
    flex-direction: column;
    gap: var(--ds-space-2);
}

.ds-grow { flex: 1 1 auto; min-width: 0; }

.ds-sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.ds-muted { color: var(--ds-text-secondary); }
.ds-tertiary { color: var(--ds-text-tertiary); }

/* 排版语义类：新增界面优先用这些类，不再写死字号 */
.ds-text-title {
    font-size: var(--ds-text-2xl);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-tight);
    letter-spacing: var(--ds-tracking-tight);
    color: var(--ds-text-primary);
}

.ds-text-heading {
    font-size: var(--ds-text-lg);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-primary);
}

.ds-text-subheading {
    font-size: var(--ds-text-md);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-primary);
}

.ds-text-body {
    font-size: var(--ds-text-body);
    font-weight: var(--ds-font-weight-regular);
    line-height: var(--ds-leading-normal);
    color: var(--ds-text-primary);
}

.ds-text-body-sm {
    font-size: var(--ds-text-body-sm);
    font-weight: var(--ds-font-weight-regular);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-secondary);
}

.ds-text-caption {
    font-size: var(--ds-text-sm);
    font-weight: var(--ds-font-weight-regular);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-tertiary);
}

.ds-text-micro {
    font-size: var(--ds-text-xs);
    font-weight: var(--ds-font-weight-medium);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-tertiary);
}

.ds-mono { font-family: var(--ds-font-mono); }

/* 标题层级 */
.ds-h1 {
    margin: 0;
    font-size: var(--ds-text-h1);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-tight);
    letter-spacing: var(--ds-tracking-tight);
    color: var(--ds-text-primary);
}

.ds-h2 {
    margin: 0;
    font-size: var(--ds-text-h2);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-tight);
    letter-spacing: var(--ds-tracking-tight);
    color: var(--ds-text-primary);
}

.ds-h3 {
    margin: 0;
    font-size: var(--ds-text-h3);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-primary);
}

.ds-h4 {
    margin: 0;
    font-size: var(--ds-text-h4);
    font-weight: var(--ds-font-weight-semibold);
    line-height: var(--ds-leading-snug);
    color: var(--ds-text-primary);
}

.ds-link {
    color: var(--ds-text-link);
    text-decoration: none;
    transition: color var(--ds-motion-fast) var(--ds-ease-standard);
}

.ds-link:hover { color: var(--ds-color-primary-hover); }

.ds-text-left { text-align: left; }
.ds-text-center { text-align: center; }
.ds-text-right { text-align: right; }

.ds-num {
    font-variant-numeric: tabular-nums;
    letter-spacing: 0;
}

/* 焦点：统一键盘可见焦点，不改变鼠标点击观感 */
.ds-focusable:focus-visible,
.ds-btn:focus-visible,
.ds-input:focus-visible,
.ds-select:focus-visible,
.ds-textarea:focus-visible,
.ds-tab:focus-visible,
.ds-page-btn:focus-visible,
.ds-tree__node:focus-visible,
.ds-menu__item:focus-visible {
    outline: 2px solid var(--ds-color-primary);
    outline-offset: 2px;
}

/* 滚动条 */
.ds-scroll {
    scrollbar-width: thin;
    scrollbar-color: var(--color-border-strong) transparent;
}

.ds-scroll::-webkit-scrollbar {
    width: 8px;
    height: 8px;
}

.ds-scroll::-webkit-scrollbar-thumb {
    background: var(--color-border-strong);
    border-radius: var(--ds-radius-full);
}

.ds-scroll::-webkit-scrollbar-track {
    background: transparent;
}

.ds-divider {
    height: 1px;
    background: var(--ds-color-border-light);
    border: 0;
    margin: var(--ds-space-2) 0;
}

/* 选中文本 */
::selection {
    background: var(--ds-color-primary-soft);
    color: var(--ds-color-text);
}
