/* ==========================================================================
   base.css — 基础重置 / 排版 / 工具类 / 动效降级
   ========================================================================== */
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  background:var(--bg);
  background-image:radial-gradient(circle,var(--dot) 1.2px,transparent 1.3px);
  background-size:22px 22px;
  color:var(--ink-700); font-size:14px; line-height:1.55;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  min-height:100vh;
}
.mono{font-family:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;font-feature-settings:"tnum" 1}
.en{overflow-wrap:break-word;line-height:1.45}
.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}
a{color:var(--accent-ink);text-decoration:none}
a:hover{text-decoration:underline}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}
:focus{outline:none}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
h1,h2,h3,h4,p{margin:0}
img,svg{display:block}
svg.ic{width:20px;height:20px;flex:none;stroke:currentColor;fill:none;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round;display:block}
svg.ic.sm{width:16px;height:16px}
svg.ic.lg{width:24px;height:24px}
kbd{
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;
  background:var(--surface);border:1px solid var(--line-strong);border-bottom-width:2px;
  border-radius:6px;padding:1px 6px;color:var(--ink-500);line-height:1.5;
}
@keyframes spin{to{transform:rotate(360deg)}}
.spin{animation:spin 1s linear infinite;display:inline-flex}
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.sk{position:relative;overflow:hidden;background:var(--chip-bg);border-radius:6px}
.sk::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);animation:shimmer 1.4s infinite}
[data-theme="dark"] .sk::after{background:linear-gradient(90deg,transparent,rgba(255,255,255,.09),transparent)}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
  .sk::after,.prog i{animation:none!important}
  .stat:hover{transform:none}
}
