@tailwind base; @tailwind components; @tailwind utilities; @layer base { html { -webkit-text-size-adjust: 100%; text-rendering: optimizeLegibility; } body { @apply bg-paper-50 text-ink-800 font-sans antialiased; font-feature-settings: 'tnum' 1; /* 数字等宽:比分/百分比不跳动 */ } ::selection { @apply bg-press-wash text-press; } /* 统一焦点环:印报红细线,键盘可达 */ :focus-visible { outline: 2px solid #9e1b1b; outline-offset: 2px; } /* 细滚动条 */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { @apply rounded-full bg-ink-300; } ::-webkit-scrollbar-thumb:hover { @apply bg-ink-400; } /* 尊重「减少动态效果」偏好 */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } } @layer components { /* ── 报头双线:粗线在上、细线在下 ── */ .masthead-rule { border-top: 3px solid #17140f; } /* ── 按钮:方正边框式,悬停反白 ── */ .btn { @apply inline-flex items-center justify-center gap-1.5 border border-ink-300 bg-transparent px-3 text-sm text-ink-700 transition-colors duration-150 hover:border-ink-900 hover:bg-ink-900 hover:text-paper-50 disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:border-ink-300 disabled:hover:bg-transparent disabled:hover:text-ink-700 min-h-[44px] py-1.5; } .btn-sm { @apply px-2.5 text-xs min-h-[36px]; } .btn-solid { @apply border-ink-900 bg-ink-900 text-paper-50 hover:border-press hover:bg-press; } .btn-danger { @apply border-press bg-transparent text-press hover:bg-press hover:text-paper-50; } /* ── 统一空态 ── */ .empty-state { @apply border-y border-ink-200 py-12 text-center; } .empty-state-title { @apply font-serif text-sm text-ink-600; } .empty-state-sub { @apply mt-1.5 text-xs text-ink-400; } .empty-state-action { @apply mt-4 inline-flex items-center gap-2 text-2xs text-press hover:text-press-dark transition-colors; } /* ── 统一错误横幅(前台用,后台用 Alert) ── */ .error-banner { @apply flex items-start justify-between gap-3 border border-press bg-press-wash px-4 py-3; } .error-banner-title { @apply text-sm font-medium text-press; } .error-banner-detail { @apply mt-0.5 text-xs text-ink-600; } /* ── 表单控件:方正、无圆角 ── */ .field { @apply border border-ink-300 bg-transparent px-2.5 py-1.5 text-sm text-ink-800 transition-colors hover:border-ink-400 focus:border-press focus:outline-none; } /* ── 版面切换文字标签(联赛/状态/模式) ── */ .tab { @apply relative whitespace-nowrap px-0.5 py-1 text-sm text-ink-500 transition-colors hover:text-ink-900; } .tab-on { @apply font-medium text-press; } .tab-on::after { content: ''; @apply absolute inset-x-0 bottom-0 h-0.5 bg-press; } /* ── 小节标题:宋体加粗 + 墨色底线 ── */ .section-head { @apply border-b border-ink-900 pb-1.5 font-serif text-sm font-bold text-ink-900; } /* ── 骨架占位:低调脉动,不用渐变扫光 ── */ .skeleton { @apply animate-pulse rounded-none bg-ink-200; } } /* ── Admin 后台 ── 与前台共用同一套报刊风组件(.btn/.field/.tab/.section-head/.skeleton), 不再单独维护暗色主题。 */