/* =============================================================================
   机械设计资源平台 · Bootstrap 5.3 主题层
   -----------------------------------------------------------------------------
   本文件只做两件事：
     1. 覆盖 Bootstrap 的设计令牌（颜色 / 圆角 / 阴影 / 字体），统一全站视觉；
     2. 定义 Bootstrap 无法表达的项目私有组件（3D 预览、Markdown 正文、
        SEO 折叠面板、作品徽标、后台深色侧栏等）。
   页面结构一律使用 Bootstrap 语义类，本文件不提供 .panel/.field 之类的旧式组件。
   ========================================================================== */

/* ---------------------------------------------------------------- 设计令牌 */
:root {
    /* 品牌色：工程蓝 */
    --pd-primary: #0F4C81;
    --pd-primary-600: #1565C0;
    --pd-primary-500: #0B5ED7;
    --pd-accent: #F59E0B;

    /* 中性色 */
    --pd-bg: #F4F6F9;
    --pd-surface: #FFFFFF;
    --pd-dark: #0E1A2B;
    --pd-dark-2: #16273D;

    --pd-text: #1A2233;
    --pd-text-2: #5A6478;

    --pd-border: #E3E8F0;
    --pd-border-strong: #CBD4E3;

    /* 语义色 */
    --pd-success: #16A34A;
    --pd-warning: #F59E0B;
    --pd-danger: #DC2626;
    --pd-info: #0EA5E9;

    --pd-radius: 10px;
    --pd-radius-sm: 8px;
    --pd-radius-lg: 14px;
    --pd-shadow: 0 1px 2px rgba(16, 24, 40, .06), 0 1px 3px rgba(16, 24, 40, .04);
    --pd-shadow-md: 0 4px 12px rgba(16, 24, 40, .08);
    --pd-shadow-lg: 0 12px 32px rgba(16, 24, 40, .12);
    --pd-ring: 0 0 0 .2rem rgba(15, 76, 129, .18);

    --pd-font: "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", "Helvetica Neue", Arial, sans-serif;
    --pd-font-mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;

    /* ---- 覆盖 Bootstrap 令牌 ---- */
    --bs-primary: #0F4C81;
    --bs-primary-rgb: 15, 76, 129;
    --bs-body-bg: #F4F6F9;
    --bs-body-color: #1A2233;
    --bs-body-font-family: var(--pd-font);
    --bs-body-font-size: .875rem;
    --bs-border-color: #E3E8F0;
    --bs-border-radius: 10px;
    --bs-border-radius-sm: 8px;
    --bs-border-radius-lg: 14px;
    --bs-link-color: #1565C0;
    --bs-link-hover-color: #0F4C81;
    --bs-link-color-rgb: 21, 101, 192;
    --bs-link-hover-color-rgb: 15, 76, 129;
    --bs-success: #16A34A;
    --bs-success-rgb: 22, 163, 74;
    --bs-warning: #F59E0B;
    --bs-warning-rgb: 245, 158, 11;
    --bs-danger: #DC2626;
    --bs-danger-rgb: 220, 38, 38;
    --bs-info: #0EA5E9;
    --bs-info-rgb: 14, 165, 233;
    --bs-secondary-color: #5A6478;
}

/* ------------------------------------------------------------------ 基础层 */
html { -webkit-text-size-adjust: 100%; }

body {
    font-family: var(--pd-font);
    color: var(--pd-text);
    background-color: var(--pd-bg);
    font-size: .875rem;
    line-height: 1.65;
    -webkit-font-smoothing: antialiased;
}

h1, h2, h3, h4, h5, h6 { color: var(--pd-text); font-weight: 600; }
h1 { font-size: 1.5rem; }
h2 { font-size: 1.25rem; }
h3 { font-size: 1.0625rem; }

a { text-decoration: none; }
a:hover { text-decoration: none; }

code, kbd, pre, .num, .tabular { font-family: var(--pd-font-mono); font-variant-numeric: tabular-nums; }

.text-muted { color: var(--pd-text-2) !important; }
.text-body-secondary { color: var(--pd-text-2) !important; }
.num, .text-end-num { font-variant-numeric: tabular-nums; }

/* 主按钮换用工程蓝，accent 用于关键动作 */
.btn { --bs-btn-font-weight: 500; transition: transform .15s ease, box-shadow .15s ease, background-color .15s ease, border-color .15s ease; }
.btn-primary { --bs-btn-bg: #0F4C81; --bs-btn-border-color: #0F4C81; --bs-btn-hover-bg: #1565C0; --bs-btn-hover-border-color: #1565C0; --bs-btn-active-bg: #0B3E6B; --bs-btn-active-border-color: #0B3E6B; --bs-btn-disabled-bg: #0F4C81; --bs-btn-disabled-border-color: #0F4C81; }
.btn-accent { --bs-btn-color: #fff; --bs-btn-bg: #F59E0B; --bs-btn-border-color: #F59E0B; --bs-btn-hover-color: #fff; --bs-btn-hover-bg: #D97706; --bs-btn-hover-border-color: #D97706; --bs-btn-active-color: #fff; --bs-btn-active-bg: #B45309; --bs-btn-active-border-color: #B45309; }
.btn:not(:disabled):hover { transform: translateY(-1px); box-shadow: var(--pd-shadow-md); }
.btn-outline-primary { --bs-btn-color: #0F4C81; --bs-btn-border-color: #B7C6DA; --bs-btn-hover-bg: #0F4C81; --bs-btn-hover-border-color: #0F4C81; --bs-btn-active-bg: #0F4C81; --bs-btn-active-border-color: #0F4C81; }

.form-control, .form-select { border-color: var(--pd-border-strong); border-radius: var(--pd-radius-sm); font-size: .875rem; }
.form-control:focus, .form-select:focus { border-color: var(--pd-primary-600); box-shadow: var(--pd-ring); }
.form-label { font-weight: 500; color: var(--pd-text); margin-bottom: .375rem; font-size: .8125rem; }
.form-text { color: var(--pd-text-2); font-size: .75rem; }
.form-check-label { font-size: .875rem; }

/* 卡片：轻阴影 + 悬浮上浮 2px */
.card { --bs-card-border-color: var(--pd-border); --bs-card-border-radius: var(--pd-radius-lg); box-shadow: var(--pd-shadow); }
.card-header { background: #FBFCFE; border-bottom-color: var(--pd-border); font-weight: 600; }
.card-hover { transition: transform .15s ease, box-shadow .15s ease; }
.card-hover:hover { transform: translateY(-2px); box-shadow: var(--pd-shadow-lg); }

/* 表格：圆角 + 斑马纹 + 悬浮高亮 */
.table { --bs-table-border-color: var(--pd-border); margin-bottom: 0; }
.table > :not(caption) > * > * { padding: .625rem .75rem; }
.table > thead > * > * { background: #F8FAFD; color: var(--pd-text-2); font-weight: 600; font-size: .8125rem; white-space: nowrap; }
.table-hover > tbody > tr:hover > * { --bs-table-accent-bg: #F5F8FD; }
.table-rounded { border: 1px solid var(--pd-border); border-radius: var(--pd-radius); overflow: hidden; }

.pagination { --bs-pagination-color: var(--pd-text-2); --bs-pagination-active-bg: var(--pd-primary); --bs-pagination-active-border-color: var(--pd-primary); --bs-pagination-border-color: var(--pd-border); --bs-pagination-hover-color: var(--pd-primary); --bs-pagination-focus-box-shadow: var(--pd-ring); }
.pagination .page-link { border-radius: var(--pd-radius-sm); margin: 0 2px; }
.pagination .page-item.active .page-link { border-radius: var(--pd-radius-sm); }

.alert { border-radius: var(--pd-radius); border-width: 1px; }
.dropdown-menu { border-color: var(--pd-border); border-radius: var(--pd-radius); box-shadow: var(--pd-shadow-lg); font-size: .875rem; }
.modal-content { border: none; border-radius: var(--pd-radius-lg); box-shadow: var(--pd-shadow-lg); }
.nav-tabs { --bs-nav-tabs-border-color: var(--pd-border); --bs-nav-tabs-link-active-border-color: var(--pd-border) var(--pd-border) #fff; }
.nav-tabs .nav-link { color: var(--pd-text-2); border-top-left-radius: var(--pd-radius-sm); border-top-right-radius: var(--pd-radius-sm); }
.nav-tabs .nav-link.active { color: var(--pd-primary); font-weight: 600; }
.nav-pills .nav-link { color: var(--pd-text-2); border-radius: var(--pd-radius-sm); }
.nav-pills .nav-link.active { background: var(--pd-primary); color: #fff; }

/* ------------------------------------------------------------------ 徽标 */
.badge { --bs-badge-font-weight: 500; padding: .28em .6em; border-radius: 999px; font-size: .6875rem; letter-spacing: .01em; }
.badge-vip { background: linear-gradient(135deg, #B45309, #F59E0B); color: #fff; }
.badge-free { background: rgba(22, 163, 74, .12); color: #15803D; }
.badge-points { background: rgba(21, 101, 192, .12); color: #0F4C81; }
.badge-paid { background: rgba(220, 38, 38, .12); color: #B91C1C; }
.badge-type { background: #EEF2F7; color: #5A6478; }
.badge-success { background: rgba(22, 163, 74, .12); color: #15803D; }
.badge-muted { background: #EEF2F7; color: #5A6478; }

/* --------------------------------------------------- 提示条（app.js 契约） */
/* app.js 会动态创建 .flash-stack / .flash.flash-<type>，此处保留类名并套用 alert 观感 */
.flash-stack { display: grid; gap: .5rem; }
.flash-stack.container { padding-top: 1rem; }
.flash { padding: .625rem .875rem; border-radius: var(--pd-radius); border: 1px solid transparent; font-size: .875rem; }
.flash-success { background: rgba(22, 163, 74, .08); border-color: rgba(22, 163, 74, .28); color: #15803D; }
.flash-warning { background: rgba(245, 158, 11, .1); border-color: rgba(245, 158, 11, .32); color: #B45309; }
.flash-info { background: rgba(14, 165, 233, .08); border-color: rgba(14, 165, 233, .28); color: #0369A1; }
.flash-error { background: rgba(220, 38, 38, .07); border-color: rgba(220, 38, 38, .26); color: #B91C1C; }

/* ------------------------------------------------------------- 前台骨架 */
.site-header { background: #fff; border-bottom: 1px solid var(--pd-border); box-shadow: var(--pd-shadow); }
.site-header .navbar-brand { display: flex; align-items: center; gap: .625rem; font-weight: 700; color: var(--pd-primary); }
.brand-mark { width: 34px; height: 34px; flex: 0 0 34px; border-radius: var(--pd-radius-sm); background: linear-gradient(135deg, #0F4C81, #1565C0); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: .8125rem; letter-spacing: .02em; }
.brand-sub { display: block; font-size: .6875rem; font-weight: 400; color: var(--pd-text-2); letter-spacing: .01em; }
.site-header .nav-link { color: var(--pd-text-2); font-weight: 500; border-radius: var(--pd-radius-sm); padding: .375rem .75rem; }
.site-header .nav-link:hover { color: var(--pd-primary); background: #F1F5FB; }
.site-header .nav-link.active { color: var(--pd-primary); background: #EAF1FA; font-weight: 600; }
.site-footer { background: var(--pd-dark); color: #94A3B8; margin-top: 3.5rem; }
.site-footer a { color: #CBD5E1; }
.site-footer a:hover { color: #fff; }

/* 首页主视觉 */
.hero { position: relative; background: linear-gradient(135deg, #0E1A2B 0%, #0F4C81 55%, #1565C0 100%); color: #fff; overflow: hidden; }
.hero::after { content: ''; position: absolute; inset: 0; background-image: linear-gradient(rgba(255, 255, 255, .05) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, .05) 1px, transparent 1px); background-size: 44px 44px; pointer-events: none; }
.hero > * { position: relative; z-index: 1; }
.hero h1 { color: #fff; font-size: 2rem; font-weight: 700; letter-spacing: -.01em; }
.hero .lead { color: rgba(255, 255, 255, .8); }
.hero-stat strong { display: block; font-size: 1.35rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.hero-stat span { font-size: .75rem; color: rgba(255, 255, 255, .7); }

/* 作品卡片封面 */
.cover-box { position: relative; aspect-ratio: 16 / 10; background: #E9EEF5; overflow: hidden; }
.cover-box > img { width: 100%; height: 100%; object-fit: cover; transition: transform .35s ease; }
.card-hover:hover .cover-box > img { transform: scale(1.04); }
.cover-badge { position: absolute; top: .625rem; right: .625rem; }
.clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

/* 3D 预览容器（viewer.js 契约，不可改名） */
.viewer-host { min-height: 420px; }
.viewer-wrap { display: grid; grid-template-columns: 1fr 240px; gap: 1rem; }
@media (max-width: 991.98px) { .viewer-wrap { grid-template-columns: 1fr; } }
.viewer-main { position: relative; background: #0E1A2B; border-radius: var(--pd-radius); overflow: hidden; min-height: 420px; }
.viewer-canvas { width: 100%; height: 100%; min-height: 420px; }
.viewer-canvas canvas { display: block; width: 100% !important; height: 100% !important; }
.viewer-status { position: absolute; left: .75rem; bottom: .75rem; padding: .25rem .625rem; border-radius: 999px; background: rgba(14, 26, 43, .78); color: #E2E8F0; font-size: .75rem; }
.viewer-status.busy::after { content: ''; display: inline-block; width: 11px; height: 11px; margin-left: .5rem; border: 2px solid rgba(255, 255, 255, .35); border-top-color: #fff; border-radius: 50%; animation: pd-spin .7s linear infinite; vertical-align: -1px; }
@keyframes pd-spin { to { transform: rotate(360deg); } }
.viewer-empty { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; padding: 2rem; text-align: center; color: #94A3B8; font-size: .875rem; }
.viewer-side { background: #fff; border: 1px solid var(--pd-border); border-radius: var(--pd-radius); padding: .875rem; display: flex; flex-direction: column; gap: .75rem; }
.viewer-toolbar { display: flex; flex-wrap: wrap; gap: .375rem; }
.model-switch { display: flex; flex-wrap: wrap; gap: .375rem; }
.explode-row { display: flex; align-items: center; gap: .5rem; font-size: .75rem; color: var(--pd-text-2); }
.explode-row input[type="range"] { flex: 1 1 auto; accent-color: var(--pd-primary); }
.mesh-tree { max-height: 260px; overflow: auto; font-size: .8125rem; }
.tree-title { font-size: .75rem; font-weight: 600; color: var(--pd-text-2); text-transform: uppercase; letter-spacing: .04em; margin-bottom: .25rem; }
.tree-item { display: flex; align-items: center; gap: .375rem; padding: .25rem .375rem; border-radius: 6px; cursor: pointer; }
.tree-item:hover { background: #F1F5FB; }
.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--pd-border-strong); flex: 0 0 8px; }
.dot.on { background: var(--pd-success); }

/* PDF / 图片内嵌 */
.doc-frame { border: 1px solid var(--pd-border); border-radius: var(--pd-radius); overflow: hidden; background: #fff; }
.doc-frame iframe, .doc-frame > img { display: block; width: 100%; height: 620px; border: 0; object-fit: contain; background: #F8FAFD; }
.shot { margin: 0; }
.shot img { width: 100%; border-radius: var(--pd-radius-sm); border: 1px solid var(--pd-border); background: #fff; }
.shot figcaption { font-size: .75rem; color: var(--pd-text-2); margin-top: .375rem; }

/* ------------------------------------------------------- Markdown 正文排版 */
.markdown-body { font-size: .9375rem; line-height: 1.8; color: var(--pd-text); word-wrap: break-word; }
.markdown-body > *:first-child { margin-top: 0; }
.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4 { margin: 1.5em 0 .625em; font-weight: 600; line-height: 1.35; }
.markdown-body h1 { font-size: 1.5rem; padding-bottom: .35em; border-bottom: 1px solid var(--pd-border); }
.markdown-body h2 { font-size: 1.25rem; padding-bottom: .3em; border-bottom: 1px solid var(--pd-border); }
.markdown-body h3 { font-size: 1.0625rem; }
.markdown-body p { margin: 0 0 1em; }
.markdown-body ul, .markdown-body ol { padding-left: 1.5em; margin: 0 0 1em; }
.markdown-body li { margin: .25em 0; }
.markdown-body blockquote { margin: 0 0 1em; padding: .5em 1em; border-left: 3px solid var(--pd-primary-600); background: #F5F8FD; color: var(--pd-text-2); border-radius: 0 var(--pd-radius-sm) var(--pd-radius-sm) 0; }
.markdown-body code { padding: .15em .4em; background: #F1F5F9; border-radius: 5px; color: #B91C1C; font-size: .85em; }
.markdown-body pre { background: #0E1A2B; color: #E2E8F0; padding: 1em; border-radius: var(--pd-radius); overflow: auto; margin: 0 0 1em; }
.markdown-body pre code { background: none; color: inherit; padding: 0; }
.markdown-body img { max-width: 100%; height: auto; border-radius: var(--pd-radius-sm); }
.markdown-body a { color: var(--pd-primary-600); border-bottom: 1px solid rgba(21, 101, 192, .35); }
.markdown-body table { width: 100%; border-collapse: collapse; margin: 0 0 1em; font-size: .875rem; }
.markdown-body th, .markdown-body td { border: 1px solid var(--pd-border); padding: .45em .7em; }
.markdown-body th { background: #F8FAFD; font-weight: 600; }
.markdown-body hr { border: 0; border-top: 1px solid var(--pd-border); margin: 1.75em 0; }

/* ------------------------------------------------- Markdown 编辑器组件 */
.md-editor { border: 1px solid var(--pd-border-strong); border-radius: var(--pd-radius); overflow: hidden; background: #fff; }
.md-editor__bar { display: flex; align-items: center; justify-content: space-between; gap: .5rem; padding: .5rem .625rem; background: #F8FAFD; border-bottom: 1px solid var(--pd-border); flex-wrap: wrap; }
.md-editor__title { font-size: .75rem; font-weight: 600; color: var(--pd-text-2); text-transform: uppercase; letter-spacing: .04em; }
.md-editor__body { display: grid; grid-template-columns: 1fr; }
.md-editor.is-split .md-editor__body { grid-template-columns: 1fr 1fr; }
@media (max-width: 991.98px) { .md-editor.is-split .md-editor__body { grid-template-columns: 1fr; } }
.md-editor__source { width: 100%; min-height: 340px; border: 0; border-radius: 0; resize: vertical; padding: .875rem 1rem; font-family: var(--pd-font-mono); font-size: .8438rem; line-height: 1.75; outline: none; box-shadow: none; }
.md-editor__source:focus { outline: none; box-shadow: none; border-color: transparent; }
.md-editor__preview { border-left: 1px solid var(--pd-border); padding: 1rem 1.125rem; overflow: auto; max-height: 560px; background: #FFFEFB; }
.md-editor__preview:empty::before { content: '（预览区）'; color: #A9B3C4; }
.md-editor.is-edit .md-editor__preview { display: none; }
.md-editor__bar-count { font-size: .75rem; color: var(--pd-text-2); font-variant-numeric: tabular-nums; }

/* --------------------------------------------------------------- 富文本框 */
.rich-editor-wrapper .note-editor.note-frame { border-color: var(--pd-border-strong); border-radius: var(--pd-radius); overflow: hidden; }
.rich-editor-wrapper .note-editor.note-frame .note-statusbar { background: #F8FAFD; border-top-color: var(--pd-border); }
.rich-editor-wrapper .note-toolbar { background: #F8FAFD; border-bottom-color: var(--pd-border); }
.rich-editor-wrapper .note-btn { border-color: var(--pd-border-strong); }
.rich-editor-wrapper .note-editable { font-size: .9375rem; line-height: 1.75; min-height: 200px; }

/* -------------------------------------------------------- SEO 折叠面板 */
.seo-fields { border: 1px solid var(--pd-border); border-radius: var(--pd-radius); background: #fff; margin-bottom: 1rem; }
.seo-fields > summary { cursor: pointer; padding: .75rem 1rem; font-weight: 600; list-style: none; display: flex; align-items: center; gap: .5rem; }
.seo-fields > summary::-webkit-details-marker { display: none; }
.seo-fields > summary::before { content: '▸'; color: var(--pd-primary); transition: transform .15s ease; }
.seo-fields[open] > summary::before { transform: rotate(90deg); }
.seo-fields > *:not(summary) { padding: 0 1rem 1rem; }
.seo-block { border: 1px solid var(--pd-border); border-radius: var(--pd-radius); padding: .875rem 1rem; margin-bottom: .875rem; }
.seo-block > legend { float: none; width: auto; padding: 0 .375rem; margin-bottom: 0; font-size: .8125rem; font-weight: 600; color: var(--pd-primary); }
.seo-block code { font-size: .75rem; color: var(--pd-text-2); }

/* ----------------------------------------------------------- 会员套餐卡 */
.plan-card { position: relative; height: 100%; }
.plan-card .plan-price { font-size: 2rem; font-weight: 700; color: var(--pd-primary); font-variant-numeric: tabular-nums; }
.plan-card .plan-price small { font-size: .8125rem; font-weight: 400; color: var(--pd-text-2); }
.plan-card.featured { border: 2px solid var(--pd-accent); box-shadow: var(--pd-shadow-lg); }
.plan-card .ribbon { position: absolute; top: -.75rem; right: 1rem; background: var(--pd-accent); color: #fff; font-size: .6875rem; padding: .2rem .6rem; border-radius: 999px; font-weight: 600; }

/* --------------------------------------------------------------- 其他组件 */
.ai-summary { display: none; }
.ai-summary-block { border-left: 3px solid var(--pd-accent); background: rgba(245, 158, 11, .07); padding: .75rem 1rem; border-radius: 0 var(--pd-radius-sm) var(--pd-radius-sm) 0; font-size: .875rem; }
.bar-chart { display: flex; align-items: flex-end; gap: .5rem; height: 160px; }
.bar-chart .bar { flex: 1 1 0; background: linear-gradient(180deg, #1565C0, #0F4C81); border-radius: 6px 6px 0 0; min-height: 4px; }
.checkin-row { display: flex; flex-wrap: wrap; gap: .5rem; }
.checkin-day { width: 40px; text-align: center; padding: .375rem .25rem; border: 1px solid var(--pd-border); border-radius: var(--pd-radius-sm); font-size: .75rem; color: var(--pd-text-2); }
.checkin-day.on { border-color: rgba(22, 163, 74, .45); background: rgba(22, 163, 74, .1); color: #15803D; font-weight: 600; }
[data-internal-link] { border-bottom: 1px dashed var(--pd-primary-600); }
.divider { border-top: 1px solid var(--pd-border); margin: 1rem 0; }
.avatar { width: 46px; height: 46px; border-radius: 50%; background: linear-gradient(135deg, #0F4C81, #1565C0); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600; }
.empty { text-align: center; color: var(--pd-text-2); padding: 2.5rem 1rem; font-size: .875rem; }
.empty i { display: block; font-size: 1.75rem; color: #C3CCDA; margin-bottom: .5rem; }
.file-item { display: flex; align-items: center; gap: .75rem; padding: .625rem 0; border-bottom: 1px dashed var(--pd-border); }
.file-item:last-child { border-bottom: 0; }
.file-icon { flex: 0 0 34px; width: 34px; height: 34px; border-radius: var(--pd-radius-sm); background: #EAF1FA; color: var(--pd-primary); display: flex; align-items: center; justify-content: center; }
.spec-group-title { font-weight: 600; color: var(--pd-text-2); font-size: .8125rem; margin: .75rem 0 .375rem; }
.method-instructions { background: #F8FAFD; border: 1px solid var(--pd-border); border-radius: var(--pd-radius-sm); padding: .625rem .75rem; font-size: .8125rem; color: var(--pd-text-2); white-space: pre-wrap; margin: 0; }
.stat-card { height: 100%; }
.stat-card .stat-num { font-size: 1.75rem; font-weight: 700; line-height: 1.2; font-variant-numeric: tabular-nums; }
.stat-card .stat-icon { width: 42px; height: 42px; border-radius: var(--pd-radius); display: flex; align-items: center; justify-content: center; font-size: 1.15rem; flex: 0 0 42px; }

/* ---------------------------------------------------------- 后台壳层骨架 */
.admin-shell { min-height: 100vh; }
.admin-sidebar { background: linear-gradient(180deg, #0E1A2B, #14273E); color: #A7B4C8; display: flex; flex-direction: column; position: sticky; top: 0; height: 100vh; overflow-y: auto; }
.admin-sidebar .side-brand { display: flex; align-items: center; gap: .625rem; padding: 1rem 1.125rem; color: #fff; font-weight: 700; border-bottom: 1px solid rgba(255, 255, 255, .07); }
.admin-sidebar .side-group { padding: .875rem 1.125rem .375rem; font-size: .6875rem; text-transform: uppercase; letter-spacing: .06em; color: #64748B; font-weight: 600; }
.admin-sidebar .side-link { display: flex; align-items: center; gap: .625rem; padding: .5rem 1.125rem; color: #A7B4C8; font-size: .8438rem; border-left: 3px solid transparent; transition: background-color .15s ease, color .15s ease; }
.admin-sidebar .side-link i { font-size: 1rem; flex: 0 0 1rem; }
.admin-sidebar .side-link:hover { background: rgba(255, 255, 255, .05); color: #fff; }
.admin-sidebar .side-link.active { background: rgba(21, 101, 192, .22); color: #fff; border-left-color: #1565C0; font-weight: 500; }
.admin-main { min-width: 0; background: var(--pd-bg); }
.admin-topbar { background: #fff; border-bottom: 1px solid var(--pd-border); position: sticky; top: 0; z-index: 20; }
.admin-body { padding: 1.25rem 1.5rem 3rem; }
@media (max-width: 991.98px) { .admin-body { padding: 1rem; } }

.page-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: 1.25rem; }
.page-head h1 { margin: 0; }

/* 工具类：配合 text-truncate 让 flex 子项可收缩 */
.min-w-0 { min-width: 0; }

/* ------------------------------------------------- 正文多媒体（图片 / 视频） */
/* 前台正文渲染统一挂 .content-media，兼容富文本粘贴与外链视频 */
.content-media img,
.content-media video,
.content-media iframe,
.content-media embed,
.content-media object { max-width: 100%; height: auto; }

.content-media img,
.content-media video { border-radius: var(--pd-radius-sm); }

.content-media video { display: block; margin: 1rem 0; background: #000; }

.content-media figure { margin: 1rem 0; }
.content-media figcaption { font-size: .8125rem; color: var(--pd-text-2); text-align: center; margin-top: .375rem; }

/* ------------------------------------------------------------- 标签云 / 标签 */
.tag-pill { display: inline-flex; align-items: center; gap: .25rem; padding: .375rem .7rem; margin: 0 .5rem .5rem 0; border-radius: 999px; background: #EEF2F7; color: var(--pd-text-2); font-size: .8125rem; text-decoration: none; transition: background-color .18s ease, color .18s ease, transform .18s ease; }
.tag-pill:hover { background: rgba(15, 76, 129, .1); color: var(--pd-primary); transform: translateY(-1px); }
.tag-pill i { font-size: .8125rem; color: var(--pd-primary-600); }

@media (print) { .admin-sidebar, .site-header, .site-footer { display: none !important; } }
