/* ============================================================================
 AP_DS · dvs-git.css 代码页版式层
 加载顺序：css.css（组件库） → dvs-git.css（本文件） → 页面内联 <style>

 本文件不定义配色，只借用站点既有令牌：
 版式用的语义名（canvas / fg / border / accent…）全部指向 --repo-color-*，
 改主题色只需改 base.html 的 :root。
 ========================================================================== */

:root {
  /* 画布与分隔线，直接取站点令牌，不新增色值 */
  --dv-canvas-default:   var(--repo-color-bg);
  --dv-canvas-subtle:    var(--repo-color-bg-secondary);
  --dv-canvas-inset:     var(--repo-color-bg-tertiary);
  --dv-border-default:   var(--repo-color-border);
  --dv-border-muted:     var(--repo-color-border-light);
  --dv-neutral-muted:    rgba(175, 184, 193, .2);

  /* 文字层级 */
  --dv-fg-default:       var(--repo-color-text);
  --dv-fg-muted:         var(--repo-color-text-secondary);
  --dv-fg-subtle:        var(--repo-color-text-tertiary);

  /* 强调与语义色，全部沿用站点既有值 */
  --dv-accent-fg:        var(--repo-color-link);
  --dv-accent-emphasis:  var(--repo-color-primary);
  --dv-accent-subtle:    var(--repo-color-bg-tertiary);
  --dv-success-fg:       var(--repo-color-success);
  --dv-success-subtle:   var(--repo-color-bg-tertiary);
  --dv-attention-fg:     var(--repo-color-warning);
  --dv-attention-subtle: var(--repo-color-bg-tertiary);
  --dv-danger-fg:        var(--repo-color-danger);
  --dv-danger-subtle:    var(--repo-color-bg-tertiary);
  --dv-done-fg:          var(--repo-color-primary);

  /* 控件：浅灰底 + 站点边框 */
  --dv-control-bg:       var(--repo-color-bg-secondary);
  --dv-control-border:   var(--repo-color-border);
  --dv-btn-primary-bg:   var(--repo-color-primary);
  --dv-btn-primary-hover:var(--repo-color-primary-hover);
  --dv-shadow-sm:        0 1px 0 rgba(31, 35, 40, .04);
  --dv-shadow-md:        0 3px 6px rgba(140, 149, 159, .15);
  --dv-shadow-lg:        0 8px 24px rgba(140, 149, 159, .2);

  /* ---- Primer · 形状与排版 ---- */
  --dv-radius:      6px;
  --dv-radius-sm:   6px;
  --dv-radius-lg:   12px;
  --dv-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans",
             "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", Helvetica,
             Arial, sans-serif;
  --dv-font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
             "Liberation Mono", "Courier New", monospace;
  --dv-header-h: 62px;

  /* 不在此重声明 --repo-color-*，配色由 base.html 的 :root 与 css.css 决定。 */
}

/* ===== 补齐缺失的 --dv-* 变量（原代码 var(--dv-xxx, #fff) 回退到白色导致深色失效）===== */
[data-theme], :root {
  --dv-accent: var(--repo-color-primary);
  --dv-bg-default: var(--repo-color-bg);
  --dv-bg-subtle: var(--repo-color-bg-secondary);
  --dv-border: var(--repo-color-border);
  --dv-danger: var(--repo-color-bg);
  --dv-success: var(--repo-color-bg);
  --dv-warning: var(--repo-color-bg);
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  font-family: var(--dv-font);
  font-size: 14px;
  line-height: 1.5;
  color: var(--dv-fg-default);
  background-color: var(--dv-canvas-default);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

a { color: var(--dv-accent-fg); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ============================================================================
 参考版式 全局顶栏
 ========================================================================== */

.dv-topbar {
  background-color: var(--repo-color-bg);
  color: var(--repo-color-text);
  border-bottom: 1px solid var(--repo-color-border);
  padding: 12px 0;
  font-size: 14px;
}

.dv-topbar-inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px;
  display: flex;
  align-items: center;
  gap: 16px;
  height: 32px;
}

.dv-mark {
  display: flex;
  align-items: center;
  gap: 8px;
  color: var(--repo-color-text);
  flex: 0 0 auto;
}

.dv-mark:hover { color: var(--repo-color-text-secondary); text-decoration: none; }

/* 官方图标：自身带深色圆角底，在深色顶栏上直接贴合，无需滤镜 */
.dv-mark img {
  display: block;
  width: 30px;
  height: 30px;
  border-radius: 7px;
  flex: 0 0 auto;
}

.dv-mark-word {
  font-family: var(--dv-font-mono);
  font-size: 15px;
  font-weight: 700;
  letter-spacing: .01em;
  line-height: 1;
  white-space: nowrap;
}

/* 仓库标题行的小图标 */
.dv-repo-icon {
  display: block;
  width: 20px;
  height: 20px;
  border-radius: 5px;
  flex: 0 0 auto;
}

.dv-topnav { display: flex; align-items: center; gap: 4px; }

.dv-topnav a {
  display: inline-flex;
  align-items: center;
  height: 32px;
  padding: 0 8px;
  font-size: 14px;
  font-weight: 600;
  color: var(--repo-color-text-secondary);
  border-radius: var(--dv-radius);
  white-space: nowrap;
}

.dv-topnav a:hover {
  background-color: var(--repo-color-bg-tertiary);
  color: var(--repo-color-text);
  text-decoration: none;
}

.dv-topbar-spacer { flex: 1; }

.dv-topbar-ver {
  font-family: var(--dv-font-mono);
  font-size: 12px;
  font-weight: 500;
  color: var(--repo-color-text-secondary);
  border: 1px solid var(--repo-color-border);
  border-radius: 2em;
  padding: 1px 8px;
  white-space: nowrap;
}

/* ============================================================================
 页面容器 + 仓库头部（仓库头部）
 ========================================================================== */

.dv-page {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px 48px;
}

/* 旧的 .main-container / .header 一律让位 */
.header { display: none !important; }

.main-container {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px 48px;
}

.dv-repo-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 16px 0;
  margin-bottom: 16px;
}

.dv-repo-title { display: flex; align-items: center; gap: 8px; min-width: 0; }

.dv-repo-title svg { fill: var(--dv-fg-muted); flex: 0 0 auto; }

.dv-repo-title .dv-owner {
  font-size: 20px;
  font-weight: 400;
  color: var(--dv-accent-fg);
}

.dv-repo-title .dv-slash { font-size: 20px; font-weight: 300; color: var(--dv-fg-muted); }

.dv-repo-title .dv-name {
  font-size: 20px;
  font-weight: 600;
  color: var(--dv-accent-fg);
}

.dv-repo-title .dv-vis {
  font-size: 12px;
  font-weight: 500;
  color: var(--dv-fg-muted);
  border: 1px solid var(--dv-border-default);
  border-radius: 2em;
  padding: 0 7px;
  line-height: 18px;
  margin-left: 4px;
}

.dv-repo-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* ============================================================================
 Primer 按钮
 ========================================================================== */

.dv-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  height: 32px;
  padding: 0 12px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  line-height: 20px;
  white-space: nowrap;
  color: var(--dv-fg-default);
  background-color: var(--dv-control-bg);
  border: 1px solid var(--dv-control-border);
  border-radius: var(--dv-radius);
  box-shadow: var(--dv-shadow-sm);
  cursor: pointer;
  transition: background-color .2s cubic-bezier(.3, 0, 0, 1), border-color .2s;
  text-decoration: none;
}

.dv-btn:hover {
  background-color: var(--repo-color-bg-hover);
  border-color: var(--dv-control-border);
  text-decoration: none;
  color: var(--dv-fg-default);
}

.dv-btn svg, .dv-btn i { color: var(--dv-fg-muted); flex: 0 0 auto; }
.dv-btn-sm { height: 28px; padding: 0 12px; font-size: 12px; }
.dv-btn-primary {
  color: var(--repo-color-bg);
  background-color: var(--dv-btn-primary-bg);
  border-color: var(--dv-control-border);
}
.dv-btn-primary:hover { background-color: var(--dv-btn-primary-hover); color: #fff; }
.dv-btn-primary svg, .dv-btn-primary i { color: rgba(255, 255, 255, .8); }
.dv-btn-block { width: 100%; }
.dv-btn[aria-disabled="true"] { opacity: .5; pointer-events: none; }

/* 计数徽标（Star / Fork 那种数字块） */
.dv-counter {
  display: inline-block;
  min-width: 20px;
  padding: 0 6px;
  font-size: 12px;
  font-weight: 500;
  line-height: 18px;
  text-align: center;
  color: var(--dv-fg-default);
  background-color: rgba(175, 184, 193, .2);
  border-radius: 2em;
}

/* ============================================================================
 仓库导航标签（Code / Releases 那条带下划线的横条）
 ========================================================================== */

.dv-underlinenav {
  display: flex;
  align-items: center;
  gap: 8px;
  overflow-x: auto;
  border-bottom: 1px solid var(--dv-border-default);
  margin-bottom: 24px;
}

.dv-underlinenav-item {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px;
  margin-bottom: -1px;
  font-size: 14px;
  color: var(--dv-fg-default);
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}

.dv-underlinenav-item:hover {
  border-bottom-color: var(--dv-border-default);
  text-decoration: none;
  border-radius: 6px 6px 0 0;
  background-color: var(--dv-canvas-subtle);
}

.dv-underlinenav-item svg, .dv-underlinenav-item i { color: var(--dv-fg-muted); }

.dv-underlinenav-item.is-selected {
  font-weight: 600;
  border-bottom-color: var(--repo-color-primary);
}

.dv-underlinenav-item.is-selected svg, .dv-underlinenav-item.is-selected i { color: var(--dv-fg-default); }

/* ============================================================================
 两栏布局 + 侧栏（仓库信息侧栏观感）
 ========================================================================== */

.dv-layout { display: flex; align-items: flex-start; gap: 24px; }
.dv-layout > .dv-main { flex: 1; min-width: 0; }

.dv-sidebar {
  flex: 0 0 296px;
  width: 296px;
  font-size: 12px;
  position: sticky;
  top: 16px;
}

.dv-side-block { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid var(--dv-border-muted); }
.dv-side-block:last-child { border-bottom: 0; }

.dv-side-title {
  font-size: 16px;
  font-weight: 600;
  color: var(--dv-fg-default);
  margin: 0 0 8px;
}

.dv-side-list { list-style: none; margin: 0; padding: 0; }

.dv-side-link {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 5px 8px;
  margin: 0 -8px;
  font-size: 14px;
  color: var(--dv-fg-default);
  border-radius: var(--dv-radius);
  overflow: hidden;
}

.dv-side-link:hover { background-color: var(--dv-canvas-subtle); text-decoration: none; }

.dv-side-link.is-selected {
  font-weight: 600;
  background-color: var(--dv-canvas-subtle);
}

.dv-side-link svg, .dv-side-link i { color: var(--dv-fg-muted); flex: 0 0 auto; width: 16px; height: 16px; }
.dv-side-link span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1 1 auto; min-width: 0; }

.dv-side-dl { display: flex; flex-direction: column; gap: 8px; }
.dv-side-empty { font-size: 12px; color: var(--dv-fg-muted); }

/* ============================================================================
 文件表（参考版式 的 Box + 行）
 ========================================================================== */

.dv-box {
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
  overflow: hidden;
}

.dv-box-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  background-color: var(--dv-canvas-subtle);
  border-bottom: 1px solid var(--dv-border-default);
  font-size: 14px;
  font-weight: 600;
}

.dv-file-row {
  display: grid;
  grid-template-columns: 16px minmax(0, 1fr) 88px;
  align-items: center;
  gap: 16px;
  padding: 8px 16px;
  font-size: 14px;
  border-bottom: 1px solid var(--dv-border-muted);
  transition: background-color .1s;
}

.dv-file-row:last-child { border-bottom: 0; }
.dv-file-row:hover { background-color: var(--dv-canvas-subtle); }

.dv-file-icon { display: flex; align-items: center; justify-content: center; }
.dv-file-icon svg, .dv-file-icon i { color: var(--dv-fg-muted); }
.dv-file-icon.is-dir svg, .dv-file-icon.is-dir i { color: var(--repo-color-primary); }

.dv-file-name {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  font-family: var(--dv-font-mono);
  font-size: 13px;
  color: var(--dv-fg-default);
}

.dv-file-name a { color: var(--dv-fg-default); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dv-file-name a:hover { color: var(--dv-accent-fg); text-decoration: underline; }

.dv-file-size {
  font-size: 12px;
  color: var(--dv-fg-muted);
  text-align: right;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.dv-empty {
  padding: 32px 16px;
  text-align: center;
  font-size: 14px;
  color: var(--dv-fg-muted);
}

/* ============================================================================
 README 区块（Box 文件表 + markdown 正文）
 ========================================================================== */

.dv-readme-head {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 16px;
  background-color: var(--dv-canvas-subtle);
  border-bottom: 1px solid var(--dv-border-default);
  font-size: 14px;
  font-weight: 600;
}

.dv-readme-head svg, .dv-readme-head i { color: var(--dv-fg-muted); }

.dv-markdown { padding: 32px; font-size: 16px; line-height: 1.6; color: var(--dv-fg-default); }
.dv-markdown > :first-child { margin-top: 0 !important; }
.dv-markdown > :last-child { margin-bottom: 0 !important; }

.dv-markdown h1, .dv-markdown h2, .dv-markdown h3,
.dv-markdown h4, .dv-markdown h5, .dv-markdown h6 {
  margin: 24px 0 16px;
  font-weight: 600;
  line-height: 1.25;
}

.dv-markdown h1 { font-size: 2em; padding-bottom: .3em; border-bottom: 1px solid var(--dv-border-muted); }
.dv-markdown h2 { font-size: 1.5em; padding-bottom: .3em; border-bottom: 1px solid var(--dv-border-muted); }
.dv-markdown h3 { font-size: 1.25em; }
.dv-markdown h4 { font-size: 1em; }
.dv-markdown h5 { font-size: .875em; }
.dv-markdown h6 { font-size: .85em; color: var(--dv-fg-muted); }

.dv-markdown p { margin: 0 0 16px; }
.dv-markdown a { color: var(--dv-accent-fg); }
.dv-markdown a:hover { text-decoration: underline; }
.dv-markdown strong { font-weight: 600; }

.dv-markdown ul, .dv-markdown ol { margin: 0 0 16px; padding-left: 2em; }
.dv-markdown li { margin-top: .25em; }
.dv-markdown li + li { margin-top: .25em; }

.dv-markdown blockquote {
  margin: 0 0 16px;
  padding: 0 1em;
  color: var(--dv-fg-muted);
  border-left: .25em solid var(--dv-border-default);
}

.dv-markdown hr { height: .25em; padding: 0; margin: 24px 0; background-color: var(--dv-border-default); border: 0; }

.dv-markdown img { max-width: 100%; box-sizing: content-box; background-color: var(--dv-canvas-default); }

.dv-markdown table { display: block; width: max-content; max-width: 100%; overflow: auto; margin: 0 0 16px; border-spacing: 0; border-collapse: collapse; }
.dv-markdown th, .dv-markdown td { padding: 6px 13px; border: 1px solid var(--dv-border-default); }
.dv-markdown th { font-weight: 600; background-color: var(--dv-canvas-subtle); }
.dv-markdown tr:nth-child(2n) { background-color: var(--dv-canvas-subtle); }

/* 行内代码 / 代码块，浅色代码度量 */
.dv-markdown code, .dv-markdown tt {
  padding: .2em .4em;
  margin: 0;
  font-size: 85%;
  font-family: var(--dv-font-mono);
  background-color: var(--dv-neutral-muted);
  border-radius: 6px;
  white-space: break-spaces;
}

.dv-markdown pre {
  margin: 0 0 16px;
  padding: 16px;
  overflow: auto;
  font-size: 85%;
  line-height: 1.45;
  background-color: var(--dv-canvas-subtle);
  border-radius: 6px;
  word-wrap: normal;
}

.dv-markdown pre code {
  display: inline;
  max-width: auto;
  padding: 0;
  margin: 0;
  overflow: visible;
  line-height: inherit;
  word-wrap: normal;
  background-color: transparent;
  border: 0;
  font-size: 100%;
  white-space: pre;
}

/* kbd */
.dv-markdown kbd {
  display: inline-block;
  padding: 3px 5px;
  font-family: var(--dv-font-mono);
  font-size: 11px;
  line-height: 10px;
  color: var(--dv-fg-default);
  background-color: var(--dv-canvas-subtle);
  border: 1px solid var(--dv-border-muted);
  border-bottom-color: var(--dv-border-default);
  border-radius: 6px;
  box-shadow: inset 0 -1px 0 var(--dv-border-default);
}

/* mark 高亮 */
.dv-markdown mark { background-color: var(--repo-color-bg-tertiary); color: var(--dv-fg-default); }

/* ============================================================================
 表单控件（参考版式 input / select）
 ========================================================================== */

.dv-input, .dv-select {
  height: 32px;
  padding: 5px 12px;
  font-family: inherit;
  font-size: 14px;
  line-height: 20px;
  color: var(--dv-fg-default);
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
  outline: none;
  box-shadow: inset 0 1px 0 var(--repo-color-border-light);
}

.dv-input:focus, .dv-select:focus {
  border-color: var(--dv-accent-emphasis);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .3);
}

.dv-input::placeholder { color: var(--dv-fg-subtle); }

/* 搜索框：页头搜索框 观感 */
.dv-search {
  display: flex;
  align-items: center;
  gap: 8px;
  height: 32px;
  padding: 0 12px;
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
  min-width: 240px;
}

.dv-search:focus-within { border-color: var(--dv-accent-emphasis); box-shadow: 0 0 0 3px rgba(59, 130, 246, .3); }
.dv-search svg, .dv-search i { color: var(--dv-fg-muted); flex: 0 0 auto; }

.dv-search input {
  flex: 1;
  min-width: 0;
  border: 0;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 14px;
  color: var(--dv-fg-default);
}

/* ============================================================================
 下拉菜单
 ========================================================================== */

.dv-dropdown { position: relative; }

.dv-select-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  height: 32px;
  padding: 0 12px;
  font-size: 14px;
  font-weight: 500;
  color: var(--dv-fg-default);
  background-color: var(--dv-control-bg);
  border: 1px solid var(--dv-control-border);
  border-radius: var(--dv-radius);
  box-shadow: var(--dv-shadow-sm);
  cursor: pointer;
  user-select: none;
}

.dv-select-btn:hover { background-color: var(--repo-color-bg-hover); }
.dv-select-btn .dv-caret { color: var(--dv-fg-muted); }

.dv-menu {
  position: absolute;
  top: calc(100% + 4px);
  left: 0;
  z-index: 100;
  min-width: 220px;
  max-height: 320px;
  overflow-y: auto;
  padding: 4px;
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius-lg);
  box-shadow: var(--dv-shadow-lg);
}

.dv-menu-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 4px 8px;
  font-size: 14px;
  color: var(--dv-fg-default);
  border-radius: var(--dv-radius);
  cursor: pointer;
}

.dv-menu-item:hover {
  background-color: var(--repo-color-primary);
  color: var(--repo-color-bg);
}
.dv-menu-item:hover svg, .dv-menu-item:hover i { color: var(--repo-color-bg); }
.dv-menu-item i { font-size: 12px; color: var(--dv-success-fg); }
.dv-menu-divider { height: 1px; margin: 4px 0; background-color: var(--dv-border-muted); }

/* ============================================================================
 闪讯 / 提示条（参考版式 flash）
 ========================================================================== */

.dv-flash {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 16px;
  margin-bottom: 16px;
  font-size: 14px;
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
}

.dv-flash-info { color: var(--dv-accent-fg); background-color: var(--dv-accent-subtle); border-color: var(--repo-color-border); }
.dv-flash-success { color: var(--dv-success-fg); background-color: var(--dv-success-subtle); border-color: rgba(26, 127, 55, .2); }
.dv-flash-warn { color: var(--dv-attention-fg); background-color: var(--dv-attention-subtle); border-color: rgba(154, 103, 0, .2); }
.dv-flash-error { color: var(--dv-danger-fg); background-color: var(--dv-danger-subtle); border-color: rgba(207, 34, 46, .2); }

/* ============================================================================
 旧类名兼容（admin 等页仍在使用）
 ========================================================================== */

.repo-card, .content-card, .card {
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
  box-shadow: none;
}

.repo-badge, .dv-label {
  display: inline-block;
  padding: 0 7px;
  font-size: 12px;
  font-weight: 500;
  line-height: 18px;
  color: var(--dv-fg-muted);
  background-color: var(--dv-neutral-muted);
  border-radius: 2em;
}

.repo-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.repo-table th, .repo-table td { padding: 6px 13px; border: 1px solid var(--dv-border-default); text-align: left; }
.repo-table th { font-weight: 600; background-color: var(--dv-canvas-subtle); }

.repo-input, .repo-textarea, .search-input {
  width: 100%;
  height: 32px;
  padding: 5px 12px;
  font-family: inherit;
  font-size: 14px;
  color: var(--dv-fg-default);
  background-color: var(--dv-canvas-default);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
}

.repo-input:focus, .repo-textarea:focus, .search-input:focus {
  border-color: var(--dv-accent-emphasis);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .3);
  outline: none;
}

.repo-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  height: 32px;
  padding: 0 12px;
  font-size: 14px;
  font-weight: 500;
  color: var(--dv-fg-default);
  background-color: var(--dv-control-bg);
  border: 1px solid var(--dv-control-border);
  border-radius: var(--dv-radius);
  box-shadow: var(--dv-shadow-sm);
  cursor: pointer;
  text-decoration: none;
}

.repo-btn:hover { background-color: var(--repo-color-bg-hover); text-decoration: none; }
.repo-btn--primary { color: #fff; background-color: var(--dv-btn-primary-bg); }
.repo-btn--primary:hover { background-color: var(--dv-btn-primary-hover); color: #fff; }
.repo-w-full { width: 100%; }

.repo-card__header { padding: 16px; border-bottom: 1px solid var(--dv-border-default); background-color: var(--dv-canvas-subtle); border-radius: var(--dv-radius) var(--dv-radius) 0 0; }
.repo-card__title { margin: 0; font-size: 16px; font-weight: 600; }
.repo-card__body { padding: 16px; }

/* 旧提示条 */
.info-message, .error-message, .success-message {
  padding: 16px;
  font-size: 14px;
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius);
}
.info-message { color: var(--dv-accent-fg); background-color: var(--dv-accent-subtle); }
.error-message { color: var(--dv-danger-fg); background-color: var(--dv-danger-subtle); }
.success-message { color: var(--dv-success-fg); background-color: var(--dv-success-subtle); }

.loading, .dv-loading { padding: 32px; text-align: center; font-size: 14px; color: var(--dv-fg-muted); }

/* ============================================================================
 基础兼容层
 .repo-header / .repo-path / .file-list / .file-row / .btn 等类
 在 css.css 里没有定义，releases / directory / view_* 等页仍在用，按原语义补齐。
 不要用 all:revert，它会把所有属性打回浏览器默认值。
 ========================================================================== */

.repo-header { margin-bottom: 24px; }

.repo-path {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 20px;
  font-weight: 600;
  margin-bottom: 16px;
  color: var(--repo-color-text);
}

.repo-path a { color: var(--repo-color-primary); text-decoration: none; }
.repo-path a:hover { text-decoration: underline; }
.repo-path .separator { color: var(--repo-color-text-tertiary); font-weight: 400; }

.file-list {
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  overflow: hidden;
  background-color: var(--repo-color-bg);
}

.file-list-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 10px 16px;
  background-color: var(--repo-color-bg-secondary);
  border-bottom: 1px solid var(--repo-color-border);
  font-size: 12px;
  font-weight: 600;
  color: var(--repo-color-text-secondary);
}

.file-row {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 8px 16px;
  border-bottom: 1px solid var(--repo-color-border-light);
  transition: background-color .1s ease;
}

.file-row:last-child { border-bottom: 0; }
.file-row:hover { background-color: var(--repo-color-bg-secondary); }

.file-name {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  flex: 1;
}

.file-name a {
  color: var(--repo-color-text);
  text-decoration: none;
  font-family: var(--repo-font-family-mono, ui-monospace, SFMono-Regular, Consolas, monospace);
  font-size: 13px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.file-name a:hover { color: var(--repo-color-link); text-decoration: underline; }

.file-message {
  flex: 1;
  min-width: 0;
  font-size: 12px;
  color: var(--repo-color-text-tertiary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.file-time {
  flex: 0 0 auto;
  font-size: 12px;
  color: var(--repo-color-text-tertiary);
  text-align: right;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  color: var(--repo-color-icon);
  flex: 0 0 auto;
}

/* 按钮（原 .btn 体系） */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 30px;
  padding: 0 12px;
  font-size: 13px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  border-radius: 6px;
  border: 1px solid var(--repo-color-border);
  background-color: var(--repo-color-bg);
  color: var(--repo-color-text);
  text-decoration: none;
  cursor: pointer;
  transition: background-color .12s ease, border-color .12s ease;
}

.btn:hover {
  background-color: var(--repo-color-bg-hover);
  border-color: var(--repo-color-border-hover);
  text-decoration: none;
}

.btn-primary {
  background-color: var(--repo-color-primary);
  border-color: var(--repo-color-primary);
  color: var(--repo-color-bg);
}

.btn-primary:hover {
  background-color: var(--repo-color-primary-hover);
  border-color: var(--repo-color-primary-hover);
  color: var(--repo-color-bg);
}

.btn-secondary { background-color: var(--repo-color-bg); color: var(--repo-color-text); }
.btn.disabled { opacity: .5; pointer-events: none; }

/* 通用布局容器 */
.two-column { display: flex; align-items: flex-start; gap: 24px; }
.nav-links { display: flex; gap: 8px; }
.logo-area { display: flex; align-items: center; gap: 16px; }

/* 单文件查看页（view_code / view_markdown） */
.code-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  flex-wrap: wrap;
  padding: 10px 16px;
  background-color: var(--repo-color-bg-secondary);
  border: 1px solid var(--repo-color-border);
  border-bottom: 0;
  border-radius: 6px 6px 0 0;
  font-size: 13px;
}

.code-content {
  border: 1px solid var(--repo-color-border);
  border-radius: 0 0 6px 6px;
  overflow: auto;
  background-color: var(--repo-color-bg);
}

.code-content pre { margin: 0; border: 0; border-radius: 0; }
.code-content pre code { white-space: pre; }

/* 发行版页的状态位 */
.release-status { display: inline-flex; align-items: center; gap: 6px; }

/* 缺失的工具类（css.css 只到 repo-py-6 / 无 text-2xl、3xl） */
.repo-py-8 { padding-top: 32px; padding-bottom: 32px; }
.repo-py-10 { padding-top: 40px; padding-bottom: 40px; }
.repo-space-y-3 > * + * { margin-top: 12px; }
.repo-text-2xl { font-size: 20px; line-height: 1.35; }
.repo-text-3xl { font-size: 24px; line-height: 1.3; }

/* ============================================================================
 发行版页：release 卡片 / 标签 / Assets 表
 ========================================================================== */

.dv-release {
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  margin-bottom: 16px;
  background-color: var(--repo-color-bg);
}

/* 头部：左侧 tag + Latest 徽标 + 元信息，右侧折叠箭头 */
.dv-release-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  padding: 12px 16px;
  background-color: var(--repo-color-bg-secondary);
  border-bottom: 1px solid var(--repo-color-border);
  border-radius: 6px 6px 0 0;
}

.dv-release.is-open .dv-release-head { border-radius: 6px 6px 0 0; }
.dv-release:not(.is-open) .dv-release-head { border-bottom: 0; border-radius: 6px; }

.dv-release-head-main { min-width: 0; }

.dv-release-tag {
  margin: 0 0 4px;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.3;
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.dv-release-tag a { color: var(--repo-color-link); text-decoration: none; }
.dv-release-tag a:hover { text-decoration: underline; }

.dv-release-meta {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--repo-color-text-secondary);
}

.dv-dot { color: var(--repo-color-text-tertiary); }

.dv-release-head-aside { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }

.dv-release-toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  background-color: var(--repo-color-bg);
  color: var(--repo-color-icon);
  cursor: pointer;
  transition: background-color .12s ease, transform .15s ease;
}

.dv-release-toggle:hover { background-color: var(--repo-color-bg-hover); }
.dv-release.is-open .dv-release-toggle { transform: rotate(180deg); }

/* 徽标（GitHub 的 Label） */
.dv-label {
  display: inline-block;
  padding: 0 7px;
  font-size: 12px;
  font-weight: 500;
  line-height: 18px;
  color: var(--repo-color-text-secondary);
  border: 1px solid var(--repo-color-border);
  border-radius: 2em;
  white-space: nowrap;
}

.dv-label-latest {
  color: var(--repo-color-bg);
  background-color: var(--repo-color-primary);
  border-color: var(--repo-color-primary);
}

/* 正文 */
.dv-release-body { padding: 0; }
.dv-release-body .dv-markdown { padding: 16px; }

/* Assets 区 */
.dv-assets {
  border-top: 1px solid var(--repo-color-border);
  margin-top: 0;
}

.dv-assets-head {
  padding: 10px 16px;
  font-size: 13px;
  font-weight: 600;
  background-color: var(--repo-color-bg-secondary);
  border-bottom: 1px solid var(--repo-color-border);
  color: var(--repo-color-text-secondary);
}

.dv-assets-head i { margin-right: 6px; color: var(--repo-color-icon); }

.dv-asset-row {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 8px 16px;
  border-bottom: 1px solid var(--repo-color-border-light);
  font-size: 13px;
}

.dv-asset-row:last-child { border-bottom: 0; }
.dv-asset-row:hover { background-color: var(--repo-color-bg-secondary); }

.dv-asset-name {
  flex: 1;
  min-width: 0;
  font-family: var(--repo-font-family-mono, ui-monospace, SFMono-Regular, Consolas, monospace);
  font-size: 12.5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.dv-asset-name i { color: var(--repo-color-icon); margin-right: 6px; }

.dv-asset-size {
  flex: 0 0 auto;
  font-size: 12px;
  color: var(--repo-color-text-tertiary);
  white-space: nowrap;
}

/* 卡片底部链接 */
.dv-release-foot {
  display: flex;
  align-items: center;
  gap: 16px;
  flex-wrap: wrap;
  padding: 10px 16px;
  border-top: 1px solid var(--repo-color-border);
  font-size: 12.5px;
}

.dv-release-foot a { color: var(--repo-color-link); text-decoration: none; }
.dv-release-foot a:hover { text-decoration: underline; }
.dv-release-foot i { margin-right: 5px; color: var(--repo-color-icon); }

/* 通用的 markdown 正文容器（release 说明 / README 共用） */
.dv-markdown { font-size: 15px; line-height: 1.65; color: var(--repo-color-text); }
.dv-markdown > :first-child { margin-top: 0 !important; }
.dv-markdown > :last-child { margin-bottom: 0 !important; }
.dv-markdown h1, .dv-markdown h2, .dv-markdown h3, .dv-markdown h4 {
  margin: 22px 0 14px; font-weight: 600; line-height: 1.3;
}
.dv-markdown h1 { font-size: 1.7em; padding-bottom: .3em; border-bottom: 1px solid var(--repo-color-border); }
.dv-markdown h2 { font-size: 1.4em; padding-bottom: .3em; border-bottom: 1px solid var(--repo-color-border); }
.dv-markdown h3 { font-size: 1.18em; }
.dv-markdown p { margin: 0 0 14px; }
.dv-markdown ul, .dv-markdown ol { margin: 0 0 14px; padding-left: 1.8em; }
.dv-markdown li { margin-bottom: 5px; }
.dv-markdown blockquote {
  margin: 0 0 14px; padding: 0 1em;
  color: var(--repo-color-text-secondary);
  border-left: .25em solid var(--repo-color-border);
}
.dv-markdown table { border-collapse: collapse; width: 100%; margin-bottom: 14px; font-size: 13.5px; }
.dv-markdown th, .dv-markdown td { padding: 6px 13px; border: 1px solid var(--repo-color-border); text-align: left; }
.dv-markdown th { font-weight: 600; background-color: var(--repo-color-bg-secondary); }
.dv-markdown hr { height: 1px; border: 0; margin: 24px 0; background-color: var(--repo-color-border); }
.dv-markdown img { max-width: 100%; height: auto; }

/* ============================================================================
 反馈表单
 作用域限定在 .dv-form-body 内，只改外观，不动结构与 id。
 防爬虫相关元素（蜜罐 / 验证码 / 隐藏字段 / 交互舞台）保持原位。
 ========================================================================== */

.dv-form-head { padding: 16px 20px; }

.dv-form-title {
  margin: 0 0 4px;
  font-size: 18px;
  font-weight: 600;
  line-height: 1.3;
}

.dv-form-title i { color: var(--repo-color-icon); margin-right: 6px; }
.dv-form-desc { margin: 0; font-size: 13px; color: var(--repo-color-text-secondary); }

.dv-form-body { padding: 20px; }

/* 字段块之间的节奏 */
.dv-form-body .repo-mb-4 { margin-bottom: 20px; }

/* label：GitHub 是加粗、14px、与控件间距 6px */
.dv-form-body label {
  display: block;
  margin-bottom: 6px;
  font-size: 14px;
  font-weight: 600;
  color: var(--repo-color-text);
}

/* 输入框 / 文本域：32px 高、6px 圆角、聚焦 3px 蓝色外环 */
.dv-form-body .repo-input,
.dv-form-body .repo-textarea,
.dv-form-body input[type="email"],
.dv-form-body input[type="text"],
.dv-form-body textarea {
  width: 100%;
  height: 32px;
  padding: 5px 12px;
  font-family: inherit;
  font-size: 14px;
  line-height: 20px;
  color: var(--repo-color-text);
  background-color: var(--repo-color-bg);
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  outline: none;
  box-sizing: border-box;
}

.dv-form-body textarea { height: auto; min-height: 140px; resize: vertical; padding: 8px 12px; }

.dv-form-body .repo-input:focus,
.dv-form-body .repo-textarea:focus,
.dv-form-body input:focus,
.dv-form-body textarea:focus {
  border-color: var(--repo-color-primary);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .3);
}

.dv-form-body input::placeholder,
.dv-form-body textarea::placeholder { color: var(--repo-color-text-tertiary); }

/* 说明小字 */
.dv-form-body .repo-text-xs { font-size: 12px; color: var(--repo-color-text-tertiary); margin-top: 4px; }

/* 验证码区：给一块浅底，与正文拉开层次 */
.dv-form-body .cap-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }

/* 提交行 */
.dv-form-body .repo-flex { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }

/* 用 order 调整视觉顺序（不动 DOM）：状态说明在前，按钮在后。
 form 是普通块流，order 只在这两个兄弟节点间生效。 */
.dv-form-body form { display: flex; flex-direction: column; }
.dv-form-body form > .ab-shield { order: -1; margin-top: 0; margin-bottom: 12px; }

.dv-form-body .repo-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 32px;
  padding: 0 14px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  border-radius: 6px;
  border: 1px solid var(--repo-color-border);
  background-color: var(--repo-color-bg-secondary);
  color: var(--repo-color-text);
  cursor: pointer;
  transition: background-color .12s ease, border-color .12s ease;
}

.dv-form-body .repo-btn:hover { background-color: var(--repo-color-bg-hover); }

.dv-form-body .repo-btn--primary {
  background-color: var(--repo-color-primary);
  border-color: var(--repo-color-primary);
  color: var(--repo-color-bg);
}

.dv-form-body .repo-btn--primary:hover {
  background-color: var(--repo-color-primary-hover);
  border-color: var(--repo-color-primary-hover);
}

.dv-form-body .repo-btn[disabled] { opacity: .55; cursor: not-allowed; }

/* 提示条（错误 / 成功） */
.dv-form-body .repo-message {
  padding: 12px 16px;
  font-size: 14px;
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  background-color: var(--repo-color-bg-secondary);
}

.dv-form-body .repo-message--error { color: var(--repo-color-danger); border-color: var(--repo-color-danger); }
.dv-form-body .repo-message--success { color: var(--repo-color-success); border-color: var(--repo-color-success); }

/* 防爬虫状态说明：低调一行，不喧哗 */
.dv-form-body .ab-shield {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  margin-top: 12px;
  font-size: 12px;
  color: var(--repo-color-text-tertiary);
}

.dv-form-body .ab-shield i { color: var(--repo-color-success); }
.dv-form-body #ab-msg { min-height: 18px; margin-top: 8px; font-size: 12px; color: var(--repo-color-text-secondary); }
.dv-form-body #ab-msg.err { color: var(--repo-color-danger); }
.dv-form-body #ab-msg.ok { color: var(--repo-color-success); }

/* ============================================================================
 原生 Issues 编辑区
 标题大输入框 / Write·Preview 标签页 / markdown 工具条 / 两栏元数据
 ========================================================================== */

/* 两栏 */
.dv-issue { display: flex; align-items: flex-start; gap: 24px; }
.dv-issue-main { flex: 1; min-width: 0; }
.dv-issue-side { flex: 0 0 296px; width: 296px; font-size: 12px; }

.dv-issue-side-block {
  padding-bottom: 16px;
  margin-bottom: 16px;
  border-bottom: 1px solid var(--repo-color-border-light);
}
.dv-issue-side-block:last-child { border-bottom: 0; margin-bottom: 0; }

.dv-issue-side-title {
  font-size: 12px;
  font-weight: 600;
  color: var(--repo-color-text-secondary);
  margin-bottom: 8px;
}

.dv-issue-side-list { list-style: none; margin: 0; padding: 0; }
.dv-issue-side-list li {
  position: relative;
  padding-left: 16px;
  margin-bottom: 8px;
  font-size: 12px;
  line-height: 1.5;
  color: var(--repo-color-text-secondary);
}
.dv-issue-side-list li::before {
  content: "";
  position: absolute;
  left: 2px; top: 7px;
  width: 4px; height: 4px;
  border-radius: 50%;
  background-color: var(--repo-color-text-tertiary);
}

.dv-faq-item {
  font-size: 12px;
  line-height: 1.55;
  color: var(--repo-color-text-secondary);
  margin-bottom: 10px;
}
.dv-faq-item b { color: var(--repo-color-text); }
.dv-faq-item span { color: var(--repo-color-text-tertiary); }

/* 标题输入：大号、无边框、只有底部一条线 */
.dv-title-input {
  width: 100% !important;
  height: auto !important;
  padding: 8px 0 !important;
  margin-bottom: 16px;
  font-size: 20px !important;
  font-weight: 400 !important;
  line-height: 1.4 !important;
  color: var(--repo-color-text) !important;
  background: transparent !important;
  border: 0 !important;
  border-bottom: 1px solid var(--repo-color-border) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  box-sizing: border-box;
}
.dv-title-input:focus { outline: none; border-bottom-color: var(--repo-color-primary) !important; }
.dv-title-input::placeholder { color: var(--repo-color-text-tertiary); font-weight: 400; }

/* 标签页（Write / Preview） */
.dv-editor-tabs {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 8px;
}
.dv-tab {
  padding: 4px 8px;
  font-family: inherit;
  font-size: 14px;
  font-weight: 500;
  color: var(--repo-color-text-secondary);
  background: transparent;
  border: 0;
  border-radius: 6px;
  cursor: pointer;
}
.dv-tab:hover { background-color: var(--repo-color-bg-hover); color: var(--repo-color-text); }
.dv-tab.is-active { font-weight: 600; color: var(--repo-color-text); background-color: var(--repo-color-bg-tertiary); }

/* 编辑器外框 */
.dv-md-editor {
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  overflow: hidden;
  background-color: var(--repo-color-bg);
}
.dv-md-editor:focus-within {
  border-color: var(--repo-color-primary);
  box-shadow: 0 0 0 3px rgba(59, 130, 246, .3);
}

/* 工具条 */
.dv-toolbar {
  display: flex;
  align-items: center;
  gap: 2px;
  padding: 6px 8px;
  background-color: var(--repo-color-bg-secondary);
  border-bottom: 1px solid var(--repo-color-border);
}
.dv-tool-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px; height: 28px;
  font-size: 12px;
  color: var(--repo-color-icon);
  background: transparent;
  border: 0;
  border-radius: 6px;
  cursor: pointer;
}
.dv-tool-btn:hover { background-color: var(--repo-color-bg-hover); color: var(--repo-color-text); }
.dv-tool-btn:active { background-color: var(--repo-color-bg-active); }

/* 正文文本域：等宽、无边框（边框由 .dv-md-editor 提供） */
.dv-issue .dv-textarea {
  display: block;
  width: 100%;
  min-height: 200px;
  padding: 12px;
  font-family: var(--repo-font-family-mono, ui-monospace, SFMono-Regular, Consolas, monospace);
  font-size: 13px;
  line-height: 1.6;
  color: var(--repo-color-text);
  background-color: var(--repo-color-bg);
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  outline: none;
  resize: vertical;
  box-sizing: border-box;
}

/* 预览面板 */
.dv-preview {
  min-height: 200px;
  padding: 12px;
  background-color: var(--repo-color-bg);
  font-size: 14px;
  line-height: 1.65;
}
.dv-preview-empty { color: var(--repo-color-text-tertiary); font-style: italic; margin: 0; }

/* 隐藏的 Loading 占位（GitHub 那个 <pre class="blankslate"> 的等价物，这里不需要显示） */
.dv-spinner { display: none !important; }

/* 校验区：浅底 + 标题 */
.dv-verify-box {
  padding: 12px 16px !important;
  background-color: var(--repo-color-bg-secondary);
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
}
.dv-verify-title { margin-bottom: 8px !important; }

/* 主/次按钮（注入用的类） */
.dv-btn-primary {
  background-color: var(--repo-color-primary) !important;
  border-color: var(--repo-color-primary) !important;
  color: var(--repo-color-bg) !important;
}
.dv-btn-primary:hover { background-color: var(--repo-color-primary-hover) !important; }
.dv-btn-secondary { background-color: var(--repo-color-bg-secondary); }

/* form 内的视觉次序（DOM 顺序不变） */
.dv-issue form { display: flex; flex-direction: column; }
.dv-issue form > .repo-flex { margin-top: 4px; }

/* 窄屏：侧栏落到下方 */
@media (max-width: 1012px) {
  .dv-issue { flex-direction: column; }
  .dv-issue-side { flex: 1 1 auto; width: 100%; }
}

/* ============================================================================
 语言切换（顶栏右侧下拉）
 ========================================================================== */

.dv-lang { position: relative; flex: 0 0 auto; }

.dv-lang-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 28px;
  padding: 0 10px;
  font-family: inherit;
  font-size: 12.5px;
  font-weight: 500;
  color: var(--repo-color-text-secondary);
  background-color: transparent;
  border: 1px solid var(--repo-color-border);
  border-radius: 6px;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color .12s ease, color .12s ease, border-color .12s ease;
}
.dv-lang-btn:hover {
  color: var(--repo-color-text);
  background-color: var(--repo-color-bg-tertiary);
}
.dv-lang-btn i:first-child { font-size: 13px; color: var(--repo-color-icon); }
.dv-lang-caret { font-size: 9px; color: var(--repo-color-text-tertiary); }

.dv-lang-menu {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  z-index: 100;
  min-width: 148px;
  padding: 4px;
  background-color: var(--repo-color-bg);
  border: 1px solid var(--repo-color-border);
  border-radius: 8px;
  box-shadow: var(--dv-shadow-lg, 0 8px 24px rgba(0, 0, 0, .12));
}
.dv-lang-menu[hidden] { display: none; }

.dv-lang-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 6px 10px;
  font-size: 13px;
  color: var(--repo-color-text);
  text-decoration: none;
  border-radius: 6px;
  white-space: nowrap;
}
.dv-lang-item:hover { background-color: var(--repo-color-bg-hover); text-decoration: none; }
.dv-lang-item.is-active { font-weight: 600; background-color: var(--repo-color-bg-tertiary); }
.dv-lang-item i { font-size: 11px; color: var(--repo-color-primary); }

/* ============================================================================
 响应式
 ========================================================================== */

@media (max-width: 1012px) {
  .dv-layout { flex-direction: column; }
  .dv-sidebar { flex: 1 1 auto; width: 100%; position: static; order: 2; }
  .dv-layout > .dv-main { order: 1; width: 100%; }
}

@media (max-width: 767px) {
  .dv-page, .main-container { padding: 0 16px 32px; }
  .dv-topbar-inner { padding: 0 16px; gap: 8px; }
  .dv-topnav a { padding: 0 6px; font-size: 13px; }
  .dv-repo-title .dv-name, .dv-repo-title .dv-owner, .dv-repo-title .dv-slash { font-size: 18px; }
  .dv-file-row { grid-template-columns: 16px minmax(0, 1fr) 64px; gap: 12px; padding: 8px 12px; }
  .dv-markdown { padding: 16px; font-size: 15px; }
  .dv-search { min-width: 0; flex: 1 1 auto; }
}

/* 打印：只留正文 */
@media print {
  .dv-topbar, .dv-repo-actions, .dv-underlinenav, .dv-sidebar, .dv-readme-head { display: none !important; }
  .dv-box, .dv-markdown { border: 0; padding: 0; }
}

/* ==========================================================================
 代码浏览：面包屑 + 文件视图（目录/文件三态共用同一布局，只换主区）
 仅消费 --dv-* token，不引入新色值
 ========================================================================== */

.dv-crumbs {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 12px;
  font-size: 14px;
  line-height: 1.5;
}
.dv-crumb {
  color: var(--dv-accent-fg);
  text-decoration: none;
  padding: 2px 4px;
  border-radius: var(--dv-radius-sm);
}
.dv-crumb:hover { text-decoration: underline; }
.dv-crumb.is-current {
  color: var(--dv-fg-default);
  font-weight: 600;
  cursor: default;
}
.dv-crumb-sep { color: var(--dv-fg-subtle); }

/* 文件视图：操作条 */
.dv-blob-actions {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  flex-wrap: wrap;
  padding: 8px 16px;
  background: var(--dv-canvas-subtle);
  border-bottom: 1px solid var(--dv-border-muted);
}
.dv-blob-meta { font-size: 12px; color: var(--dv-fg-muted); }
.dv-blob-btns { display: flex; align-items: center; gap: 8px; }

/* 文件视图：代码区 */
.dv-code-wrap { overflow-x: auto; }
.dv-code {
  margin: 0;
  padding: 16px;
  font-family: var(--dv-font-mono);
  font-size: 12.5px;
  line-height: 1.55;
  tab-size: 4;
  background: var(--dv-canvas-default);
  overflow-x: auto;
}
.dv-code code { font-family: inherit; background: none; padding: 0; }

/* 文件视图：Markdown 正文沿用 .dv-markdown，这里只补内边距 */
.dv-box > .dv-markdown { padding: 16px 24px; }

/* hljs 未加载时的兜底：代码仍然可读 */
.dv-code .hljs { background: transparent; }

/* ==========================================================================
 图标配色：Font Awesome 默认继承文字色（黑/灰），这里按语义逐个上色。
 只作用于图标本身（i.fa-* / .fa-* 伪元素），不触碰任何文字与容器配色，
 也不改动 base.html 里的 :root 调色板。
 !important 用于压过模板里的内联 style="color:var(--dv-fg-muted)"。
 ========================================================================== */

/* 代码 / 版本 / 分支，站点主色系 */
[data-lucide="code"]                  { color: #2563eb !important; }  /* 蓝 代码 */
[data-lucide="git-branch"]    { color: #16a34a !important; }  /* 绿 分支 */
[data-lucide="tag"]                    { color: #7c3aed !important; }  /* 紫 版本标签 */
[data-lucide="package"]                    { color: #0d9488 !important; }  /* 青 包 */
[data-lucide="box"]                  { color: #0d9488 !important; }

/* 目录 / 归档，暖色 */
[data-lucide="folder"], [data-lucide="folder-open"], [data-lucide="folder"], [data-lucide="folder-open"],
[data-lucide="folder-plus"]    { color: #f59e0b !important; }  /* 琥珀 文件夹 */
[data-lucide="file-archive"]    { color: #ea580c !important; }  /* 橙 压缩包 */
[data-lucide="archive"]    { color: #b45309 !important; }  /* 深琥珀 归档 */

/* 文件 */
[data-lucide="file"], [data-lucide="file-text"], [data-lucide="file"], [data-lucide="file-text"]
                                             { color: #64748b !important; }  /* 石板灰 普通文件 */
[data-lucide="book-open"]        { color: #0ea5e9 !important; }  /* 天蓝 README */
[data-lucide="image"]                { color: #db2777 !important; }  /* 玫红 图片 */

/* 动作 */
[data-lucide="download"]          { color: #0d9488 !important; }  /* 青绿 下载 */
[data-lucide="upload"]              { color: #0d9488 !important; }
[data-lucide="copy"]                  { color: #4f46e5 !important; }  /* 靛蓝 复制 */
[data-lucide="link"]                  { color: #0284c7 !important; }
[data-lucide="search"]
                                             { color: #2563eb !important; }  /* 蓝 搜索 */
[data-lucide="corner-up-left"]{ color: #475569 !important; }  /* 灰 返回上级 */
[data-lucide="arrow-right"]    { color: #475569 !important; }

/* 状态 */
[data-lucide="check"]                { color: #16a34a !important; }  /* 绿 选中 */
[data-lucide="circle-check"]  { color: #16a34a !important; }  /* 绿 成功 */
[data-lucide="circle-x"]  { color: #dc2626 !important; }  /* 红 失败 */
[data-lucide="triangle-alert"]
                                             { color: #ea580c !important; }  /* 橙 警告 */
[data-lucide="shield-half"]{ color: #7c3aed !important; }  /* 紫 安全 */
[data-lucide="scale"]
                                             { color: #a16207 !important; }  /* 金 许可证 */
[data-lucide="thumbs-up"]        { color: #2563eb !important; }
[data-lucide="party-popper"]
                                             { color: #eab308 !important; }  /* 金 庆祝 */
[data-lucide="wand-sparkles"]
                                             { color: #a855f7 !important; }  /* 紫 魔法 */
[data-lucide="rotate-cw"]              { color: #0d9488 !important; }  /* 青绿 刷新 */
[data-lucide="settings"]                  { color: #64748b !important; }  /* 灰 设置 */
[data-lucide="wrench"]
                                             { color: #64748b !important; }

/* 沟通 / 文档 / 语言 */
[data-lucide="message-square-more"], [data-lucide="messages-square"], [data-lucide="message-square-more"], [data-lucide="messages-square"]
                                             { color: #0891b2 !important; }  /* 青 评论/反馈 */
[data-lucide="mail"]          { color: #0ea5e9 !important; }
[data-lucide="send"]    { color: #0891b2 !important; }
[data-lucide="languages"]          { color: #7c3aed !important; }  /* 紫 语言切换 */
[data-lucide="clipboard-list"]
                                             { color: #0891b2 !important; }
[data-lucide="heading"], [data-lucide="bold"], [data-lucide="italic"], [data-lucide="quote"], [data-lucide="list"], [data-lucide="list-ordered"]
                                             { color: #334155 !important; }  /* 编辑器工具条：深灰 */

/* 其他 */
[data-lucide="music"]                { color: #db2777 !important; }  /* 玫红 音频 */
[data-lucide="play"]                  { color: #16a34a !important; }
[data-lucide="zap"]                  { color: #eab308 !important; }  /* 黄 性能 */
[data-lucide="chart-column-increasing"]  { color: #2563eb !important; }
[data-lucide="trash-2"]        { color: #dc2626 !important; }  /* 红 删除 */
[data-lucide="chevron-down"]      { color: #64748b !important; }  /* 灰 下拉箭头 */

/* 平台标识（保留各自品牌色） */
svg.smss-brand-apple, svg.smss-brand-apple                { color: #1f2937 !important; }  /* 苹果深灰 */
svg.smss-brand-linux, svg.smss-brand-linux                { color: #f59e0b !important; }  /* 企鹅黄 */
svg.smss-brand-windows, svg.smss-brand-windows            { color: #2563eb !important; }  /* 视窗蓝 */

/* 悬停时略提亮，强化可点感 */
a:hover > i[class*="fa-"], button:hover > i[class*="fa-"] { filter: brightness(1.12); }

/* Git 侧栏区块（发行页 / 代码页共用） */
.dv-git-hint { margin: 0 0 8px; font-size: 12px; color: var(--dv-fg-muted); line-height: 1.5; }
.dv-git-hint i { color: #0891b2; }
.dv-git-cmd {
  display: flex; align-items: center; gap: 6px;
  background: var(--dv-canvas-subtle);
  border: 1px solid var(--dv-border-default);
  border-radius: var(--dv-radius-sm);
  padding: 6px 8px;
}
.dv-git-cmd code {
  flex: 1; min-width: 0;
  font-family: var(--dv-font-mono); font-size: 11.5px;
  color: var(--dv-fg-default);
  overflow-x: auto; white-space: nowrap;
  background: none; padding: 0;
}
.dv-btn-copy { padding: 0 6px !important; height: 24px !important; flex: none; }


/* ============================================================
 Star 按钮（/code 仓库头部）
 只用已有 --dv-* token，不引入新配色
 ============================================================ */
.dv-star-btn {
    cursor: pointer;
    font: inherit;
    gap: 6px;
}
.dv-star-btn:disabled { opacity: .6; cursor: progress; }
.dv-star-btn .dv-star-count {
    display: inline-block;
    min-width: 18px;
    padding: 0 6px;
    margin-left: 2px;
    font-size: 11px;
    font-weight: 600;
    line-height: 18px;
    text-align: center;
    border-radius: 9px;
    background: var(--dv-bg-subtle, #f0f2f5);
    color: var(--dv-fg-muted, #57606a);
}
.dv-star-btn.is-starred {
    border-color: #d4a72c;
    color: #9a6700;
}
.dv-star-btn.is-starred .dv-star-count {
    background: #fff8c5;
    color: #7d4e00;
}

/* 统计页 */
.stats-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px;
    margin: 16px 0 24px;
}
.stats-card {
    padding: 16px;
    border: 1px solid var(--dv-border, #d0d7de);
    border-radius: 6px;
    background: var(--dv-bg-default, #fff);
}
.stats-card .stats-label {
    font-size: 12px;
    color: var(--dv-fg-muted, #57606a);
    margin-bottom: 6px;
}
.stats-card .stats-value {
    font-size: 26px;
    font-weight: 600;
    line-height: 1.2;
}
.stats-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.stats-table th, .stats-table td {
    padding: 8px 10px;
    text-align: left;
    border-bottom: 1px solid var(--dv-border-muted, #d8dee4);
}
.stats-table th {
    font-weight: 600;
    color: var(--dv-fg-muted, #57606a);
    font-size: 12px;
    white-space: nowrap;
}
.stats-table td.num { text-align: right; font-variant-numeric: tabular-nums; }
.stats-empty { padding: 28px; text-align: center; color: var(--dv-fg-muted, #57606a); }
.stats-bar {
    display: inline-block;
    height: 8px;
    border-radius: 4px;
    background: var(--dv-accent, #0969da);
    vertical-align: middle;
    min-width: 2px;
}


/* ============================================================
 下拉分组标题（版本 / 分支 / 目录）
 ============================================================ */
.dv-menu-label {
    padding: 6px 12px 4px;
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .02em;
    color: var(--dv-fg-muted, #57606a);
    text-transform: uppercase;
    user-select: none;
}
.dv-menu-label:not(:first-child) {
    margin-top: 4px;
    border-top: 1px solid var(--dv-border-muted, #d8dee4);
    padding-top: 8px;
}

/* ============================================================
 404 页
 ============================================================ */
.e404-wrap {
    max-width: 560px;
    margin: 64px auto;
    padding: 0 16px;
    text-align: center;
}
.e404-code {
    font-size: 76px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -.03em;
    color: var(--dv-fg-muted, #57606a);
    opacity: .45;
}
.e404-heading {
    margin: 14px 0 6px;
    font-size: 22px;
    font-weight: 600;
}
.e404-desc {
    margin: 0 0 20px;
    color: var(--dv-fg-muted, #57606a);
    font-size: 14px;
}
.e404-count {
    margin: 0 0 8px;
    font-size: 14px;
    color: var(--dv-fg-muted, #57606a);
}
.e404-count #e404-num {
    font-weight: 700;
    color: var(--dv-accent, #0969da);
    font-variant-numeric: tabular-nums;
}
.e404-bar {
    height: 4px;
    border-radius: 2px;
    background: var(--dv-border-muted, #d8dee4);
    overflow: hidden;
    margin: 0 auto 24px;
    max-width: 260px;
}
.e404-bar > i {
    display: block;
    height: 100%;
    width: 0;
    background: var(--dv-accent, #0969da);
    transition: width 1s linear;
}
.e404-actions {
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
}
.e404-path {
    margin-top: 26px;
    font-size: 12px;
    color: var(--dv-fg-muted, #57606a);
    word-break: break-all;
}
.e404-path code {
    padding: 2px 6px;
    border-radius: 4px;
    background: var(--dv-bg-subtle, #f0f2f5);
}

/* 版本下拉为空时的提示（该仓库还没有版本） */
.dv-menu-empty {
    padding: 10px 12px;
    font-size: 12px;
    color: var(--dv-fg-muted, #57606a);
    white-space: nowrap;
}


/* ============================================================
 /license AP_DS-OSL 2.0 全文页
 ============================================================ */
.lic-wrap { max-width: 1180px; margin: 0 auto; padding: 24px 16px 72px; }

/* 顶部 */
.lic-hero { text-align: center; padding: 8px 0 20px; border-bottom: 1px solid var(--dv-border-muted, #d8dee4); }
.lic-hero-badge {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 4px 12px; border-radius: 999px; font-size: 12px; font-weight: 600;
    letter-spacing: .04em; color: #fff; background: var(--dv-accent, #0969da);
}
.lic-hero-title { margin: 14px 0 8px; font-size: 27px; line-height: 1.3; font-weight: 700; }
.lic-hero-sub { margin: 0 auto; max-width: 720px; color: var(--dv-fg-muted, #57606a); font-size: 14px; line-height: 1.7; }
.lic-meta { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 28px; margin: 20px 0 0; }
.lic-meta > div { text-align: left; }
.lic-meta dt { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--dv-fg-muted, #57606a); }
.lic-meta dd { margin: 2px 0 0; font-size: 14px; font-weight: 600; }
.lic-hero-actions { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-top: 22px; }

/* 不是 MIT 的提示 */
.lic-alert {
    display: flex; gap: 12px; align-items: flex-start;
    margin: 22px 0; padding: 14px 16px; border-radius: 8px;
    background: var(--dv-bg-subtle, #f0f2f5);
    border-left: 4px solid var(--dv-warning, #d29922);
}
.lic-alert > i { color: var(--dv-warning, #d29922); margin-top: 3px; flex: 0 0 auto; }
.lic-alert b { display: block; margin-bottom: 4px; }
.lic-alert p { margin: 0; font-size: 13.5px; line-height: 1.75; color: var(--dv-fg-muted, #57606a); }

/* 概览 */
.lic-intro { margin: 26px 0; }
.lic-h2-plain { font-size: 18px; font-weight: 600; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }
.lic-h2-plain i { color: var(--dv-accent, #0969da); }
.lic-intro p { margin: 0 0 12px; line-height: 1.8; }
.lic-ul { margin: 10px 0 0; padding-left: 20px; }
.lic-ul li { margin-bottom: 8px; line-height: 1.75; }

/* 三栏：可以 / 不可以 / 应该 */
.lic-cols { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; margin: 26px 0 34px; }
.lic-col { padding: 16px 18px; border-radius: 10px; border: 1px solid var(--dv-border-muted, #d8dee4); background: var(--dv-bg-default, #fff); }
.lic-col h3 { margin: 0 0 12px; font-size: 15px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.lic-col ul { margin: 0; padding-left: 18px; }
.lic-col li { margin-bottom: 7px; font-size: 13.5px; line-height: 1.65; }
.lic-col--ok  h3 i { color: var(--dv-success, #1a7f37); }
.lic-col--no  h3 i { color: var(--dv-danger,  #cf222e); }
.lic-col--must h3 i { color: var(--dv-accent, #0969da); }

/* 全文：目录 + 正文 */
.lic-full { display: grid; grid-template-columns: 244px minmax(0, 1fr); gap: 28px; align-items: start; margin-top: 12px; }
@media (max-width: 900px) { .lic-full { grid-template-columns: 1fr; } }

.lic-toc { position: sticky; top: 84px; }
.lic-toc-inner { border: 1px solid var(--dv-border-muted, #d8dee4); border-radius: 10px; padding: 14px; background: var(--dv-bg-default, #fff); }
.lic-toc-title { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--dv-fg-muted, #57606a); margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }
#lic-toc-nav { display: flex; flex-direction: column; gap: 1px; max-height: 52vh; overflow-y: auto; }
#lic-toc-nav a {
    display: flex; gap: 8px; align-items: baseline; padding: 6px 9px; border-radius: 6px;
    font-size: 13px; color: var(--dv-fg-default, #1f2328); text-decoration: none;
    border-left: 2px solid transparent; transition: background .12s, border-color .12s;
}
#lic-toc-nav a:hover { background: var(--dv-bg-subtle, #f0f2f5); }
#lic-toc-nav a.is-active { background: var(--dv-bg-subtle, #f0f2f5); border-left-color: var(--dv-accent, #0969da); font-weight: 600; }
#lic-toc-nav a span { flex: 0 0 15px; text-align: right; color: var(--dv-fg-muted, #57606a); font-variant-numeric: tabular-nums; }
.lic-toc-foot { margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--dv-border-muted, #d8dee4); font-size: 11px; color: var(--dv-fg-muted, #57606a); }
.lic-progress { height: 3px; border-radius: 2px; background: var(--dv-border-muted, #d8dee4); margin-top: 6px; overflow: hidden; }
.lic-progress > i { display: block; height: 100%; width: 0; background: var(--dv-accent, #0969da); transition: width .12s linear; }

.lic-doc { border: 1px solid var(--dv-border-muted, #d8dee4); border-radius: 10px; padding: 30px 34px 34px; background: var(--dv-bg-default, #fff); }
@media (max-width: 600px) { .lic-doc { padding: 20px 18px 24px; } }
.lic-doc-head { padding-bottom: 18px; border-bottom: 1px solid var(--dv-border-muted, #d8dee4); margin-bottom: 26px; }
.lic-doc-head h2 { margin: 0 0 6px; font-size: 20px; font-weight: 700; line-height: 1.35; }
.lic-doc-ver { margin: 0 0 12px; font-size: 13px; color: var(--dv-fg-muted, #57606a); }
.lic-doc-line { margin: 3px 0; font-size: 13px; line-height: 1.7; }

.lic-sec { margin-bottom: 30px; scroll-margin-top: 90px; }
.lic-h2 { display: flex; gap: 10px; align-items: baseline; font-size: 17px; font-weight: 650; margin: 0 0 14px; padding-bottom: 8px; border-bottom: 1px solid var(--dv-border-muted, #d8dee4); }
.lic-num { flex: 0 0 auto; min-width: 22px; height: 22px; border-radius: 6px; background: var(--dv-accent, #0969da); color: #fff; font-size: 12px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; padding: 0 5px; }
.lic-h3 { font-size: 14.5px; font-weight: 600; margin: 20px 0 9px; }
.lic-body p { margin: 0 0 11px; font-size: 13.5px; line-height: 1.85; }
.lic-n { display: inline-block; min-width: 34px; font-weight: 600; color: var(--dv-fg-muted, #57606a); font-variant-numeric: tabular-nums; }
.lic-quote {
    margin: 10px 0 14px; padding: 12px 16px; border-radius: 8px;
    background: var(--dv-bg-subtle, #f0f2f5); border-left: 3px solid var(--dv-accent, #0969da);
    font-size: 13px; line-height: 1.9; color: var(--dv-fg-muted, #57606a);
}
.lic-caps { font-size: 12.5px !important; letter-spacing: .01em; }
.lic-accept { margin-top: 30px; padding: 16px 18px; border-radius: 10px; background: var(--dv-bg-subtle, #f0f2f5); display: flex; gap: 12px; align-items: flex-start; }
.lic-accept i { color: var(--dv-accent, #0969da); margin-top: 3px; }
.lic-accept p { margin: 0; font-size: 13px; font-weight: 600; line-height: 1.75; }

/* 回到顶部 */
.lic-top {
    position: fixed; right: 22px; bottom: 26px; width: 42px; height: 42px; border-radius: 50%;
    border: 1px solid var(--dv-border-muted, #d8dee4); background: var(--dv-bg-default, #fff);
    color: var(--dv-fg-default, #1f2328); cursor: pointer; display: none;
    align-items: center; justify-content: center; box-shadow: 0 2px 10px rgba(0,0,0,.12); z-index: 60;
}
.lic-top.is-on { display: flex; }
.lic-top:hover { background: var(--dv-bg-subtle, #f0f2f5); }

/* 打印：只留正文 */
@media print {
    .dv-navbar, .lic-toc, .lic-hero-actions, .lic-top, .lic-alert, .site-footer, footer { display: none !important; }
    .lic-full { display: block; }
    .lic-doc { border: 0; padding: 0; }
    .lic-sec { break-inside: avoid; }
}

/* ===== Lucide 图标尺寸（Font Awesome 替代）===== */
/* 行内图标：跟随字号 */
svg.lucide { width: 1em; height: 1em; vertical-align: -0.125em; flex: 0 0 auto; }
/* 未渲染的占位 <i>：不占位不显示背景，避免灰块 */
i[data-lucide] { display: inline-block; width: 0; height: 0; overflow: hidden; }
/* flex 容器内图标：固定 16px */
.dv-btn svg.lucide, .dv-btn-primary svg.lucide, .dv-underlinenav-item svg.lucide,
.dv-side-link svg.lucide, .dv-file-icon svg.lucide, .dv-select-btn svg.lucide,
.dv-menu-item svg.lucide, button svg.lucide, .repo-btn svg.lucide {
  width: 16px; height: 16px; flex: 0 0 auto;
}

/* ============================================================================
 修复：/code 页面侧栏「分支 / 版本」文字不可见
 ----------------------------------------------------------------------------
 真因（已由 Chrome DevTools Protocol CSS.getMatchedStylesForNode 实证）：

   static/css.css 第 2464 行
     li > :first-child { margin-right: .5em; width: 1.1em; text-align: center; }

   该规则本意是给「列表项里的小图标」定宽，但它用的是 :first-child，
   而 /code 侧栏的结构是：

     <li>
       <a class="dv-side-link">        ← 这才是 li 的 :first-child！
         <svg>…</svg>                   ← 图标（已被 lucide 正常替换）
         <span>APDSLTS001</span>        ← 文字
       </a>
     </li>

   于是 width: 1.1em（在 .dv-side-link 的 14px 字号下 = 15.4px ≈ 16px）
   被加在了 <a> 本身，而不是图标上。实测 <a> 宽 16px、<span> 宽 0px：

     A .dv-side-link   w=16.0  h=31.0   ← 被压成只有一个图标的宽度
     LI (父级)          w=296.0          ← 父级空间完全够
     span scrollWidth=78  clientWidth=0  ← 文字被挤到 0 宽，配合 overflow:hidden 彻底不可见

   图标正常显示（lucide.createIcons 已执行），剩下的 16px 空间刚好摆下图标，
   文字 span 拿到 0px —— 这就是「只看到图标方块、文字全没」的成因。
   与本文件末尾既有的 i[data-lucide]{width:0;height:0} 规则无关（已实测排除：
   清空该规则后 span 宽度仍为 0）。

 修复：只重置 li 首子元素在侧栏内的宽度，不改动 css.css 任何既有规则，
       也不涉及任何颜色值。dvs-git.css 在 css.css 之后加载，同特异性后者胜。
 ========================================================================== */

/* 侧栏列表项的首个子元素是整条 <a.dv-side-link>，必须让它撑满父级宽度，
   否则会被 css.css 的 `li > :first-child { width: 1.1em }` 压成一个图标的宽度。 */
.dv-side-list > li > .dv-side-link,
.dv-side-list > li > a:first-child {
  width: 100%;
  min-width: 0;
  text-align: left;
  margin-right: 0;
  box-sizing: border-box;
}

/* 对应地，图标间距交回 .dv-side-link 的 gap 负责，避免重复外边距 */
.dv-side-list > li > .dv-side-link > svg {
  margin-right: 0;
}

/* 文字列：吃掉剩余空间并可省略号截断 */
.dv-side-link > span {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ==========================================================================
  CSS 审计修复 2026-10-12 —— 收口 css.css:2464 的宽泛选择器残留
  --------------------------------------------------------------------------
  背景：
    css.css 里那条带 bug 的规则
        li > :first-child { margin-right:.5em; width:1.1em; text-align:center; }
    本意是给「列表项首个图标」定宽（图标才需要 1.1em + 居中）。
    它已经被 css.css 末尾的两组规则收窄/豁免：
        css.css:3075  li > i/svg/img/[data-lucide]:first-child   （收窄到图标）
        css.css:3085  :is(.dv-markdown,.md-rendered,.release-content,.readme-content)
                      li > :first-child                          （Markdown 正文豁免）

  残留问题（本次修复）：
    /license 页的规则列表用的是 <li><b>标签：</b>正文…</li>
    <b> 是 li 的首个子元素，且它的祖先既不是 .dv-markdown 也不是
    .md-rendered/.release-content/.readme-content，所以上面的豁免全部不生效，
    <b> 仍然吃到 width:1.1em + text-align:center + margin-right:.5em。

  实测（Chrome headless，1440x900，http://127.0.0.1:8888/license）：
    .lic-intro > ul.lic-ul > li > b  →  computed width: 15.4px   text-align: center
                                        margin-right: 7px
    共 7 处：你可以：/ 你必须：/ 你不能：/ 兼容性：/ 电子邮件：/ 项目主页：/ 回复时间：
    在页面内联移除该声明后，这 7 处全部恢复 width:auto / text-align:start / margin-right:0
    （A/B 对比：before 15.4px·center·7px → after auto·start·0px）。

  危害程度说明（如实记录）：
    <b> 是 display:inline，inline 元素忽略 width，所以文字没有被压成 0 宽或一字一行；
    实际可见症状是 text-align:center 与 margin-right:7px 泄漏到行内文本上，
    造成「标签与后文之间多出 7px 空隙、行内文本被居中」的排版错乱。
    这属于已确认的真实 bug（规则命中错误的元素），但比 css.css:2464 原始案例轻。

  修复策略：
    不改动 css.css 任何既有规则、不改任何颜色值、不改任何布局尺寸，
    只在加载顺序更靠后的本文件末尾追加覆盖，用「明确标签限定」精确排除内容元素。
  ========================================================================== */

/* 1) 正文里的加粗/强调类行内标签作为列表项首子元素时，一律解除图标定宽语义。
      这些标签承载的是文字，不是图标，必须恢复 auto 宽度与左对齐。 */
li > b:first-child,
li > strong:first-child,
li > em:first-child,
li > code:first-child,
li > span:first-child,
li > a:first-child,
li > p:first-child {
  width: auto;
  min-width: 0;
  max-width: none;
  text-align: inherit;
  margin-right: 0;
}

/* 2) 许可证页显式兜底（选择器最具体，防止其它文件同特异性后置规则再次污染） */
.lic-ul > li > b:first-child,
.lic-ul > li > strong:first-child,
.lic-wrap li > b:first-child,
.lic-body li > b:first-child {
  width: auto;
  min-width: 0;
  text-align: inherit;
  margin-right: 0;
}

/* 3) 侧栏列表项：.dv-side-list 里的 <a.dv-side-link> 已由上方 2071 行修复；
      这里补上「首子元素是普通文字链接/inline 内容」的情况，同样恢复自适应宽度。 */
.dv-side-list > li > span:first-child,
.dv-side-list > li > b:first-child,
.dv-side-list > li > strong:first-child {
  width: auto;
  min-width: 0;
  text-align: inherit;
  margin-right: 0;
}

/* 4) 只有真正的图标元素保留「首个图标定宽 1.1em + 居中」的原始设计意图。
      这条不新增行为，仅显式重申作用域，便于后人维护时看清边界。 */
li > i:first-child,
li > svg:first-child,
li > img:first-child,
li > [data-lucide]:first-child {
  width: 1.1em;
  text-align: center;
  margin-right: .5em;
}
