*, *::before, *::after { box-sizing: border-box; } html, body, #root { height: 100%; } body { margin: 0; font-family: var(--lx-font-sans); font-size: var(--lx-font-size-md); line-height: var(--lx-line-height-normal); color: var(--lx-color-text-primary); background: var(--lx-color-bg-app); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } h1, h2, h3, h4, p { margin: 0; } button, input, textarea, select { font: inherit; color: inherit; } button { padding: 0; border: none; background: none; cursor: pointer; } a { color: inherit; text-decoration: none; } ul, ol { margin: 0; padding: 0; list-style: none; } ::selection { color: #ffffff; background: var(--lx-color-brand); } :focus-visible { outline: 2px solid var(--lx-color-focus); outline-offset: 2px; } ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-thumb { border: 2px solid transparent; border-radius: var(--lx-radius-pill); background: var(--lx-color-border-strong); background-clip: content-box; } ::-webkit-scrollbar-track { background: transparent; } /* ---------- 基础排版 ---------- */ .lx-eyebrow { font-size: 11px; font-weight: 600; line-height: 1; letter-spacing: 0.08em; color: var(--lx-color-text-tertiary); } .lx-link-button { display: inline-flex; align-items: center; gap: 4px; font-size: var(--lx-font-size-xs); color: var(--lx-color-text-secondary); transition: color var(--lx-motion-fast) var(--lx-ease-out); } .lx-link-button:hover { color: var(--lx-color-brand); } /* ---------- 面板 ---------- */ .lx-panel { display: flex; flex-direction: column; gap: var(--lx-space-4); padding: var(--lx-space-5); border: 1px solid var(--lx-color-border); border-radius: var(--lx-radius-md); background: var(--lx-color-bg-panel); box-shadow: var(--lx-shadow-panel); } .lx-panel__head { display: flex; align-items: flex-start; justify-content: space-between; gap: var(--lx-space-4); } .lx-panel__head h2 { font-size: var(--lx-font-size-lg); font-weight: 600; line-height: var(--lx-line-height-tight); } .lx-panel__head p { margin-top: 4px; font-size: var(--lx-font-size-xs); color: var(--lx-color-text-tertiary); } /* ---------- 标签 / 进度 ---------- */ .lx-chip { display: inline-flex; align-items: center; gap: 4px; height: 22px; padding: 0 8px; border-radius: var(--lx-radius-sm); font-size: var(--lx-font-size-xs); font-weight: 500; white-space: nowrap; } .lx-chip::before { width: 5px; height: 5px; border-radius: 50%; background: currentColor; content: ''; } .lx-chip--running { color: var(--lx-color-brand); background: var(--lx-color-brand-soft); } .lx-chip--review { color: var(--lx-color-warning); background: #fff4e8; } .lx-chip--done { color: var(--lx-color-success); background: #e8f8ec; } .lx-chip--failed { color: var(--lx-color-danger); background: #ffecec; } .lx-progress { position: relative; display: block; width: 96px; height: 6px; overflow: hidden; border-radius: var(--lx-radius-pill); background: #eef1f5; } .lx-progress__bar { position: absolute; inset: 0 auto 0 0; border-radius: inherit; background: var(--lx-color-brand); } .lx-progress__value { width: 40px; font-size: var(--lx-font-size-xs); color: var(--lx-color-text-secondary); text-align: right; font-variant-numeric: tabular-nums; } /* ---------- 表格 ---------- */ .lx-table { overflow: hidden; border: 1px solid var(--lx-color-border); border-radius: var(--lx-radius-md); background: var(--lx-color-bg-panel); } .lx-table__head, .lx-table__row { display: grid; grid-template-columns: minmax(240px, 1.6fr) 110px 170px 110px 120px; align-items: center; gap: var(--lx-space-4); padding: 0 var(--lx-space-4); } .lx-table__head { height: 40px; border-bottom: 1px solid var(--lx-color-border); background: var(--lx-color-bg-subtle); font-size: var(--lx-font-size-xs); font-weight: 500; color: var(--lx-color-text-tertiary); } .lx-table__row { min-height: 52px; border-bottom: 1px solid var(--lx-color-border); font-size: var(--lx-font-size-sm); transition: background var(--lx-motion-fast) var(--lx-ease-out); } .lx-table__row:last-child { border-bottom: none; } .lx-table__row:hover { background: var(--lx-color-bg-subtle); } .lx-table__name { overflow: hidden; font-weight: 500; color: var(--lx-color-text-primary); text-overflow: ellipsis; white-space: nowrap; } .lx-table__muted { color: var(--lx-color-text-secondary); font-variant-numeric: tabular-nums; } .lx-table__progress { display: flex; align-items: center; gap: var(--lx-space-2); } /* ---------- 字段 ---------- */ .lx-field { display: flex; flex-direction: column; gap: 6px; } .lx-field__label { font-size: var(--lx-font-size-sm); font-weight: 500; color: var(--lx-color-text-primary); } .lx-field .semi-input-wrapper { border-radius: var(--lx-radius-md); }