/* 三份样稿共用：字体与基础重置。中文：思源黑体（Noto Sans CJK SC），英文/数字：Inter，代码：JetBrains Mono，均为 OFL。 */
@font-face { font-family: 'Inter'; font-weight: 400; src: url('fonts/inter-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter'; font-weight: 500; src: url('fonts/inter-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter'; font-weight: 600; src: url('fonts/inter-latin-600-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter'; font-weight: 700; src: url('fonts/inter-latin-700-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'JB Mono'; font-weight: 400; src: url('fonts/jetbrains-mono-latin-400-normal.woff2') format('woff2'); font-display: swap; }
/* 第 7 轮参考风格用到的字体（均 OFL） */
@font-face { font-family: 'Urbanist'; font-weight: 300; font-style: normal; src: url('fonts/urbanist-latin-300-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Urbanist'; font-weight: 400; font-style: normal; src: url('fonts/urbanist-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Urbanist'; font-weight: 500; font-style: normal; src: url('fonts/urbanist-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Urbanist'; font-weight: 600; font-style: normal; src: url('fonts/urbanist-latin-600-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Urbanist'; font-weight: 300; font-style: italic; src: url('fonts/urbanist-latin-300-italic.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Urbanist'; font-weight: 400; font-style: italic; src: url('fonts/urbanist-latin-400-italic.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Jakarta'; font-weight: 400; font-style: normal; src: url('fonts/plus-jakarta-sans-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Jakarta'; font-weight: 500; font-style: normal; src: url('fonts/plus-jakarta-sans-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Jakarta'; font-weight: 600; font-style: normal; src: url('fonts/plus-jakarta-sans-latin-600-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Jakarta'; font-weight: 700; font-style: normal; src: url('fonts/plus-jakarta-sans-latin-700-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Jakarta'; font-weight: 800; font-style: normal; src: url('fonts/plus-jakarta-sans-latin-800-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist'; font-weight: 300; font-style: normal; src: url('fonts/geist-sans-latin-300-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter Tight'; font-weight: 300; font-style: normal; src: url('fonts/inter-tight-latin-300-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist'; font-weight: 400; font-style: normal; src: url('fonts/geist-sans-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter Tight'; font-weight: 400; font-style: normal; src: url('fonts/inter-tight-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist'; font-weight: 500; font-style: normal; src: url('fonts/geist-sans-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter Tight'; font-weight: 500; font-style: normal; src: url('fonts/inter-tight-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist'; font-weight: 600; font-style: normal; src: url('fonts/geist-sans-latin-600-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Inter Tight'; font-weight: 600; font-style: normal; src: url('fonts/inter-tight-latin-600-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist Mono'; font-weight: 400; font-style: normal; src: url('fonts/geist-mono-latin-400-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'Geist Mono'; font-weight: 500; font-style: normal; src: url('fonts/geist-mono-latin-500-normal.woff2') format('woff2'); font-display: swap; }
@font-face { font-family: 'JB Mono'; font-weight: 500; src: url('fonts/jetbrains-mono-latin-500-normal.woff2') format('woff2'); font-display: swap; }

*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; }
body { position: relative; min-height: 100vh; }
body {
  font-family: 'Inter', 'Noto Sans CJK SC', 'PingFang SC', 'Microsoft YaHei', sans-serif;
  font-size: 14px;
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
.num { font-variant-numeric: tabular-nums; font-feature-settings: 'tnum', 'cv01', 'ss01'; }
.mono { font-family: 'JB Mono', 'Noto Sans Mono CJK SC', monospace; }
button { font: inherit; color: inherit; cursor: pointer; }
a { color: inherit; text-decoration: none; }
.demo-tag {
  position: absolute; right: 14px; bottom: 10px; z-index: 99;
  font-size: 12px; letter-spacing: .04em; padding: 3px 8px; border-radius: 999px;
  background: rgba(127,127,127,.16); color: rgba(127,127,127,.95);
}
/* 切换主题的那一帧：关掉所有过渡，所有组件同一帧变色 */
.qq-instant *, .qq-instant *::before, .qq-instant *::after { transition: none !important; }
.theme-btn { display: inline-grid; place-items: center; border: 0; background: none; padding: 0; }
.theme-btn .i-moon { display: block; } .theme-btn .i-sun { display: none; }
[data-theme='dark'] .theme-btn .i-moon { display: none; } [data-theme='dark'] .theme-btn .i-sun { display: block; }
