.markdown-body { line-height: 1.7; word-break: break-word; }
.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4 { font-weight: 700; margin: 1em 0 .5em; color: #0f172a; }
.markdown-body h1 { font-size: 1.25rem; }
.markdown-body h2 { font-size: 1.15rem; }
.markdown-body h3 { font-size: 1.05rem; }
.markdown-body p { margin: .5em 0; }
.markdown-body a { color: #4f46e5; text-decoration: underline; }
.markdown-body ul,.markdown-body ol { margin: .5em 0; padding-left: 1.5em; }
.markdown-body ul { list-style: disc; }
.markdown-body ol { list-style: decimal; }
.markdown-body blockquote { border-left: 3px solid #cbd5e1; padding-left: .75em; color: #64748b; margin: .75em 0; }
.markdown-body pre { background: #0f172a; color: #e2e8f0; padding: .75em 1em; border-radius: .5rem; overflow-x: auto; margin: .75em 0; font-size: .875rem; }
.markdown-body code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.markdown-body p > code,.markdown-body li > code { background: #eef2ff; color: #4338ca; padding: .1em .35em; border-radius: .25rem; font-size: .875em; }
.markdown-body pre code { background: transparent; color: inherit; padding: 0; }
.markdown-body img { max-width: 100%; border-radius: .5rem; margin: .5em 0; }
.markdown-body table { border-collapse: collapse; margin: .75em 0; width: 100%; }
.markdown-body th,.markdown-body td { border: 1px solid #e2e8f0; padding: .4em .6em; }

.clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

.no-scrollbar::-webkit-scrollbar { display: none; }
.no-scrollbar { -ms-overflow-style: none; scrollbar-width: none; }

.btn-primary { display: inline-flex; align-items: center; justify-content: center; gap: .375rem; border-radius: .5rem; background-color: #4f46e5; padding: .5rem 1rem; font-size: .875rem; font-weight: 500; color: #fff; transition: background-color .15s; }
.btn-primary:hover { background-color: #4338ca; }
.btn-primary:focus { outline: none; box-shadow: 0 0 0 2px #fff, 0 0 0 4px #6366f1; }
.btn-primary:disabled { opacity: .5; cursor: not-allowed; }

.btn-ghost { display: inline-flex; align-items: center; justify-content: center; gap: .375rem; border-radius: .5rem; border: 1px solid #cbd5e1; background-color: #fff; padding: .5rem 1rem; font-size: .875rem; font-weight: 500; color: #334155; transition: background-color .15s; }
.btn-ghost:hover { background-color: #f8fafc; }
.btn-ghost:disabled { opacity: .5; cursor: not-allowed; }

.vote-btn.active { border-color: #4f46e5; color: #4f46e5; background-color: #eef2ff; }

.input { width: 100%; border-radius: .5rem; border: 1px solid #cbd5e1; background-color: #fff; padding: .5rem .75rem; font-size: .875rem; }
.input:focus { border-color: #6366f1; outline: none; box-shadow: 0 0 0 1px #6366f1; }
.input::placeholder { color: #94a3b8; }

.label { display: block; font-size: .875rem; font-weight: 500; color: #334155; margin-bottom: .25rem; }

.card { background-color: #fff; border-radius: .75rem; border: 1px solid #e2e8f0; box-shadow: 0 1px 2px 0 rgb(0 0 0 / .05); }

.skeleton { background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 45%, #e2e8f0 65%); background-size: 400% 100%; animation: sk 1.4s ease infinite; }
@keyframes sk { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

/* 移动端输入框字号 ≥16px,避免 iOS 聚焦时自动放大页面 */
@media (max-width: 767px) {
  input, select, textarea { font-size: 16px !important; }
  .tab-btn { touch-action: manipulation; }
  .card, .btn-primary, .btn-ghost, a { -webkit-tap-highlight-color: transparent; }
}

/* 商品封面图加载失败时的占位 */
.product-cover-fallback { display: flex; align-items: center; justify-content: center; }
.product-cover-fallback::after { content: '📦'; font-size: 2rem; opacity: .55; }