:root {
    --bg: #F5F7FB;              /* 页面底（方案A浅灰蓝画布） */
    --bg-2: #EDF1F7;
    --surface: #ffffff;
    --surface-hi: #EAF0FF;      /* 方案A浅蓝 tint */
    --border: #E3E7EF;
    --text: #14213D;            /* 墨蓝 ink */
    --text-dim: #5B6478;        /* 次级 sub */
    --primary: #1F4FFF;         /* 钴蓝主色（方案A cobalt） */
    --primary-2: #1F4FFF;
    --accent: linear-gradient(135deg, #1F4FFF 0%, #1F4FFF 100%);
    --radius: 16px;
    --shadow: 0 1px 2px rgba(20, 33, 61, .04), 0 10px 30px rgba(20, 33, 61, .06);
    /* 方案A补充令牌 */
    --ink: #14213D;
    --sub: #5B6478;
    --mute: #8A93A6;
    --yellow: #FFE14D;
    --tint: #EAF0FF;
    --ok: #12A150;
    --ok-bg: #E6F7EE;
    --ok-deep: #0B7A3B;
    --line: #EDF0F5;
    --line2: #DDE2EB;
    --ctl: #C9D1E0;
    --mono: Consolas, "SF Mono", Menlo, monospace;
}

* { box-sizing: border-box; }

html, body {
    margin: 0;
    padding: 0;
    background: var(--bg);
    color: var(--text);
    font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, sans-serif;
    font-size: 15px;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
}

a { color: var(--primary-2); text-decoration: none; }
a:hover { text-decoration: underline; }

.wrap {
    max-width: 960px;
    margin: 0 auto;
    padding: 0 20px;
}

.hidden { display: none !important; }

/* Header */
.site-header {
    position: sticky; top: 0; z-index: 10;
    background: rgba(255, 255, 255, 0.87);
    backdrop-filter: saturate(180%) blur(12px);
    border-bottom: 1px solid var(--border);
}
.site-header .wrap {
    display: flex; align-items: center; justify-content: space-between;
    padding-top: 14px; padding-bottom: 14px;
    /* 头部单独放宽：导航条目多，960 内容宽下基线就溢出行换，与内容列解耦 */
    max-width: 1200px;
}
.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 18px; }
.brand .logo { font-size: 24px; }
.brand em {
    background: var(--accent);
    -webkit-background-clip: text; background-clip: text; color: transparent;
    font-style: normal; font-size: 14px; margin-left: 4px;
}
.nav a { color: var(--text-dim); margin-left: 18px; font-size: 14px; }
.nav a:hover { color: var(--text); text-decoration: none; }
.lang-btn {
    margin-left: 12px; padding: 5px 12px; font-size: 13px; font-weight: 600;
    color: var(--text); background: transparent; cursor: pointer;
    border: 1px solid var(--border); border-radius: 999px;
    transition: border-color .15s, color .15s, background .15s;
}
.lang-btn:hover {
    color: #fff; border-color: transparent;
    background: var(--accent);
}

/* 头部最右的登录/个人中心胶囊按钮（首页导航栏右侧固定位） */
.nav-acct {
    flex-shrink: 0; margin-left: 16px;
    padding: 7px 18px; border-radius: 999px;
    font-size: 14px; font-weight: 700;
    color: #16a34a;
    border: 1px solid rgba(22, 163, 74, .38);
    background: rgba(22, 163, 74, .07);
    transition: background .15s, border-color .15s;
}
.nav-acct:hover {
    color: #15803d; text-decoration: none;
    background: rgba(22, 163, 74, .14);
    border-color: rgba(22, 163, 74, .6);
}
/* 次数包余额徽标：个人中心胶囊内 inline 小徽章（不跨边框、不单独占 flex 宽） */
.nav-acct .acct-balance {
    margin-right: 7px; padding: 1.5px 8px; border-radius: 999px;
    background: linear-gradient(135deg, #1F4FFF, #E6162D);
    color: #fff; font-size: 11.5px; font-weight: 700; line-height: 1.5;
    white-space: nowrap;
}
@media (max-width: 560px) { .nav-acct .acct-balance { display: none; } }

/* Hero */
.hero { padding: 64px 0 32px; text-align: center; }
.hero h1 {
    font-size: 40px; margin: 0 0 12px;
    background: var(--accent); -webkit-background-clip: text; background-clip: text;
    color: transparent; font-weight: 800; letter-spacing: -0.02em;
}
.hero .subtitle { color: var(--text-dim); margin: 0 0 14px; font-size: 16px; }
.hero-tags {
    max-width: 680px; margin: 0 auto 30px; font-size: 13.5px; line-height: 1.7;
    color: var(--text-dim);
}
.bookmark-hint {
    margin: 18px 0 0; font-size: 13px; color: var(--text-dim);
}
.bookmark-hint kbd {
    display: inline-block; padding: 1px 7px; margin: 0 1px;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px;
    color: var(--text); background: var(--surface-hi);
    border: 1px solid var(--border); border-radius: 5px;
    box-shadow: 0 1px 0 var(--border);
}

.parse-box {
    max-width: 640px; margin: 0 auto;
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 12px;
    box-shadow: var(--shadow);
}
.parse-box textarea {
    width: 100%; resize: none;
    background: transparent; color: var(--text);
    border: 0; outline: none; padding: 10px;
    font-size: 15px; font-family: inherit; line-height: 1.5;
}
.parse-box textarea::placeholder { color: #9aa0ae; }

.parse-actions { display: flex; gap: 10px; justify-content: flex-end; padding: 6px 4px 4px; }

.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    padding: 10px 18px;
    border: 1px solid var(--border);
    background: var(--surface-hi);
    color: var(--text);
    border-radius: 10px;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    transition: transform .1s ease, background .15s ease, border-color .15s ease;
    text-decoration: none;
}
.btn:hover { border-color: #b9bfd0; background: #F5F7FB; text-decoration: none; }
.btn:active { transform: translateY(1px); }
.btn.primary {
    background: var(--accent);
    color: #fff; border-color: transparent;
    font-weight: 600;
}
.btn.primary:hover { filter: brightness(1.08); }
.btn.ghost { background: transparent; }

.status { min-height: 24px; margin-top: 14px; color: var(--text-dim); font-size: 14px; }
.status.error { color: #dc2626; }
.status.loading::after {
    content: ""; display: inline-block; width: 12px; height: 12px; margin-left: 8px;
    border: 2px solid var(--text-dim); border-top-color: transparent;
    border-radius: 50%; animation: spin .8s linear infinite; vertical-align: -2px;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* Result */
.result { padding: 20px 0; }
.result-card {
    background: var(--surface);
    border: 1px solid var(--border);
    border-radius: var(--radius);
    padding: 20px;
    box-shadow: var(--shadow);
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 24px;
}
@media (max-width: 720px) {
    .result-card { grid-template-columns: 1fr; }
}

/* 商品结果只占现有结果卡，不复用视频/图集的附属工具。 */
.product-result { grid-column: 1 / -1; min-width: 0; width: 100%; }
.batch-item.batch-product { grid-column: 1 / -1; min-width: 0; }
.batch-product .batch-item-body { padding: 14px; }
.product-header { min-width: 0; }
.product-label { color: var(--primary-2); font-size: 12px; font-weight: 600; }
.product-title { margin: 6px 0; font-size: 18px; line-height: 1.6; overflow-wrap: anywhere; }
.product-meta, .product-note, .product-empty {
    margin: 6px 0; color: var(--text-dim); font-size: 12.5px;
    line-height: 1.7; overflow-wrap: anywhere;
}
.product-counts { margin: 10px 0; font-size: 13px; font-variant-numeric: tabular-nums; }
.product-actions { display: flex; flex-wrap: wrap; gap: 6px; }
.product-result .btn { max-width: 100%; white-space: normal; overflow-wrap: anywhere; font-family: inherit; }
.product-result .btn:focus-visible { outline: 2px solid var(--primary-2); outline-offset: 3px; }
.product-result .btn:disabled { opacity: .55; cursor: default; transform: none; }
.product-group { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border); }
.product-group-title { margin: 0 0 12px; font-size: 15px; font-weight: 600; }
.product-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 180px), 1fr)); gap: 12px; }
.product-item { min-width: 0; padding: 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg-2); }
.product-preview {
    display: flex; align-items: center; justify-content: center; aspect-ratio: 1;
    overflow: hidden; border-radius: 6px; background: var(--bg); text-align: center;
}
.product-preview img { display: block; width: 100%; height: 100%; object-fit: contain; }
.product-preview .product-note { padding: 8px; }
.product-item-title { margin: 8px 0; font-size: 13px; font-weight: 600; }
.product-item .btn { flex: 1 1 auto; padding: 8px 10px; font-size: 12px; }
.product-progress { margin-top: 10px; font-size: 12px; color: var(--text-dim); overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
.product-progress progress { display: block; width: 100%; height: 6px; margin-bottom: 6px; accent-color: var(--primary-2); }
.product-progress progress[hidden] { display: none; }
.product-progress.is-error { color: var(--text); border-left: 2px solid var(--primary); padding-left: 8px; }
@media (max-width: 560px) {
    .product-grid { grid-template-columns: repeat(auto-fill, minmax(min(100%, 140px), 1fr)); gap: 10px; }
    .product-item { padding: 8px; }
    .product-item .btn { flex-basis: 100%; }
}

.video-block video,
.video-block .cover-preview {
    width: 100%; max-height: 540px;
    background: #000; border-radius: 10px;
    aspect-ratio: 9 / 16;
    object-fit: contain;
}
/* 关闭在线播放后的封面提示条 */
.video-block .cover-tip {
    margin-top: 8px;
    font-size: 12.5px; color: var(--text-dim);
    text-align: center; line-height: 1.5;
}

/* Quality chips */
.quality-bar {
    display: flex; flex-wrap: wrap; gap: 6px;
    margin-top: 10px;
}
.chip {
    position: relative;
    display: inline-flex; align-items: baseline; gap: 4px;
    padding: 5px 12px;
    background: var(--surface-hi);
    border: 1px solid var(--border);
    border-radius: 999px;
    color: var(--text-dim);
    font-size: 12px;
    cursor: pointer;
    transition: all .15s ease;
}
.chip:hover { color: var(--text); border-color: #b9bfd0; }
.chip.active {
    background: var(--accent);
    color: #fff; border-color: transparent;
    font-weight: 600;
}
.chip.recommended::before {
    content: "⭐"; margin-right: 2px; font-size: 10px;
}
.chip .chip-size { font-size: 11px; opacity: .8; }
.chip.active .chip-size { color: rgba(255,255,255,.9); }
.image-block {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 10px;
}
.image-block .image-item {
    display: flex; flex-direction: column; gap: 6px;
}
.image-block img {
    width: 100%; aspect-ratio: 3/4;
    object-fit: cover; border-radius: 8px;
    border: 1px solid var(--border);
    transition: transform .2s ease;
    background: #eef0f6;
}
.image-block img:hover { transform: scale(1.02); }
.image-block .image-dl { padding: 6px 8px; font-size: 12px; }
.btn.loading { opacity: .8; cursor: progress; }
.btn[aria-busy="true"] { pointer-events: none; }

.meta .author { display: flex; align-items: center; gap: 12px; }
.meta .avatar { width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--border); background: #E3E7EF; }
.meta .nick { font-weight: 600; }
.meta .uid { color: var(--text-dim); font-size: 12px; }
.meta .desc {
    margin: 16px 0; white-space: pre-wrap; word-break: break-word;
    color: var(--text); line-height: 1.7;
}
.meta .stats { display: flex; flex-wrap: wrap; gap: 16px; color: var(--text-dim); font-size: 14px; margin-bottom: 18px; }
.meta .stats b { color: var(--text); font-weight: 600; margin-left: 3px; }
.meta .btns { display: flex; flex-wrap: wrap; gap: 10px; }

/* Features */
.features { padding: 60px 0 20px; }
.features h2, .faq h2 { text-align: center; margin: 0 0 32px; font-size: 26px; }
.features .grid {
    display: grid; gap: 16px;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.features .card {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 22px;
}
.features .ic { font-size: 24px; }
.features h3 { margin: 10px 0 6px; font-size: 17px; }
.features p { color: var(--text-dim); margin: 0; font-size: 14px; }

/* 十一平台解析矩阵（2026-09-16、2026-09-20 补微博/头条）：首页关键词锚点内链卡片，复用 features 网格/卡片 */
.platforms .grid { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.platforms a.card {
    display: block; color: inherit; text-decoration: none;
    transition: border-color .15s ease, transform .15s ease;
}
.platforms a.card:hover { border-color: #1F4FFF; transform: translateY(-2px); }

/* FAQ */
.faq { padding: 40px 0 60px; }
.faq details {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 10px; padding: 14px 18px; margin-bottom: 10px;
}
.faq summary { cursor: pointer; font-weight: 500; }
.faq p { color: var(--text-dim); margin: 10px 0 0; }

/* 知识科普与使用须知：两张等宽卡片（延伸阅读 / 合规声明），替代松散列表+大声明框 */
.guides { padding: 12px 0 60px; }
.guides-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.guide-card {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 22px;
}
.guide-card h3 { margin: 0 0 14px; font-size: 16px; font-weight: 700; }
.guide-row {
    display: block; position: relative;
    padding: 12px 40px 12px 14px; margin-bottom: 10px;
    border: 1px solid var(--border); border-radius: 10px;
}
.guide-row:last-child { margin-bottom: 0; }
.guide-row::after {
    content: "→"; position: absolute; right: 14px; top: 50%;
    transform: translateY(-50%); color: var(--text-dim); font-size: 14px;
    transition: transform .15s ease, color .15s ease;
}
.guide-row:hover { border-color: #b9bfd0; background: var(--surface-hi); text-decoration: none; }
.guide-row:hover::after { transform: translateY(-50%) translateX(3px); color: var(--primary-2); }
.guide-t { display: block; font-weight: 600; font-size: 14.5px; }
.guide-d { display: block; margin-top: 3px; color: var(--text-dim); font-size: 13px; line-height: 1.65; }
/* 声明卡：克制的警示样式（细边+淡底），不抢视觉权重 */
.guide-notice { border-left: 3px solid #ffd166; }
.guide-notice p { margin: 0 0 10px; color: var(--text-dim); font-size: 13.5px; line-height: 1.8; }
.guide-links { margin: 0; font-size: 13px; color: var(--text-dim); }
@media (max-width: 720px) {
    .guides-grid { grid-template-columns: 1fr; }
}

/* Footer：三栏分组（教程双列 / 产品 / 条款），替代一段式链接墙 */
.site-footer {
    border-top: 1px solid var(--border);
    padding: 44px 0 30px; color: var(--text-dim); font-size: 13px;
}
.footer-cols {
    display: grid; grid-template-columns: 2.2fr 1fr 1fr; gap: 36px;
    text-align: left; margin-bottom: 30px;
}
/* 后台配了友情链接才切四栏（app.js 加 .has-friends）；没配就不留一个空标题栏 */
.footer-cols.has-friends { grid-template-columns: 2.2fr 1fr 1fr 1fr; gap: 28px; }
.footer-group h4 {
    margin: 0 0 14px; font-size: 12.5px; font-weight: 600;
    letter-spacing: .14em; color: var(--text-dim);
}
.footer-group ul { list-style: none; margin: 0; padding: 0; }
.footer-group li { margin-bottom: 8px; line-height: 1.5; }
.footer-group a { color: var(--text-dim); font-size: 13px; }
.footer-group a:hover { color: var(--text); text-decoration: none; }
/* 教程组链接多，组内双列排布 */
.footer-guides { display: grid; grid-template-columns: 1fr 1fr; gap: 0 24px; }
/* 友链栏底部的「申请互换」：给想换链的站长一个明确落点 */
.footer-friends-apply { margin: 12px 0 0; font-size: 12px; }
.footer-friends-apply a { color: var(--primary-2); opacity: .8; }
.footer-friends-apply a:hover { opacity: 1; }
.footer-copy {
    text-align: center; margin: 0; padding-top: 22px;
    border-top: 1px solid var(--border); color: var(--text-dim); font-size: 13px;
}
@media (max-width: 720px) {
    .footer-cols { grid-template-columns: 1fr; gap: 26px; }
}
@media (max-width: 420px) {
    .footer-guides { grid-template-columns: 1fr; }
}

/* ============ 微信小程序推广 ============ */
.miniapp { padding: 44px 0 10px; }
.miniapp-card {
    display: flex; align-items: center; gap: 28px;
    background: linear-gradient(135deg, rgba(79,70,229,.05), rgba(124,58,237,.05));
    border: 1px solid var(--border); border-radius: var(--radius); padding: 24px 28px;
}
.miniapp-info { flex: 1; min-width: 0; }
.miniapp-info h2 { margin: 0 0 10px; font-size: 22px; }
.miniapp-info p { color: var(--text-dim); line-height: 1.85; margin: 0 0 14px; font-size: 14px; }
.miniapp-chips { display: flex; flex-wrap: wrap; gap: 9px; }
.miniapp-chips span {
    font-size: 12.5px; color: var(--text); background: var(--surface-hi);
    border: 1px solid var(--border); border-radius: 999px; padding: 5px 13px;
}
.miniapp-qr { text-align: center; flex-shrink: 0; }
.miniapp-qr img {
    width: 148px; height: 148px; object-fit: contain;
    background: #fff; border-radius: 10px; padding: 8px; display: block;
}
.miniapp-qr .qr-cap { margin-top: 9px; font-size: 12.5px; color: var(--text-dim); }
@media (max-width: 560px) {
    .miniapp-card { flex-direction: column; text-align: center; padding: 22px 18px; gap: 18px; }
    .miniapp-chips { justify-content: center; }
    .miniapp-qr img { width: 150px; height: 150px; }
}

/* ============ 下载完成卡片内的小程序引流条（最高价值引流位） ============ */
.result-miniapp {
    display: flex; align-items: center; justify-content: space-between; gap: 18px;
    margin-top: 16px; padding: 14px 18px;
    background: linear-gradient(135deg, rgba(79,70,229,.06), rgba(124,58,237,.06));
    border: 1px solid var(--border); border-radius: 12px;
}
.result-miniapp .rm-text { min-width: 0; }
.result-miniapp .rm-title { font-weight: 600; font-size: 15px; margin-bottom: 4px; }
.result-miniapp .rm-sub { color: var(--text-dim); font-size: 12.5px; line-height: 1.6; }
.result-miniapp .rm-qr { text-align: center; flex-shrink: 0; }
.result-miniapp .rm-qr img {
    width: 96px; height: 96px; object-fit: contain;
    background: #fff; border-radius: 8px; padding: 5px; display: block;
}
.result-miniapp .rm-qr span { display: block; margin-top: 5px; font-size: 11.5px; color: var(--text-dim); }
@media (max-width: 560px) {
    .result-miniapp { flex-direction: column; text-align: center; gap: 12px; padding: 14px; }
}

/* ============ 加微信领会员体验钩子（私域入口；仅中文界面挂载，见 app.js wxHookEl） ============ */
.wx-hook {
    display: flex; align-items: center; gap: 12px;
    margin-top: 12px; padding: 10px 14px;
    background: rgba(46, 204, 113, 0.10);
    border: 1px solid rgba(46, 204, 113, 0.34); border-radius: 11px;
    font-size: 12.8px; line-height: 1.6; color: var(--text-dim);
}
.wx-hook img {
    width: 54px; height: 54px; object-fit: contain; flex-shrink: 0;
    background: #fff; border-radius: 7px; padding: 3px; display: block; cursor: zoom-in;
}
.wx-hook .wx-txt { min-width: 0; }
.wx-hook b { color: var(--text); font-weight: 600; white-space: nowrap; }
.wx-hook .wx-cap { display: block; margin-top: 2px; font-size: 11.5px; opacity: .82; }
.wx-hook .wx-open {
    margin-left: auto; flex-shrink: 0; align-self: center;
    padding: 7px 13px; border-radius: 999px; white-space: nowrap;
    border: 1px solid rgba(46, 204, 113, 0.55); background: rgba(46, 204, 113, 0.16);
    color: var(--text); font-size: 12.5px; font-weight: 600; cursor: pointer; font-family: inherit;
}
.wx-hook .wx-open:hover { background: rgba(46, 204, 113, 0.3); }
@media (max-width: 560px) {
    .wx-hook { flex-wrap: wrap; gap: 10px; padding: 10px 12px; font-size: 12.2px; }
    .wx-hook img { width: 46px; height: 46px; }
    /* 窄屏把「看二维码」降成整行按钮：390px 下挤在右侧会把文案压成 4 行，很难看 */
    .wx-hook .wx-txt { flex: 1 1 auto; }
    .wx-hook .wx-open { margin-left: 0; flex: 1 1 100%; text-align: center; padding: 7px 10px; font-size: 12.5px; }
}

/* ============ AI 解读卡（第一档：只读标题+封面；仅中文界面挂载） ============
   2026-11-06：原来用紫色系，和全站钴蓝(--primary)两套语言，看着像第三方插件；
   改成品牌蓝、按钮白底蓝字，既不抢 .btn.primary 的下载主操作，又和整站一致。 */
.ai-analyze {
    margin-top: 16px; padding: 14px 16px;
    background: linear-gradient(135deg, rgba(31,79,255,.06), rgba(31,79,255,.02));
    border: 1px solid var(--border); border-radius: 12px;
}
.ai-analyze .aa-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ai-analyze .aa-btn {
    padding: 8px 18px; border: 1px solid rgba(31,79,255,0.45); border-radius: 999px;
    background: var(--surface); color: var(--primary);
    font-size: 13.5px; font-weight: 600; cursor: pointer; font-family: inherit;
}
.ai-analyze .aa-btn:hover:not([disabled]) {
    background: rgba(31,79,255,0.08); border-color: var(--primary);
}
.ai-analyze .aa-btn[disabled] { opacity: .6; cursor: progress; }
/* 付费档用琥珀色与免费的蓝色区分：颜色本身就在说"这个要额外花次数" */
.ai-analyze .aa-deep { border-color: rgba(245,158,11,0.6); background: rgba(245,158,11,0.14); color: var(--text); }
.ai-analyze .aa-deep:hover:not([disabled]) { background: rgba(245,158,11,0.26); border-color: rgba(245,158,11,0.8); }
.ai-analyze .aa-note { color: var(--text-dim); font-size: 12px; }
.ai-analyze .aa-body {
    margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border);
    font-size: 13.5px; line-height: 1.85; white-space: pre-wrap; word-break: break-word;
}
.ai-analyze .aa-body.err { color: #ff8a8a; }
.ai-analyze .aa-body.loading { color: var(--text-dim); }

/* ============ 小程序一键打开 CTA（仅手机端展示，微信绿） ============ */
.rm-open {
    margin-top: 10px; padding: 9px 20px; border: none; border-radius: 999px;
    background: #07c160; color: #fff; font-size: 13.5px; font-weight: 700; cursor: pointer;
    box-shadow: 0 4px 14px rgba(7,193,96,.3);
}
.rm-open:active { transform: translateY(1px); }
.miniapp-open {
    display: none; margin-top: 12px; padding: 9px 22px; border: none; border-radius: 999px;
    background: #07c160; color: #fff; font-size: 13.5px; font-weight: 700; cursor: pointer;
    box-shadow: 0 4px 14px rgba(7,193,96,.3);
}
.miniapp-open:active { transform: translateY(1px); }
@media (max-width: 720px) { .miniapp-open { display: inline-block; } }

/* 手机端首访小程序引导条（固定底部，只弹一次） */
.miniapp-bar {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 950;
    display: flex; align-items: center; gap: 10px;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
    background: rgba(255,255,255,.96); backdrop-filter: saturate(180%) blur(10px);
    border-top: 1px solid var(--border); box-shadow: 0 -6px 24px rgba(15,18,34,.1);
}
.miniapp-bar .mb-txt { flex: 1; min-width: 0; font-size: 12.5px; color: var(--text); line-height: 1.45; }
.miniapp-bar .mb-open {
    padding: 7px 18px; border: none; border-radius: 999px; white-space: nowrap;
    background: #07c160; color: #fff; font-weight: 700; font-size: 13px; cursor: pointer;
}
.miniapp-bar .mb-x { background: none; border: none; color: var(--text-dim); font-size: 14px; cursor: pointer; padding: 6px; }

/* ============ 软上限解锁弹窗（额度用完 → 小程序领码引导） ============ */
.unlock-steps { margin: 4px 0 14px; padding-left: 20px; color: var(--text-dim); font-size: 13.5px; line-height: 1.9; text-align: left; }
.unlock-qr { text-align: center; margin-bottom: 14px; }
.unlock-qr img { width: 116px; height: 116px; object-fit: contain; background: #fff; border-radius: 10px; padding: 6px; display: block; margin: 0 auto; }
.unlock-qr span { display: block; margin-top: 6px; font-size: 11.5px; color: var(--text-dim); }
.unlock-form { display: flex; gap: 10px; justify-content: center; }
/* 浅色票券风输入框：深色主题下高对比，一眼就能看到（常驻解锁栏与弹窗共用） */
.unlock-input {
    width: 150px; padding: 10px 14px; text-align: center;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 17px; letter-spacing: 5px;
    color: #241a05; background: #fff8e8;
    border: 2px solid #fbbf24; border-radius: 10px; outline: none;
    box-shadow: 0 0 0 3px rgba(251, 191, 36, .16);
}
.unlock-input::placeholder { color: #8a6a2f; letter-spacing: 2px; font-size: 13px; }
.unlock-input:focus { border-color: #f59e0b; box-shadow: 0 0 0 4px rgba(251, 191, 36, .3); }

/* ============ 结果卡高级工具（仅抖音：评论/作者作品/喜欢/收藏/合辑） ============ */
.pro-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.pro-btn { font-size: 12.5px; padding: 6px 12px; }
.pro-panel { margin-top: 12px; border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; background: var(--surface); }
.pro-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; font-size: 13px; font-weight: 700; margin-bottom: 8px; }
/* 面板右上角小操作：导出评论 */
.pro-act { background: none; border: 1px solid var(--border); color: var(--text-dim); border-radius: 8px; padding: 3px 10px; font-size: 12px; font-weight: 400; cursor: pointer; white-space: nowrap; }
.pro-act:hover { color: var(--primary-2); border-color: var(--primary-2); }
/* Pro 撞每日限额后，面板内的解锁码输入入口（弹统一解锁弹窗） */
.pro-unlock-entry { background: none; border: 1px solid var(--primary-2); color: var(--primary-2); border-radius: 8px; padding: 4px 12px; font-size: 12px; cursor: pointer; margin-top: 8px; }
.pro-unlock-entry:hover { filter: brightness(1.15); }
.pro-msg { font-size: 12.5px; color: var(--text-dim); padding: 4px 0; }
.pro-cmt { font-size: 13px; line-height: 1.7; padding: 6px 0; border-bottom: 1px dashed var(--border); word-break: break-all; }
.pro-cmt:last-child { border-bottom: none; }
.pro-cmt b { color: var(--primary-2); margin-right: 4px; }
.pro-cmt-digg { float: right; color: var(--text-dim); font-size: 12px; margin-left: 8px; }
/* 二级评论：展开按钮 + 缩进回复区（左竖线区分层级） */
.pro-cmt-reply-btn { background: none; border: none; color: var(--primary-2); font-size: 12px; cursor: pointer; padding: 2px 0; }
.pro-reply-more { display: block; margin: 4px 0 2px; color: var(--text-dim); }
.pro-cmt-replies { margin: 6px 0 2px; padding-left: 10px; border-left: 2px solid var(--border); }
.pro-cmt-replies .pro-cmt { font-size: 12.5px; padding: 4px 0; }
.pro-cmt-replies .pro-cmt:last-child { border-bottom: none; }
.pro-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 8px; }
.pro-work { display: block; border-radius: 8px; overflow: hidden; background: var(--surface-hi); border: 1px solid var(--border); cursor: pointer; transition: border-color .15s; }
.pro-work:hover { border-color: var(--primary-2); text-decoration: none; }
.pro-work img { width: 100%; aspect-ratio: 3/4; object-fit: cover; display: block; }
.pro-work span { display: block; font-size: 11px; color: var(--text-dim); padding: 4px 6px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pro-more { display: block; margin: 10px auto 0; background: none; border: 1px solid var(--border); color: var(--text-dim); border-radius: 8px; padding: 6px 16px; font-size: 12px; cursor: pointer; }
.pro-profile { display: flex; gap: 10px; align-items: center; margin-bottom: 8px; }
.pro-profile img { width: 44px; height: 44px; border-radius: 50%; background: var(--surface-hi); }
.pro-profile-txt b { font-size: 14px; }
.pro-sig { font-size: 12px; color: var(--text-dim); margin-top: 2px; max-width: 480px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pro-stats { display: flex; flex-wrap: wrap; gap: 14px; font-size: 12.5px; color: var(--text-dim); }
.pro-stats b { color: var(--text); }

/* ============ 悬浮引流气泡（小程序 / 支持我们 两个独立气泡，仅中文界面） ============ */
.sfab-bubble {
    position: fixed; right: 24px; bottom: 84px; z-index: 900;
    display: inline-flex; align-items: center; gap: 6px;
    padding: 10px 16px; font-size: 14px; font-weight: 600;
    color: #fff; border: none; border-radius: 999px; cursor: pointer;
    background: linear-gradient(135deg, #1F4FFF, #1F4FFF);
    box-shadow: var(--shadow); transition: transform .15s, box-shadow .15s;
}
.sfab-bubble:hover { transform: translateY(-2px); box-shadow: 0 12px 30px rgba(79,70,229,.32); }
.sfab-bubble .sfab-ic { font-size: 15px; }
/* 小程序气泡：叠在“支持我们”上方，青蓝配色区分 */
.sfab-bubble-mini {
    bottom: 132px;
    background: linear-gradient(135deg, #25f4ee, #1677ff);
}
.sfab-bubble-mini:hover { box-shadow: 0 12px 36px rgba(37,244,238,.35); }
/* 扩展气泡：叠在“小程序”上方，紫色渐变区分（直链教程页） */
.sfab-bubble-ext {
    bottom: 180px;
    background: linear-gradient(135deg, #9d84ff, #6c5ce7);
    text-decoration: none;
}
.sfab-bubble-ext:hover { box-shadow: 0 12px 36px rgba(157,132,255,.4); }
/* API 气泡：叠在“扩展”上方，玫红-紫渐变区分；点开为精简文档面板 */
.sfab-bubble-api {
    bottom: 228px;
    background: linear-gradient(135deg, #ec4899, #a855f7);
}
.sfab-bubble-api:hover { box-shadow: 0 12px 36px rgba(236,72,153,.4); }
/* 最近解析气泡：叠在「免费使用」下方（基样式必须写在下方 @media 之前，
   否则同特异度后声明会吃掉窄屏偏移——2026-10-21 实测 390px 下与免费使用重叠 22px） */
.sfab-bubble-hist {
    bottom: 276px;
    background: linear-gradient(135deg, #f59e0b, #f97316);
}
.sfab-bubble-hist:hover { box-shadow: 0 12px 36px rgba(245,158,11,.4); }
.sfab-panel-api { bottom: 228px; width: 264px; }
.sfab-panel-ext { bottom: 184px; width: 268px; }
/* 教程面板：三个入口竖排，268px 宽度里横排会把按钮文字挤成两行 */
.sfab-panel-ext .sfab-api-btns { flex-direction: column; }
.sfab-panel-ext .sfab-api-btns .btn { flex: none; }
.sfab-api-pre {
    margin: 10px 0 0; padding: 10px 12px; border-radius: 10px;
    background: #F5F7FB; border: 1px solid var(--border);
    font-family: ui-monospace, Consolas, monospace; font-size: 11.5px; line-height: 1.7;
    white-space: pre-wrap; word-break: break-all;
}
.sfab-api-btns { display: flex; gap: 8px; margin-top: 10px; }
.sfab-api-btns .btn { flex: 1; padding: 8px 10px; font-size: 12.5px; text-align: center; text-decoration: none; }
.sfab-panel {
    position: fixed; right: 24px; bottom: 84px; z-index: 901;
    width: 244px; padding: 18px 16px 14px;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 16px; box-shadow: 0 16px 48px rgba(15,18,34,.14); text-align: center;
}
.sfab-panel-mini { bottom: 132px; }
.sfab-x {
    position: absolute; top: 8px; right: 10px; background: none; border: none;
    color: var(--text-dim); font-size: 15px; cursor: pointer; line-height: 1;
}
.sfab-x:hover { color: var(--text); }
.sfab-hd { font-weight: 700; font-size: 15px; margin: 0 0 12px; }
.sfab-sec-t { font-size: 13.5px; font-weight: 600; margin-bottom: 8px; }
.sfab-sec img { width: 128px; height: 128px; object-fit: contain; background: #fff; border-radius: 10px; padding: 6px; }
.sfab-cap { font-size: 11.5px; color: var(--text-dim); margin-top: 6px; line-height: 1.5; }
.sfab-div { height: 1px; background: var(--border); margin: 14px 0; }
.sfab-pays { display: flex; justify-content: center; gap: 12px; }
.sfab-pay img { width: 88px; height: 88px; object-fit: contain; background: #fff; border-radius: 8px; padding: 5px; display: block; }
.sfab-pay span { display: block; margin-top: 5px; font-size: 12px; font-weight: 600; }
.sfab-pay .pay-wechat { color: #07c160; }
.sfab-pay .pay-alipay { color: #1677ff; }
.sfab-tip { font-size: 11px; color: var(--text-dim); margin: 12px 0 0; line-height: 1.5; }
.sfab-dismiss {
    margin-top: 10px; background: none; border: none; color: var(--text-dim);
    font-size: 12px; cursor: pointer; text-decoration: underline;
}
.sfab-dismiss:hover { color: var(--text); }
@media (max-width: 560px) {
    .sfab-bubble { right: 16px; bottom: 72px; padding: 9px 13px; font-size: 13px; }
    .sfab-bubble-mini { bottom: 116px; }
    .sfab-bubble-ext { bottom: 160px; }
    .sfab-bubble-api { bottom: 204px; }
    .sfab-bubble-hist { bottom: 248px; }
    .sfab-panel { right: 16px; bottom: 72px; width: calc(100vw - 32px); max-width: 300px; }
    .sfab-panel-mini { bottom: 116px; }
    .sfab-panel-api { bottom: 204px; }
    .sfab-panel-ext { bottom: 160px; }
}

/* ============ 最近解析侧栏：气泡 + 右侧滑出抽屉 ============ */
/* 记录移出页面流，避免列表撑长页面导致来回滚动；抽屉内部自滚动 */
/* 气泡底色/定位已并入上方气泡组（必须在 @media 之前声明，窄屏偏移才生效） */
.sfab-badge {
    position: absolute; top: -6px; right: -6px;
    min-width: 18px; height: 18px; padding: 0 5px;
    display: inline-flex; align-items: center; justify-content: center;
    background: #fff; color: #b45309; font-size: 11px; font-weight: 700;
    border-radius: 999px; box-shadow: 0 2px 8px rgba(15,18,34,.2);
}
.sfab-badge.hidden { display: none; }
.hist-drawer {
    position: fixed; inset: 0; z-index: 950;
    display: flex; justify-content: flex-end;
}
.hist-drawer.hidden { display: none; }
.hist-drawer-mask { position: absolute; inset: 0; background: rgba(0,0,0,.5); }
/* 宽屏做成非模态侧栏：不挡中间内容，可边看历史边解析 */
@media (min-width: 900px) { .hist-drawer-mask { display: none; } }
.hist-drawer-panel {
    position: relative; height: 100%; width: min(92vw, 340px);
    display: flex; flex-direction: column;
    background: var(--surface); border-left: 1px solid var(--border);
    box-shadow: -16px 0 48px rgba(15,18,34,.12);
    padding: 16px 14px;
    animation: hist-drawer-in .22s ease-out;
}
@keyframes hist-drawer-in { from { transform: translateX(100%); } to { transform: translateX(0); } }
.hist-drawer-head {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 10px;
}
.hist-drawer-actions { display: inline-flex; align-items: center; gap: 8px; }
.hist-drawer-x {
    background: none; border: none; color: var(--text-dim);
    font-size: 16px; cursor: pointer; line-height: 1;
}
.hist-drawer-x:hover { color: var(--text); }
.hist-drawer .history-list { overflow-y: auto; flex: 1; min-height: 0; }
.hist-empty { color: var(--text-dim); font-size: 13px; text-align: center; padding: 24px 0; }
.hist-empty.hidden { display: none; }

/* ============ 扩展推广横幅（顶部可关闭）与风控引导条 ============ */
.ext-banner {
    display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap;
    margin: 0 auto 18px; max-width: 760px; padding: 10px 16px;
    background: rgba(157,132,255,.10); border: 1px solid rgba(157,132,255,.4);
    border-radius: 10px; font-size: 13.5px;
}
.ext-banner.hidden { display: none; }
.ext-banner-btn {
    background: linear-gradient(135deg, #9d84ff, #6c5ce7); color: #fff;
    padding: 5px 14px; border-radius: 999px; font-weight: 600;
    text-decoration: none; white-space: nowrap;
}
.ext-banner-btn:hover { opacity: .9; }
.ext-banner-x { background: none; border: none; color: var(--text-dim); cursor: pointer; font-size: 14px; }
.ext-banner-x:hover { color: var(--text); }
/* 解析完成悬浮提示（替代自动滚动） */
.result-jump {
    position: fixed; left: 50%; transform: translateX(-50%); bottom: 28px; z-index: 70;
    background: linear-gradient(135deg, #2ecc71, #27ae60); color: #fff; border: none;
    padding: 11px 24px; border-radius: 999px; font-size: 14px; font-weight: 600;
    cursor: pointer; box-shadow: 0 6px 24px rgba(15,18,34,.2);
    animation: result-jump-in .25s ease-out;
}
.result-jump:hover { filter: brightness(1.08); }
.result-jump.hidden { display: none; }
@keyframes result-jump-in {
    from { opacity: 0; transform: translateX(-50%) translateY(10px); }
    to   { opacity: 1; transform: translateX(-50%) translateY(0); }
}
/* 风控/限流时的扩展安装引导 */
.ext-hint {
    margin: 10px auto 0; max-width: 760px; padding: 10px 14px;
    background: rgba(245,158,11,.08); border: 1px solid rgba(245,158,11,.35);
    border-radius: 8px; font-size: 13px; text-align: center;
}
.ext-hint.hidden { display: none; }
.ext-hint a { color: #b45309; font-weight: 600; }

/* 二维码图片可点击/长按下载（手机端存相册后扫码） */
.qr-dl { display: inline-block; line-height: 0; text-decoration: none; cursor: pointer; }
.qr-hint { font-size: 11.5px; color: var(--text-dim); margin-top: 6px; line-height: 1.5; }

/* Mobile tweaks */
@media (max-width: 560px) {
    .hero h1 { font-size: 30px; }
    .hero { padding: 40px 0 20px; }
    .nav a { margin-left: 14px; }
    .nav-acct { margin-left: 8px; padding: 5px 12px; font-size: 13px; }
    .fb-fab { right: 16px; bottom: 16px; padding: 10px 14px; }
}
/* 底部引导条在屏时：反馈悬浮按钮上移避让，不被遮挡 */
body.has-miniapp-bar .fb-fab {
    bottom: calc(64px + env(safe-area-inset-bottom));
}
/* 超窄屏：头部收紧，避免品牌+导航换行挤压 */
@media (max-width: 420px) {
    .brand { font-size: 16px; }
    .brand em { display: none; }
    .nav a { margin-left: 10px; font-size: 13px; }
    .lang-btn { margin-left: 10px; padding: 4px 10px; }
}

/* ============ 超额解锁弹窗（重新设计：配额计度 + 权益行 + 品牌渐变 CTA） ============ */
.um-modal {
    position: fixed; inset: 0; z-index: 1000;
    display: flex; align-items: center; justify-content: center; padding: 16px;
    /* 矮屏（手机横屏/小屏）下弹窗比视口高：可滚动 + margin:auto 才能保证顶部不被裁掉 */
    overflow-y: auto; overscroll-behavior: contain;
}
.um-modal.hidden { display: none; }
.um-mask { position: fixed; inset: 0; background: rgba(15,18,34,.45); backdrop-filter: blur(3px); }
.um-card {
    position: relative; z-index: 1; width: min(92vw, 430px); margin: auto;
    background: #ffffff;
    border: 1px solid var(--border); border-radius: 20px;
    padding: 26px 24px 20px; box-shadow: 0 24px 70px rgba(15,18,34,.18);
    overflow: hidden; text-align: center;
}
.um-card::before { /* 顶部一抹品牌光晕，弱化"系统告警"感 */
    content: ""; position: absolute; top: -70px; left: 50%; transform: translateX(-50%);
    width: 300px; height: 140px; border-radius: 50%;
    background: radial-gradient(closest-side, rgba(236,72,153,.32), rgba(124,58,237,.16), transparent);
    pointer-events: none;
}
.um-x { position: absolute; top: 12px; right: 14px; z-index: 2; background: transparent; border: none;
    color: var(--text-dim); font-size: 18px; cursor: pointer; line-height: 1; }
.um-x:hover { color: var(--text); }
.um-quota { position: relative; display: inline-flex; align-items: center; gap: 7px;
    padding: 6px 14px; border-radius: 999px; background: rgba(220,38,38,.07);
    border: 1px solid rgba(220,38,38,.3); margin-bottom: 14px; }
.um-pip { width: 9px; height: 9px; border-radius: 50%;
    background: linear-gradient(135deg, #fe2c55, #ec4899); box-shadow: 0 0 8px rgba(254,44,85,.7); }
.um-quota-txt { font-size: 12px; font-weight: 700; color: #dc2626; letter-spacing: .3px; }
.um-card h3 { position: relative; margin: 0 0 8px; font-size: 22px; font-weight: 800; letter-spacing: -.01em; }
.um-lead { position: relative; margin: 0 0 16px; font-size: 13.5px; line-height: 1.7; color: var(--text-dim); }
.um-lead b { color: var(--text); font-weight: 700; }
/* 首充翻倍横幅（仅首充资格用户可见，JS 根据 payinfo.promo_first_match 切换） */
.um-promo { position: relative; margin: 0 0 14px; padding: 10px 14px; border-radius: 12px;
    font-size: 13.5px; line-height: 1.5; color: #92400e; text-align: center;
    background: linear-gradient(100deg, rgba(251,191,36,.14), rgba(245,158,11,.1));
    border: 1px solid rgba(217,119,6,.4); box-shadow: 0 4px 16px rgba(255,150,60,.1); }
.um-promo b { color: #b45309; font-weight: 800; }
.um-promo[hidden] { display: none !important; }
.um-trust { position: relative; margin-top: 12px; font-size: 11.5px; color: var(--text-dim); opacity: .75; }
.um-perks { position: relative; list-style: none; margin: 0 0 18px; padding: 0; text-align: left; }
.um-perks li { display: flex; align-items: center; gap: 10px; padding: 9px 12px; margin-bottom: 7px;
    border-radius: 11px; background: #F5F7FB; border: 1px solid var(--border);
    font-size: 13px; color: var(--text-dim); }
.um-perks li b { color: var(--text); font-weight: 700; }
.um-ic { flex: none; font-size: 16px; }
/* ¥1 特惠档 / 3 天会员：付费墙内主推转化块（未买过本档位的账号才显示） */
.um-trial { position: relative; display: grid; grid-template-columns: auto 1fr auto;
    align-items: center; gap: 4px 12px; margin: 0 0 14px; padding: 12px 14px;
    border: 1.5px solid #1F4FFF; border-radius: 14px; text-decoration: none;
    background: linear-gradient(120deg, #EEF3FF 0%, #F8FAFF 100%); color: var(--ink, #14213D); }
.um-trial[hidden] { display: none !important; }
.um-trial-tag { grid-column: 1; grid-row: 1; padding: 3px 9px; border-radius: 999px;
    background: #1F4FFF; color: #fff; font-size: 11px; font-weight: 800; white-space: nowrap; }
.um-trial-main { grid-column: 2; grid-row: 1; font-size: 16px; font-weight: 700; }
.um-trial-main b { color: #1F4FFF; }
.um-trial-sub { grid-column: 2; grid-row: 2; font-size: 12px; color: var(--mute, #5B6478); }
.um-trial-go { grid-column: 3; grid-row: 1 / span 2; padding: 9px 12px; border-radius: 10px;
    background: #1F4FFF; color: #fff; font-size: 12px; font-weight: 700; white-space: nowrap; }
.um-trial:hover { transform: translateY(-1px); box-shadow: 0 10px 26px rgba(31,79,255,.18); }
@media (max-width: 420px) {
    .um-trial { grid-template-columns: auto 1fr; gap: 4px 10px; }
    .um-trial-go { grid-column: 1 / span 2; grid-row: 3; text-align: center; }
}

.um-cta { position: relative; display: block; padding: 13px 18px; border-radius: 13px; text-align: center;
    text-decoration: none; color: #fff; font-size: 15px; font-weight: 800; letter-spacing: .3px;
    background: linear-gradient(100deg, #1F4FFF 0%, #ec4899 48%, #22d3ee 100%);
    box-shadow: 0 8px 24px rgba(124,58,237,.4); transition: transform .18s, box-shadow .18s, filter .18s; }
.um-cta:hover { transform: translateY(-2px); filter: brightness(1.08); box-shadow: 0 12px 30px rgba(236,72,153,.45); }
.um-later { display: block; width: 100%; margin-top: 10px; background: transparent; border: none;
    color: var(--text-dim); font-size: 13px; cursor: pointer; padding: 6px; }
.um-later:hover { color: var(--text); }
.um-msg { display: block; min-height: 18px; margin-top: 6px; font-size: 13px; }
.um-msg.ok { color: #16a34a; }
.um-msg.error { color: #dc2626; }
@media (prefers-reduced-motion: reduce) {
    .um-cta, .um-cta:hover { transition: none; transform: none; }
}

/* ============ 意见反馈 ============ */
.fb-sub {
    color: var(--text-dim); font-size: 14px; margin: 0 0 18px;
}
.fb-form { max-width: 640px; }
.fb-form .fb-content,
.fb-form .fb-contact {
    width: 100%; display: block;
    background: var(--surface); color: var(--text);
    border: 1px solid var(--border); border-radius: 10px;
    padding: 12px 14px; font-size: 14px; font-family: inherit;
    transition: border-color .15s;
}
.fb-form .fb-content { resize: vertical; min-height: 96px; }
.fb-form .fb-contact { margin-top: 10px; }
.fb-form .fb-content:focus,
.fb-form .fb-contact:focus { outline: none; border-color: var(--primary-2); }
.fb-actions {
    display: flex; align-items: center; gap: 14px; margin-top: 12px;
}
.fb-msg { font-size: 13px; }
.fb-msg.ok { color: #16a34a; }
.fb-msg.error { color: #dc2626; }

/* 悬浮按钮 */
.fb-fab {
    position: fixed; right: 24px; bottom: 24px; z-index: 900;
    display: inline-flex; align-items: center; gap: 6px;
    padding: 11px 18px; font-size: 14px; font-weight: 600;
    color: #fff; border: none; border-radius: 999px; cursor: pointer;
    background: var(--accent); box-shadow: var(--shadow);
    transition: transform .15s, box-shadow .15s;
}
.fb-fab:hover { transform: translateY(-2px); box-shadow: 0 12px 36px rgba(254,44,85,.35); }

/* 反馈弹窗 */
.fb-modal {
    position: fixed; inset: 0; z-index: 1000;
    display: flex; align-items: center; justify-content: center;
    padding: 16px; /* 小屏下卡片与屏幕边缘留缝，避免贴边 */
}
.fb-modal.hidden { display: none; }
.fb-modal-mask {
    position: absolute; inset: 0; background: rgba(15,18,34,.45);
    backdrop-filter: blur(2px);
}
.fb-modal-card {
    position: relative; z-index: 1; width: min(92vw, 480px);
    background: var(--bg-2); border: 1px solid var(--border);
    border-radius: var(--radius); box-shadow: var(--shadow);
    padding: 26px 24px 22px;
    /* 内容超出屏幕时卡片内部滚动（解锁弹窗内容较长，小屏不加会顶出屏幕、
       导致 ✕ 关闭按钮够不到），max-height 保证 ✕ 永远在可视区 */
    max-height: calc(100vh - 32px);
    max-height: calc(100dvh - 32px);
    overflow-y: auto;
    overscroll-behavior: contain;
}
.fb-modal-card h3 { margin: 0 0 6px; font-size: 20px; }
.fb-modal-x {
    position: absolute; top: 12px; right: 14px;
    background: transparent; border: none; color: var(--text-dim);
    font-size: 18px; cursor: pointer; line-height: 1;
}
.fb-modal-x:hover { color: var(--text); }
.fb-modal-card .fb-form { max-width: none; }

/* 作者微信反馈入口：弹窗底部横条，两个标签页均可见；
   二维码必须白底（深色主题下否则扫不出），故强制 background:#fff */
.fb-wx {
    display: flex; align-items: center; gap: 14px;
    margin-top: 16px; padding-top: 14px;
    border-top: 1px dashed var(--border);
}
.fb-wx-qr {
    flex: 0 0 auto; width: 96px; height: 96px;
    object-fit: cover; border-radius: 10px;
    border: 1px solid var(--border); background: #fff;
}
.fb-wx-txt {
    display: flex; flex-direction: column; gap: 3px;
    font-size: 13px; color: var(--text-dim);
}
.fb-wx-txt b { color: var(--text); font-size: 14px; }
.fb-wx-alt { font-size: 12px; opacity: .8; }
/* 「点击放大」提示：链接样式 + zoom-in 光标，本身也可点 */
.fb-wx-zoom {
    font-size: 12px; color: var(--primary);
    cursor: zoom-in; align-self: flex-start;
}
.fb-wx-zoom:hover { text-decoration: underline; }
/* 小二维码可点击放大：zoom-in 光标 + 悬停微放大提示可交互 */
.fb-wx-qr { cursor: zoom-in; transition: transform .15s, box-shadow .15s; }
.fb-wx-qr:hover, .fb-wx-qr:focus-visible {
    transform: scale(1.06);
    box-shadow: 0 6px 20px rgba(15,18,34,.2);
    outline: none;
}

/* 二维码放大浮层（lightbox）：层级高于反馈弹窗，白底大图便于扫码 */
.fbq {
    position: fixed; inset: 0; z-index: 1100;
    display: flex; align-items: center; justify-content: center;
    padding: 20px;
}
.fbq.hidden { display: none; }
.fbq-mask {
    position: absolute; inset: 0;
    background: rgba(15,18,34,.55);
    backdrop-filter: blur(3px);
}
.fbq-card {
    position: relative; z-index: 1; margin: 0;
    background: #fff; border-radius: 14px;
    padding: 18px 18px 12px; text-align: center;
    box-shadow: 0 20px 60px rgba(15,18,34,.25);
    animation: fbq-pop .18s ease-out;
}
@keyframes fbq-pop {
    from { transform: scale(.9); opacity: 0; }
    to   { transform: scale(1); opacity: 1; }
}
.fbq-img {
    display: block; width: min(74vw, 340px); height: auto;
    border-radius: 8px; background: #fff;
}
.fbq-cap { margin-top: 10px; font-size: 13px; color: #333; }
.fbq-x {
    position: absolute; top: -12px; right: -12px;
    width: 32px; height: 32px; border-radius: 50%;
    background: var(--bg-2); color: var(--text);
    border: 1px solid var(--border); cursor: pointer;
    font-size: 15px; line-height: 1;
    display: flex; align-items: center; justify-content: center;
}
.fbq-x:hover { color: var(--primary); }

/* 弹窗内标签页：写反馈 / 我的反馈 */
.fb-tabs {
    display: flex; gap: 8px; margin: 0 0 14px;
    border-bottom: 1px solid var(--border); padding-bottom: 10px;
}
.fb-tab {
    position: relative;
    background: transparent; border: none; cursor: pointer;
    color: var(--text-dim); font-size: 14px; font-weight: 600;
    padding: 4px 10px; border-radius: 8px;
    display: inline-flex; align-items: center; gap: 6px;
}
.fb-tab:hover { color: var(--text); }
.fb-tab.active { color: var(--primary); background: rgba(79,70,229,.08); }
.fb-badge {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 16px; height: 16px; padding: 0 4px;
    background: var(--accent); color: #fff;
    font-size: 11px; font-weight: 700; border-radius: 999px;
}
.fb-badge.hidden { display: none; }

/* 悬浮按钮小红点 */
.fb-fab { position: fixed; }
.fb-fab-badge {
    position: absolute; top: -4px; right: -4px;
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 18px; height: 18px; padding: 0 5px;
    background: #ffd166; color: #1a1a1a;
    font-size: 11px; font-weight: 700; border-radius: 999px;
    box-shadow: 0 2px 8px rgba(15,18,34,.2);
}
.fb-fab-badge.hidden { display: none; }

/* 我的反馈：反馈码列表 */
.fb-item {
    display: flex; align-items: center; gap: 8px;
    margin-bottom: 8px;
}
.fb-item-open {
    flex: 1; display: flex; align-items: center; gap: 10px;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 10px; padding: 10px 12px; cursor: pointer;
    color: var(--text); font-size: 14px; text-align: left;
    transition: border-color .15s;
}
.fb-item-open:hover { border-color: var(--primary-2); }
.fb-item-code { font-weight: 700; font-family: ui-monospace, Menlo, monospace; }
.fb-item-time { color: var(--text-dim); font-size: 12px; }
.fb-item-arrow { margin-left: auto; color: var(--text-dim); }
.fb-item-del {
    flex: 0 0 auto; background: transparent; border: none;
    color: var(--text-dim); cursor: pointer; font-size: 13px; padding: 6px;
}
.fb-item-del:hover { color: #dc2626; }

/* 会话视图 */
.fb-thread-head {
    display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
}
.fb-back {
    background: transparent; border: none; color: var(--text-dim);
    cursor: pointer; font-size: 13px; padding: 2px 0;
}
.fb-back:hover { color: var(--primary); }
.fb-thread-code {
    font-family: ui-monospace, Menlo, monospace; font-size: 12px;
    color: var(--text-dim);
}
.fb-status {
    margin-left: auto; font-size: 11px; font-weight: 600;
    padding: 2px 9px; border-radius: 999px;
}
.fb-status.st0 { background: rgba(245,158,11,.14); color: #b45309; }
.fb-status.st1 { background: rgba(22,163,74,.1); color: #16a34a; }
.fb-status.st2 { background: var(--surface-hi); color: var(--text-dim); }
.fb-thread-body {
    max-height: 300px; overflow-y: auto;
    display: flex; flex-direction: column; gap: 8px;
    padding: 4px 2px; margin-bottom: 10px;
}
.fb-bubble {
    max-width: 85%; padding: 8px 12px; border-radius: 12px;
    font-size: 13px; line-height: 1.5; white-space: pre-wrap; word-break: break-word;
}
.fb-bubble.user {
    align-self: flex-end;
    background: rgba(79,70,229,.07); border: 1px solid rgba(79,70,229,.25);
}
.fb-bubble.admin {
    align-self: flex-start;
    background: var(--surface); border: 1px solid var(--border);
}
.fb-bubble-who { font-size: 11px; color: var(--text-dim); margin-bottom: 3px; }
.fb-reply-row { display: flex; gap: 8px; }
.fb-reply-row input {
    flex: 1; min-width: 0;
    background: var(--surface); color: var(--text);
    border: 1px solid var(--border); border-radius: 10px;
    padding: 10px 12px; font-size: 13px; font-family: inherit;
}
.fb-reply-row input:focus { outline: none; border-color: var(--primary-2); }

/* 输入反馈码行 */
.fb-add-row {
    display: flex; gap: 8px; margin-top: 14px;
    padding-top: 14px; border-top: 1px dashed var(--border);
}
.fb-add-row input {
    flex: 1; min-width: 0;
    background: var(--surface); color: var(--text);
    border: 1px solid var(--border); border-radius: 10px;
    padding: 9px 12px; font-size: 13px; font-family: inherit;
    text-transform: uppercase; letter-spacing: 1px;
}
.fb-add-row input:focus { outline: none; border-color: var(--primary-2); }

/* 联系邮箱行 */
.contact-email-row {
    display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
    margin: 14px 0 8px;
}
.contact-email {
    flex: 1 1 auto; min-width: 0;
    padding: 10px 12px; font-size: 15px; font-weight: 600;
    color: var(--text); word-break: break-all;
    background: var(--bg); border: 1px solid var(--border); border-radius: 10px;
    user-select: all;
}
.contact-copy { flex: 0 0 auto; white-space: nowrap; }

/* 解析历史 */
.history {
    max-width: 720px; margin: 18px auto 0; padding: 14px 16px;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius);
}
.history-head {
    display: flex; align-items: center; justify-content: space-between;
    margin-bottom: 10px;
}
.history-title { font-size: 14px; font-weight: 600; color: var(--text-dim); }
.history-clear {
    background: transparent; border: 1px solid var(--border); color: var(--text-dim);
    font-size: 12px; padding: 4px 10px; border-radius: 999px; cursor: pointer;
    transition: color .15s, border-color .15s;
}
.history-clear:hover { color: var(--primary); border-color: var(--primary); }
.history-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.history-item {
    display: flex; align-items: center; gap: 12px; padding: 8px;
    background: var(--bg-2); border: 1px solid var(--border); border-radius: 10px;
    cursor: pointer; transition: border-color .15s, transform .15s;
}
.history-item:hover { border-color: var(--primary-2); transform: translateX(2px); }
.h-thumb {
    width: 46px; height: 46px; flex: 0 0 46px; border-radius: 8px;
    object-fit: cover; background: var(--surface-hi);
}
.h-thumb-ph {
    display: flex; align-items: center; justify-content: center; font-size: 22px;
}
.h-info { display: flex; flex-direction: column; min-width: 0; gap: 2px; }
.h-desc {
    font-size: 13px; color: var(--text);
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%;
}
.h-meta { font-size: 12px; color: var(--text-dim); }

/* 批量解析提示 */
.batch-tip {
    max-width: 720px; margin: 12px auto 0; padding: 0 2px;
    text-align: left; font-size: 13px;
}
.batch-tip > summary {
    list-style: none; cursor: pointer; color: var(--primary-2);
    padding: 8px 0; user-select: none; text-align: center;
}
.batch-tip > summary::-webkit-details-marker { display: none; }
.batch-tip > summary:hover { text-decoration: underline; }
.batch-tip[open] > summary { color: var(--text); font-weight: 600; }
.batch-tip-body {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 4px 18px 10px; color: var(--text-dim);
}
.batch-tip-body b { color: var(--text); }
.batch-tip-body ol { margin: 8px 0; padding-left: 20px; }
.batch-tip-body li { margin: 4px 0; }
.batch-tip-note { margin: 8px 0 2px; font-size: 12px; opacity: .85; }

/* 批量解析 */
.batch-item {
    border: 1px solid var(--border); border-radius: var(--radius);
    margin-bottom: 16px; overflow: hidden;
}
.batch-item.failed { border-color: #dc2626; }
.batch-item-head {
    padding: 8px 14px; font-size: 13px; font-weight: 600; color: var(--text-dim);
    background: var(--surface); border-bottom: 1px solid var(--border);
}
.batch-item-body { padding: 0; }
.batch-item-err { padding: 12px 14px; font-size: 13px; color: #dc2626; }

/* ============ 「更多平台」下拉（首页导航 + 平台页导航共用） ============ */
/* 导航直达平台链接：窄屏收进「更多平台」下拉，避免导航换行溢出
   （1210 为实测临界：≤1200 显示平台胶囊时「更多平台/EN」会换行） */
@media (max-width: 1210px) { .nav .nav-plat { display: none; } }
/* 平台直达链接与「更多平台」按钮：复用语言切换按钮的胶囊背景板，
   悬停渐变高亮，导航视觉统一 */
.nav-plat {
    padding: 4px 10px;
    font-size: 13px; border-radius: 999px;
    border: 1px solid var(--border); background: transparent;
    transition: border-color .15s, color .15s, background .15s;
}
/* 优先级需高于 .nav a 的 margin-left，否则胶囊间距收不下来 */
.nav .nav-plat { margin-left: 8px; }
.nav-plat:hover {
    color: #fff; border-color: transparent;
    background: var(--accent); text-decoration: none;
}
.nav-more { position: relative; display: inline-block; margin-left: 12px; }
/* hover 桥接：按钮与面板间 12px 空隙若是空白，鼠标移过去时 hover 丢失、
   面板半路消失；用透明伪元素把 hover 区域连成一片 */
.nav-more::after {
    content: ""; position: absolute; left: -8px; right: -8px;
    top: 100%; height: 16px;
}
.nav-more-btn {
    padding: 4px 10px; cursor: pointer;
    color: var(--text-dim); font-size: 13px; font-family: inherit;
    border: 1px solid var(--border); border-radius: 999px; background: transparent;
    transition: border-color .15s, color .15s, background .15s;
}
.nav-more-btn:hover, .nav-more.open .nav-more-btn {
    color: #fff; border-color: transparent;
    background: var(--accent);
}
.nav-more-panel {
    display: none; position: absolute; right: -12px; top: calc(100% + 12px);
    width: 320px; max-width: calc(100vw - 32px); max-height: 66vh; overflow: auto;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 8px;
    box-shadow: var(--shadow); z-index: 30; text-align: left;
}
.nav-more.open .nav-more-panel { display: block; }
/* 桌面端支持 hover 展开，触屏/窄屏只靠点击 */
@media (hover: hover) and (min-width: 721px) {
    .nav-more:hover .nav-more-panel { display: block; }
}
.nav-more-item {
    display: flex; align-items: center; gap: 10px;
    padding: 9px 10px; border-radius: 8px; color: var(--text);
    text-decoration: none; line-height: 1.35;
}
.nav-more-item:hover { background: var(--surface-hi); text-decoration: none; }
.nav-more-emoji { font-size: 18px; width: 24px; text-align: center; flex: none; }
.nav-more-item b { display: block; font-size: 13.5px; font-weight: 600; }
.nav-more-item small { display: block; color: var(--text-dim); font-size: 12px; }

/* ============ 平台独立解析页（plat- 前缀，与首页样式隔离） ============ */
.plat-badge {
    display: inline-block; margin: 0 0 14px; padding: 5px 14px;
    font-size: 13px; font-weight: 600; border-radius: 999px;
    color: var(--plat-accent, var(--primary));
    background: color-mix(in srgb, var(--plat-accent, var(--primary)) 12%, transparent);
    border: 1px solid color-mix(in srgb, var(--plat-accent, var(--primary)) 35%, transparent);
}
.plat-page .hero h1 {
    background: var(--plat-accent, var(--primary));
    -webkit-background-clip: text; background-clip: text; color: transparent;
}
.plat-page .btn.primary {
    background: var(--plat-accent, var(--primary));
}
.plat-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: 0 0 26px; }
.plat-tag {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 6px 13px; border-radius: 999px; font-size: 13px;
    color: var(--text); background: var(--surface);
    border: 1px solid var(--border);
}
.plat-tag-ic { color: var(--plat-accent, var(--primary)); font-weight: 700; }

.plat-section { padding: 44px 0; border-top: 1px solid var(--border); }
.plat-section h2 { font-size: 24px; margin: 0 0 22px; text-align: center; }
.plat-steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.plat-step {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius); padding: 22px;
}
.plat-step-num {
    display: inline-flex; align-items: center; justify-content: center;
    width: 34px; height: 34px; margin-bottom: 12px; border-radius: 50%;
    font-size: 16px; font-weight: 700; color: #fff;
    background: var(--plat-accent, var(--primary));
}
.plat-step h3 { margin: 0 0 8px; font-size: 16px; }
.plat-step p { margin: 0; color: var(--text-dim); font-size: 14px; }
.plat-tutorial { margin: 20px 0 0; text-align: center; font-size: 14px; color: var(--text-dim); }

.plat-faq details {
    background: var(--surface); border: 1px solid var(--border);
    border-radius: 10px; padding: 14px 18px; margin-bottom: 10px;
}
.plat-faq summary { cursor: pointer; font-weight: 500; }
.plat-faq p { color: var(--text-dim); margin: 10px 0 0; }
.plat-faq .wrap { max-width: 760px; }

.plat-others-sub { text-align: center; color: var(--text-dim); margin: -10px 0 24px; font-size: 14px; }
.plat-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 12px;
}
.plat-card {
    display: flex; flex-direction: column; align-items: center; gap: 4px;
    padding: 18px 12px; text-align: center; text-decoration: none;
    background: var(--surface); border: 1px solid var(--border);
    border-radius: var(--radius);
    transition: border-color .15s ease, transform .1s ease;
}
.plat-card:hover { border-color: var(--plat-accent, var(--primary)); transform: translateY(-2px); text-decoration: none; }
.plat-card-emoji { font-size: 26px; }
.plat-card-name { color: var(--text); font-size: 14.5px; font-weight: 600; }
.plat-card small { color: var(--text-dim); font-size: 12px; }

.plat-footer p { margin: 4px 0; text-align: center; }

@media (max-width: 720px) {
    .plat-steps { grid-template-columns: 1fr; }
    .nav-more { margin-left: 14px; }
    /* 窄屏面板改 fixed 全宽，不再贴着按钮，桥接区失去意义且可能误触发 hover */
    .nav-more::after { display: none; }
    /* 窄屏导航链接多时，面板相对按钮定位会顶出屏幕左缘；
       改为 fixed 全宽铺满，两侧留安全边距 */
    .nav-more-panel {
        position: fixed; left: 12px; right: 12px; top: 58px;
        width: auto; max-width: none;
    }
}
@media (max-width: 420px) {
    .nav-more { margin-left: 10px; }
    .nav-more-btn { font-size: 13px; }
}

/* ── 热门搜索关键词块：可见关键词文本 + 内链锚文本（SEO 长尾曝光） ── */
.hotwords { padding: 44px 0 6px; }
.hotwords h2 { font-size: 18px; margin: 0 0 14px; }
.hotwords-lead { margin: 0 0 14px; color: var(--text-dim); font-size: 13px; line-height: 1.9; }
.hotword-cloud { display: flex; flex-wrap: wrap; gap: 8px; }
.hotword-cloud a {
    font-size: 12.5px; color: var(--text-dim); background: var(--surface-hi);
    border: 1px solid var(--border); border-radius: 999px; padding: 5px 13px;
    text-decoration: none; transition: color .15s ease, border-color .15s ease;
}
.hotword-cloud a:hover { color: var(--text); border-color: #b9bfd0; }

/* 关键词墙默认折叠（原生 details，无 JS，链接始终在 HTML 源码中对爬虫可见） */
.hw-collapse summary {
    cursor: pointer; list-style: none;
    display: flex; align-items: center; justify-content: space-between;
    min-height: 44px; padding: 10px 2px;
    color: var(--text-dim); font-size: 13px; user-select: none;
    transition: color .15s ease;
}
.hw-collapse summary::-webkit-details-marker { display: none; }
.hw-collapse summary:hover { color: var(--primary); }
.hw-collapse summary::after { content: "▸"; font-size: 12px; transition: transform .15s ease; }
.hw-collapse[open] summary::after { content: "▾"; }
.hw-collapse[open] .hotword-cloud { margin-top: 4px; }

/* 旧页自检更新横幅（app.js checkAssetsVersion：发版后未导航的存量标签页提示刷新） */
.upd-banner {
    position: fixed; top: 12px; left: 50%; transform: translateX(-50%);
    z-index: 1200; display: flex; align-items: center; gap: 10px;
    max-width: 92vw; padding: 8px 14px; border-radius: 10px;
    background: var(--card, #fff); color: var(--text, #111);
    box-shadow: 0 6px 24px rgba(15, 18, 34, .16); font-size: 13px;
}
.upd-banner button {
    border: 0; border-radius: 8px; padding: 6px 12px; cursor: pointer;
    background: var(--primary, #91a7ff); color: #fff; font-size: 13px;
}

/* ==========================================================================
   站点对外内容（2026-09-29）：公告条 / 平台跑马灯 / 公告与更新 / PWA 安装
   文案由 app.js 从 /api/public/site 拉取后填充，HTML 只留骨架
   —— 后台「站点内容」改完即时生效，不必重新构建镜像。
   （「平台实时数据」数据带同日上线后又应要求下线，样式一并移除。）
   ========================================================================== */

/* ── 站点公告条 ───────────────────────────────────────────────────────── */
.notice-bar {
    display: flex; align-items: center; gap: 12px;
    padding: 10px 20px; font-size: 13.5px; line-height: 1.6;
    background: linear-gradient(90deg, rgba(79,70,229,.06), rgba(124,58,237,.06));
    border-bottom: 1px solid var(--border); color: var(--text);
}
/* .notice-bar 自身声明了 flex，会盖掉 [hidden] 的 UA display:none —— 曾因此出过
   「遮罩关不掉」的一级事故，这里对 hidden 属性与 .hidden 类都显式兜一次 */
.notice-bar[hidden], .notice-bar.hidden { display: none !important; }
.notice-bar .nb-ic { flex: none; font-size: 15px; }
.notice-bar .nb-txt { flex: 1; min-width: 0; }
.notice-bar a.nb-link { color: var(--primary-2); white-space: nowrap; }
.notice-bar .nb-x {
    flex: none; background: none; border: none; cursor: pointer;
    color: var(--text-dim); font-size: 14px; padding: 4px 6px; line-height: 1;
}
.notice-bar .nb-x:hover { color: var(--text); }
.notice-bar.warn { background: linear-gradient(90deg, rgba(251,191,36,.16), rgba(254,44,85,.08)); }
@media (max-width: 560px) {
    .notice-bar { flex-wrap: wrap; gap: 8px; padding: 9px 14px; font-size: 12.5px; }
}

/* ── PWA 一键安装（装到桌面 = 免开浏览器，账号与次数天然互通）────────── */
.pwa-install {
    display: inline-flex; align-items: center; gap: 6px;
    margin: 16px auto 0; padding: 9px 20px;
    font-size: 13.5px; font-weight: 600; font-family: inherit; color: var(--text);
    background: var(--surface-hi); border: 1px solid var(--border); border-radius: 999px;
    cursor: pointer; transition: border-color .15s, transform .15s, color .15s;
}
.pwa-install:hover { border-color: var(--primary-2); color: var(--primary); transform: translateY(-1px); }

/* ── 平台跑马灯 ───────────────────────────────────────────────────────── */
.mq { padding: 34px 0 6px; }
.mq-title {
    margin: 0 0 16px; font-size: 15px; font-weight: 600; letter-spacing: .02em;
    color: var(--text-dim); text-align: center;
}
.mq-viewport {
    /* 无 JS 降级：保持可手动横滑（滚动条藏起来），JS 就绪后加 .mq-on 才切无缝滚动，
       避免只有一份卡片时动画滚出半截空白 */
    overflow-x: auto; overflow-y: hidden; scrollbar-width: none;
    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 5%, #000 95%, transparent 100%);
    mask-image: linear-gradient(to right, transparent 0, #000 5%, #000 95%, transparent 100%);
}
.mq-viewport::-webkit-scrollbar { display: none; }
/* 不能给 track 加左右 padding：width:max-content 下 padding 会计入总宽，
   导致 translateX(-50%) 的接缝对不齐 */
.mq-track { display: flex; gap: 14px; width: max-content; padding: 4px 0; }
.mq-on .mq-viewport { overflow-x: hidden; }
.mq-on .mq-track { animation: mqScroll 40s linear infinite; }
.mq-viewport:hover .mq-track { animation-play-state: paused; }
@keyframes mqScroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
.mq-card {
    flex: none; display: flex; flex-direction: column; align-items: center; gap: 7px;
    width: 76px; padding: 10px 0; border-radius: 12px; text-decoration: none;
    transition: background .16s;
}
.mq-card:hover { background: var(--surface); text-decoration: none; }
.mq-ic {
    width: 44px; height: 44px; border-radius: 13px; font-size: 21px;
    display: flex; align-items: center; justify-content: center;
    background: var(--surface-hi); border: 1px solid var(--border);
    transition: transform .18s, border-color .18s;
}
.mq-card:hover .mq-ic { transform: translateY(-3px) scale(1.06); border-color: var(--primary); }
.mq-name { font-size: 12px; color: var(--text-dim); white-space: nowrap; }
.mq-card:hover .mq-name { color: var(--text); }
.mq-note { margin: 12px 0 0; font-size: 11.5px; color: var(--text-dim); opacity: .7; text-align: center; }

/* ── 反馈与需求收集：这一栏只「收」不「发」（2026-09-29 二次改版）──────── */
.site-feedback { padding: 44px 0 10px; }
.fbk-card {
    display: flex; align-items: center; gap: 26px;
    background: linear-gradient(135deg, rgba(79,70,229,.05), rgba(124,58,237,.05));
    border: 1px solid var(--border); border-radius: var(--radius); padding: 24px 28px;
}
.fbk-main { flex: 1; min-width: 0; }
.fbk-main h3 { margin: 0 0 8px; font-size: 18px; }
.fbk-lead { margin: 0 0 12px; font-size: 13.5px; line-height: 1.85; color: var(--text-dim); }
.fbk-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.fbk-chips span {
    font-size: 12px; color: var(--text); background: var(--surface-hi);
    border: 1px solid var(--border); border-radius: 999px; padding: 5px 12px;
}
.fbk-acts {
    flex: none; min-width: 216px;
    display: flex; flex-direction: column; gap: 10px; align-items: stretch;
}
.fbk-btn {
    padding: 11px 20px; border: none; border-radius: 999px; cursor: pointer;
    font-family: inherit; font-size: 13.5px; font-weight: 700; color: #fff;
    background: var(--accent);
}
.fbk-btn.ghost {
    background: var(--surface-hi); border: 1px solid var(--border);
    color: var(--text); font-weight: 600;
}
.fbk-btn:hover { filter: brightness(1.1); }
.fbk-note { margin: 2px 0 0; font-size: 11.5px; line-height: 1.7; color: var(--text-dim); opacity: .8; }
/* 站长/商务中部入口：页脚那条要滚 7 屏才看得到，这里补一条不用滚到底的 */
.fbk-biz {
    margin: 14px 0 0; padding: 10px 4px 0;
    border-top: 1px dashed var(--border);
    font-size: 12.5px; color: var(--text-dim); text-align: center;
}
.fbk-biz-lead { margin-right: 8px; color: var(--text); font-weight: 600; }
.fbk-biz a { color: var(--primary-2); text-decoration: none; }
.fbk-biz a:hover { text-decoration: underline; text-underline-offset: 3px; }
.fbk-sep { margin: 0 8px; opacity: .5; }
@media (max-width: 720px) {
    .fbk-card { flex-direction: column; align-items: stretch; gap: 18px; padding: 20px 18px; }
    .fbk-biz { font-size: 12px; }
    .fbk-sep { margin: 0 5px; }
}

/* 动效降级：系统开了「减少动态效果」就停掉跑马灯，滚动退回手动横滑 */
@media (prefers-reduced-motion: reduce) {
    .mq-on .mq-track { animation: none; }
    .mq-on .mq-viewport { overflow-x: auto; }
}


/* ---- 签到出路（2026-10-15）：头部胶囊内联徽标 + 撞墙弹窗免费出路 ---- */
/* 徽标刻意做成「个人中心」胶囊内部的 inline 小徽章：独立 pill 会撑破头部窄屏排版
   （与 .acct-balance 同一取舍）。未登录时不渲染，匿名首屏与 SEO 零影响。 */
.ck-chip {
    display: inline-block; margin-right: 6px; padding: 2px 7px; border-radius: 999px;
    font-size: 11.5px; font-weight: 700; line-height: 1.5; vertical-align: middle; cursor: pointer;
    color: #dc2626; background: rgba(254, 44, 85, .08); border: 1px solid rgba(254, 44, 85, .35);
    animation: ckPulse 2.2s ease-in-out infinite;
}
.ck-chip:hover { background: rgba(254, 44, 85, .3); }
.ck-chip.done {
    cursor: default; font-weight: 500; color: #15803d;
    background: rgba(34, 197, 94, .1); border-color: rgba(34, 197, 94, .35); animation: none;
}
@keyframes ckPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(254, 44, 85, .42); }
    55% { box-shadow: 0 0 0 4px rgba(254, 44, 85, 0); }
}
@media (prefers-reduced-motion: reduce) { .ck-chip { animation: none; } }
/* 窄屏退化成图标：与 .acct-balance 同一断点取舍，头部不因此换行 */
@media (max-width: 560px) {
    .ck-chip { margin-right: 5px; padding: 2px 6px; }
    .ck-chip .ck-txt { display: none; }
}
/* 更窄的屏（≤460）连图标位都挤：实测会多出头部一行（157→181px），故直接不挂。
   手机端签到出路仍走撞墙弹窗里那条（付费墙本来就是它的落点）。 */
@media (max-width: 460px) { .ck-chip { display: none; } }

/* 撞墙弹窗里的免费出路（默认 hidden，仅已登录且今日未签时由 app.js 显示） */
.um-free {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    margin: 0 0 10px; padding: 11px 12px; border-radius: 11px; text-align: left;
    border: 1px solid rgba(79, 70, 229, .3); background: rgba(79, 70, 229, .05);
}
/* .um-free 自身声明了 flex，会盖掉 [hidden] 的 UA display:none —— 必须显式兜回 */
.um-free[hidden] { display: none !important; }
.um-free-txt { min-width: 0; }
.um-free-t { display: block; font-size: 13px; font-weight: 700; color: var(--text); }
.um-free-t b { color: var(--primary-2); }
.um-free-s { display: block; margin-top: 2px; font-size: 11.5px; font-weight: 400; color: var(--text-dim); }
.um-free-btn {
    flex: 0 0 auto; border: 0; border-radius: 9px; padding: 8px 13px; white-space: nowrap;
    font-size: 12.5px; font-weight: 700; background: var(--primary); color: #fff; cursor: pointer;
}
.um-free-btn:hover { text-decoration: none; filter: brightness(1.08); }
.um-free-btn:disabled { opacity: .6; cursor: progress; }
.um-free.ok { border-color: rgba(34, 197, 94, .42); background: rgba(34, 197, 94, .1); }
.um-free.ok .um-free-t { color: #15803d; }
.um-free.ok .um-free-btn { background: rgba(34, 197, 94, .15); color: #15803d; }

/* ============ 统一动效层（2026-10-30）============
   只动 transform/opacity，不改布局；时长/曲线集中在变量里，改一处全站一致。
   接在解析结果卡、充值弹窗、历史抽屉三处；新页面要加动效时复用这些类即可。 */
:root {
    --mo-fast: 140ms;
    --mo-base: 200ms;
    --mo-slow: 260ms;
    --mo-ease: cubic-bezier(.2, .8, .2, 1);
    --mo-spring: cubic-bezier(.34, 1.36, .64, 1);
}
@keyframes mo-rise { from { opacity: 0; transform: translate3d(0, 10px, 0); } to { opacity: 1; transform: none; } }
@keyframes mo-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes mo-pop { from { opacity: 0; transform: scale(.965); } to { opacity: 1; transform: none; } }

/* 结果卡内容错峰浮现：卡片本身不动，避免整块位移 */
.mo-stagger > * { animation: mo-rise var(--mo-base) var(--mo-ease) both; }
.mo-stagger > *:nth-child(1) { animation-delay: 0ms; }
.mo-stagger > *:nth-child(2) { animation-delay: 45ms; }
.mo-stagger > *:nth-child(3) { animation-delay: 90ms; }
.mo-stagger > *:nth-child(4) { animation-delay: 135ms; }
.mo-stagger > *:nth-child(5) { animation-delay: 180ms; }
.mo-stagger > *:nth-child(6) { animation-delay: 225ms; }
.mo-stagger > *:nth-child(n+7) { animation-delay: 270ms; }

/* 弹窗：遮罩淡入 + 卡片轻微上浮放大 */
.um-modal.mo-open .um-mask { animation: mo-fade var(--mo-fast) ease-out both; }
.um-modal.mo-open .um-card { animation: mo-pop var(--mo-slow) var(--mo-spring) both; }

/* 历史抽屉：打开滑入（沿用原曲线，统一为变量），关闭反向滑出后再隐藏 */
.hist-drawer-panel { animation: hist-drawer-in var(--mo-base) var(--mo-ease) both; }
.hist-drawer.mo-open .hist-drawer-mask { animation: mo-fade var(--mo-fast) ease-out both; }
.hist-drawer.mo-closing .hist-drawer-panel { animation: hist-drawer-out var(--mo-fast) ease-in both; }
@keyframes hist-drawer-out { to { transform: translate3d(100%, 0, 0); } }

/* 按钮按下反馈：只作用于有 .btn 的按钮，不影响链接样式 */
.btn:not(:disabled):active { transform: scale(.975); transition: transform var(--mo-fast) var(--mo-ease); }

@media (prefers-reduced-motion: reduce) {
    .mo-stagger > *, .um-modal.mo-open .um-mask, .um-modal.mo-open .um-card,
    .hist-drawer-panel, .hist-drawer.mo-open .hist-drawer-mask,
    .hist-drawer.mo-closing .hist-drawer-panel { animation: none !important; }
    .btn:not(:disabled):active { transform: none; }
}

/* ---- 动效层第二轮：首屏入场 / 滚动浮现 / 余额跳动 / 气泡按压 ---- */
.mo-hero > * { animation: mo-rise 240ms var(--mo-ease) both; }
.mo-hero > *:nth-child(1) { animation-delay: 0ms; }
.mo-hero > *:nth-child(2) { animation-delay: 55ms; }
.mo-hero > *:nth-child(3) { animation-delay: 110ms; }
.mo-hero > *:nth-child(4) { animation-delay: 165ms; }
.mo-hero > *:nth-child(5) { animation-delay: 220ms; }
.mo-hero > *:nth-child(6) { animation-delay: 275ms; }
.mo-hero > *:nth-child(7) { animation-delay: 330ms; }
.mo-hero > *:nth-child(8) { animation-delay: 385ms; }
.mo-hero > *:nth-child(n+9) { animation-delay: 420ms; }

.mo-reveal {
    opacity: 0; transform: translate3d(0, 16px, 0);
    transition: opacity var(--mo-slow) var(--mo-ease), transform var(--mo-slow) var(--mo-ease);
}
.mo-reveal.mo-in { opacity: 1; transform: none; }

@keyframes mo-tick { 0% { transform: scale(1); } 40% { transform: scale(1.18); } 100% { transform: scale(1); } }
.acct-balance.mo-tick { animation: mo-tick 320ms var(--mo-spring); }

.sfab-bubble { transition: transform var(--mo-fast) var(--mo-ease), box-shadow var(--mo-fast) var(--mo-ease); }
.sfab-bubble:active { transform: scale(.94); }

@media (prefers-reduced-motion: reduce) {
    .mo-hero > *, .acct-balance.mo-tick { animation: none !important; }
    .mo-reveal { opacity: 1; transform: none; transition: none; }
    .sfab-bubble { transition: none; }
    .sfab-bubble:active { transform: none; }
}

/* ==========================================================
   手机端（≤720px）头部与悬浮入口重排 —— 2026-11-04
   旧版：头部把 5 个文字链接 + 更多平台 + EN + 登录塞进一行，
   390px 下 flex 挤压导致「抖解」被压成竖排、链接折成两行；
   右侧四个胶囊气泡（最近解析/开放API/小程序版/反馈）宽 100px+，
   直接盖住输入框与「开始解析」。这里按手机习惯重排，桌面不受影响。
   ========================================================== */
@media (max-width: 720px) {
    /* --- 头部：第一行 品牌 + 账号，第二行 导航 --- */
    .site-header .wrap {
        flex-wrap: wrap; gap: 6px 10px;
        padding-top: 10px; padding-bottom: 10px;
    }
    .brand { order: 1; flex: 0 0 auto; white-space: nowrap; font-size: 17px; }
    .brand .name { white-space: nowrap; }
    .brand .logo { font-size: 21px; }
    .nav-acct { order: 2; margin-left: auto; padding: 5px 12px; font-size: 13px; }

    .nav {
        order: 3; flex: 1 0 100%;
        display: flex; align-items: center; flex-wrap: wrap;
        gap: 2px; row-gap: 2px; margin: 0 -4px;
    }
    .nav a, .nav .nav-more-btn {
        margin-left: 0; padding: 6px 8px; font-size: 12.5px; white-space: nowrap;
        border-radius: 8px;
    }
    .nav a { flex: 0 0 auto; }
    /* 同页锚点（帮助/关于）在手机上进页脚，避免第二行挤成两排 */
    .nav a[href="#faq"], .nav a[href="#about"] { display: none; }
    .nav-more { margin-left: 0; flex: 0 0 auto; }
    .nav-more::after { display: none; }
    .lang-btn { margin-left: auto; padding: 5px 11px; font-size: 12px; flex: 0 0 auto; }

    /* --- 悬浮入口：常驻显示，改成底部一排 38px 圆钮 ---
       竖排 4 个（各 44px + 间距）会从底部一直顶到屏幕中部、压住正文与提示文字；
       横排只占底部一条 44px 高，四个入口一进页面就都在。 */
    .fb-fab, .sfab-bubble {
        width: 38px; height: 38px; padding: 0; border-radius: 50%;
        justify-content: center; font-size: 16px; gap: 0;
        bottom: var(--fab-b, 12px);
        /* 贴边会压到行尾文字，加一圈与页面底色同色的光环，视觉上像浮在上层而不是打架 */
        box-shadow: 0 0 0 3px rgba(255, 255, 255, .9), 0 6px 18px rgba(15, 18, 34, .18);
        transition: transform .15s ease, box-shadow .15s ease;
    }
    /* 竖直贴右边一列（贴边只占 38px，压住的是行尾留白；横排会整条盖住底部提示按钮） */
    .fb-fab { right: 8px; }
    .sfab-bubble-api { right: 8px; bottom: calc(var(--fab-b, 12px) + 44px); }
    .sfab-bubble-mini { right: 8px; bottom: calc(var(--fab-b, 12px) + 88px); }
    .sfab-bubble-hist { right: 8px; bottom: calc(var(--fab-b, 12px) + 132px); }
    .fb-fab .sfab-txt, .sfab-bubble .sfab-txt,
    .fb-fab span:not(.fb-fab-badge):not(.sfab-ic) { display: none; }
    .sfab-bubble .sfab-ic { font-size: 17px; }
    .sfab-badge { top: -3px; right: -3px; }
    /* 底部小程序条常驻时整排上移，避免压住条 */
    body.has-miniapp-bar .sfab-bubble,
    body.has-miniapp-bar .fb-fab { --fab-b: 74px; }
    /* 反馈按钮另有一条更早的 body.has-miniapp-bar .fb-fab{bottom:64px}，同特异度下要再写一次压掉 */
    body.has-miniapp-bar .fb-fab { bottom: 74px; }
    /* 弹层跟着上移到圆钮上方 */
    .sfab-panel { right: 12px; bottom: calc(var(--fab-b, 12px) + 48px); width: calc(100vw - 24px); max-width: 320px; }
    .sfab-panel-api, .sfab-panel-mini { bottom: calc(var(--fab-b, 12px) + 48px); }

    @media (max-width: 380px) {
        /* 320~360px 级：导航再收一格，保证「EN」不被挤到第二行单独成排 */
        .nav a[href="#feature"] { display: none; }
        .nav a, .nav .nav-more-btn { padding: 6px 7px; font-size: 12px; }
        .nav .lang-btn { padding: 4px 9px; font-size: 11px; }
    }

    /* --- 首屏收紧：标题降一档，避免首屏只剩标题 --- */
    .hero { padding: 26px 0 16px; }
    .hero h1 { font-size: 25px; line-height: 1.35; }
    .hero .subtitle { font-size: 13.5px; line-height: 1.75; }
    .hero-tags { font-size: 12px; line-height: 1.7; }

    /* 底部小程序条常驻时给页面留出高度，页脚末尾不被压在条下 */
    body.has-miniapp-bar { padding-bottom: calc(62px + env(safe-area-inset-bottom)); }
}

/* ==============================================================
   Plan-A 首页改版层（2026-11-05）
   依据：design-prototype/01-首页-桌面-默认态.svg + 02-首页-桌面-解析结果.svg
   原则：内容宽 1180、白卡 + 墨蓝 ink + 钴蓝主色 + 荧光黄点缀；
   首页新区块用新类名，旧类名规则保留给平台落地页（pages/platform.html）
   ============================================================== */

/* ---------- 通用 ---------- */
.hero .wrap, .result .wrap, .plats .wrap, .caps .wrap, .faq .wrap,
.miniapp .wrap, .guides .wrap, .hotwords .wrap, .site-footer .wrap {
    max-width: 1180px;
}
.sec-title {
    font-size: 28px; font-weight: 800; letter-spacing: -.5px;
    color: var(--ink); margin: 0;
}

/* ---------- 头部 ---------- */
.site-header { background: rgba(255, 255, 255, .94); }
.brand .logo-mark { display: inline-flex; line-height: 0; }
.brand em {
    background: none; -webkit-background-clip: border-box; background-clip: border-box;
    color: var(--mute); font-style: normal; font-size: 14px; margin-left: 4px;
}
.nav a { color: var(--sub); font-weight: 500; font-size: 14.5px; margin-left: 24px; }
.nav a:hover { color: var(--primary); }
.lang-btn { border: 0; background: none; color: var(--sub); padding: 6px 8px; }
.lang-btn:hover { color: var(--primary); background: var(--tint); }
.hd-right { display: flex; align-items: center; gap: 14px; }
.quota-pill {
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--tint); color: var(--primary);
    border-radius: 999px; padding: 7px 14px; font-size: 13px; font-weight: 600;
    white-space: nowrap;
}
.quota-pill i { width: 7px; height: 7px; border-radius: 50%; background: var(--primary); }
.nav-acct {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--ink); color: #fff !important;
    border-radius: 8px; padding: 8px 16px; font-size: 14px; font-weight: 700;
    text-decoration: none;
}
.nav-acct:hover { background: #22345c; text-decoration: none; color: #fff; }
.nav-acct .acct-balance {
    background: rgba(255, 255, 255, .18); color: #fff;
    border-radius: 999px; padding: 1px 8px; font-size: 12px; font-weight: 600;
}
.nav-acct .ck-chip {
    background: rgba(255, 255, 255, .18); color: #fff;
    border-radius: 999px; padding: 1px 8px; font-size: 12px; font-weight: 600;
    cursor: pointer;
}
.nav-acct .ck-chip.done { background: rgba(18, 161, 80, .35); }

/* ---------- Hero：大标题 + 右侧三步卡 ---------- */
.hero { padding: 56px 0 24px; text-align: left; }
.hero-grid {
    display: grid; grid-template-columns: minmax(0, 1fr) 352px;
    gap: 20px 56px; align-items: start; text-align: left;
}
.hero .hero-grid h1 {
    font-size: 52px; line-height: 1.18; letter-spacing: -1px;
    font-weight: 800; color: var(--ink);
    margin: 6px 0 20px;
}
.hero-sub {
    font-size: 17px; color: var(--sub); line-height: 1.85;
    max-width: 660px; margin: 0;
}
.steps-card {
    background: #fff; border: 1px solid var(--border); border-radius: 16px;
    padding: 24px 22px 20px; box-shadow: var(--shadow); margin-top: 8px;
}
.steps-card h2 { font-size: 16px; font-weight: 700; color: var(--ink); margin: 0 0 16px; }
.steps-card ol { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; }
.steps-card li { display: flex; align-items: center; gap: 12px; font-size: 15px; color: var(--ink); }
.steps-card li i {
    flex: none; width: 24px; height: 24px; border-radius: 50%;
    background: var(--ink); color: #fff; font-style: normal;
    font-weight: 700; font-size: 13px; display: grid; place-items: center;
}
.steps-note {
    margin: 16px 0 0; padding-top: 14px; border-top: 1px solid var(--line);
    font-size: 12.5px; color: var(--mute);
}

/* ---------- 粘贴框：全页唯一强调元素 ---------- */
.parse-shell {
    position: relative; margin-top: 18px;
    background: #fff; border: 2px solid var(--primary); border-radius: 20px;
    padding: 20px 22px 14px;
    box-shadow: 0 0 0 8px rgba(31, 79, 255, .08);
}
.parse-field { position: relative; }
.parse-field textarea {
    position: relative; z-index: 2; display: block; width: 100%;
    border: 0; outline: none; resize: vertical; background: transparent;
    font: inherit; font-size: 16px; line-height: 1.8; color: var(--ink);
    min-height: 112px;
}
.parse-demo {
    position: absolute; inset: 0 12px auto 0; z-index: 1;
    pointer-events: none; font-size: 16px; line-height: 1.8;
    color: var(--ink); transition: opacity .18s ease;
}
.parse-demo p { margin: 0; }
.parse-demo mark {
    background: var(--yellow); color: var(--ink);
    padding: 2px 6px; border-radius: 4px;
    font-family: var(--mono); font-weight: 600;
}
.demo-caret {
    display: inline-block; width: 2px; height: 20px; background: var(--primary);
    vertical-align: -4px; margin-left: 3px;
    animation: dpCaret 1.1s steps(1) infinite;
}
@keyframes dpCaret { 50% { opacity: 0; } }
.parse-field.has-text .parse-demo { opacity: 0; }
.parse-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 14px; margin-top: 8px; flex-wrap: wrap;
}
.parse-recog { min-width: 0; }
.recog-hint { font-size: 13px; color: var(--mute); }
.recog-pill {
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--ok-bg); color: var(--ok-deep);
    border-radius: 999px; padding: 7px 14px; font-size: 13.5px; font-weight: 600;
}
.recog-pill i { width: 8px; height: 8px; border-radius: 50%; background: var(--ok); }
.parse-actions { display: flex; gap: 12px; margin-left: auto; }
.parse-actions .btn.ghost {
    background: #fff; border: 1px solid var(--ctl); color: var(--ink);
    border-radius: 12px; padding: 12px 20px; font-size: 14.5px;
}
.parse-actions .btn.primary {
    border-radius: 12px; padding: 12px 36px; font-size: 16px; font-weight: 700;
    background: var(--primary); color: #fff; border: 0;
}

/* ---------- 信任条 ---------- */
.trust-bar {
    list-style: none; display: flex; flex-wrap: wrap;
    gap: 12px 36px; margin: 22px 0 0; padding: 0;
}
.trust-bar li {
    position: relative; padding-left: 27px;
    font-size: 14.5px; color: var(--sub);
}
.trust-bar li::before {
    content: "✓"; position: absolute; left: 0; top: 1px;
    width: 18px; height: 18px; border-radius: 50%;
    background: var(--ok-bg); color: var(--ok-deep);
    font-size: 11px; font-weight: 800; display: grid; place-items: center;
}

/* ---------- 平台表 ---------- */
.plats { padding: 60px 0 8px; }
.sec-head {
    display: flex; align-items: baseline; justify-content: space-between;
    gap: 16px; margin-bottom: 20px; flex-wrap: wrap;
}
.sec-lead { color: var(--mute); font-size: 14px; margin: 0; }
.plat-table {
    background: #fff; border: 1px solid var(--border); border-radius: 16px;
    padding: 28px; box-shadow: var(--shadow);
}
.pt-group { margin: 0 0 14px; font-size: 13.5px; color: var(--mute); font-weight: 600; }
.pt-grid {
    list-style: none; margin: 0; padding: 0;
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px 20px;
}
.pt-grid a {
    display: flex; align-items: center; gap: 9px;
    padding: 8px 10px; border-radius: 10px;
    color: var(--ink); text-decoration: none;
    transition: background .15s ease;
}
.pt-grid a:hover { background: var(--tint); text-decoration: none; }
.pt-dot { flex: none; width: 10px; height: 10px; border-radius: 3px; background: var(--c, #14213D); }
.pt-grid b { font-size: 15px; font-weight: 700; white-space: nowrap; }
.pt-grid code {
    font-family: var(--mono); font-size: 11.5px; color: var(--mute);
    margin-left: auto; text-align: right; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis;
}
.pt-hr { border: 0; border-top: 1px solid var(--line); margin: 22px 0; }

/* ---------- 能力卡 ---------- */
.caps { padding: 60px 0 8px; }
.caps .sec-title { display: block; margin-bottom: 24px; }
.caps-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; }
.cap-card {
    background: #fff; border: 1px solid var(--border); border-radius: 16px;
    padding: 16px 16px 20px; box-shadow: var(--shadow);
}
.cap-art {
    height: 132px; border-radius: 10px; margin-bottom: 16px;
    position: relative; overflow: hidden;
    display: grid; place-items: center;
}
.cap-art-video { background: var(--ink); }
.cap-badge {
    position: absolute; top: 10px; left: 10px;
    background: var(--yellow); color: var(--ink);
    font-family: var(--mono); font-weight: 800; font-size: 12px;
    padding: 3px 8px; border-radius: 5px;
}
.cap-art-gallery {
    background: var(--tint); padding: 14px;
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px;
}
.cap-art-gallery i { border-radius: 6px; background: var(--c, #eee); }
.cap-art-music { background: #FFF6CC; }
.cap-art-cover {
    background: #F0F2F7; display: flex; align-items: center;
    justify-content: center; gap: 14px; padding: 16px;
}
.cap-phone { display: block; width: 54px; height: 96px; border-radius: 6px; background: var(--ink); flex: none; }
.cap-lines { display: grid; gap: 9px; width: 88px; }
.cap-lines i { height: 9px; border-radius: 5px; background: var(--ctl); }
.cap-lines i:nth-child(2) { width: 78%; }
.cap-lines i:nth-child(3) { width: 58%; }
.cap-btn {
    position: absolute; right: 14px; bottom: 14px;
    background: var(--primary); color: #fff;
    font-size: 12px; font-weight: 600; padding: 5px 14px; border-radius: 6px;
}
.cap-card h3 { margin: 0 0 8px; font-size: 19px; font-weight: 800; color: var(--ink); }
.cap-card p { margin: 0 0 4px; font-size: 13.5px; color: var(--sub); line-height: 1.7; }

/* ---------- FAQ 双栏 ---------- */
.faq { padding: 60px 0 8px; }
.faq-cols {
    display: grid; grid-template-columns: 1fr 1fr; gap: 0 56px;
    margin-top: 12px;
}
.faq-col details { border-bottom: 1px solid var(--line2); }
.faq-col summary {
    list-style: none; cursor: pointer;
    display: flex; justify-content: space-between; align-items: center; gap: 14px;
    padding: 18px 0; font-size: 16.5px; font-weight: 700; color: var(--ink);
}
.faq-col summary::-webkit-details-marker { display: none; }
.faq-col summary::after {
    content: "+"; flex: none; font-size: 22px; font-weight: 400;
    color: var(--sub); line-height: 1;
}
.faq-col details[open] summary::after { content: "−"; }
.faq-col p { color: var(--sub); font-size: 14.5px; line-height: 1.85; margin: 0 0 18px; }

/* ---------- 小程序横幅 ---------- */
.miniapp { padding: 60px 0 8px; }
.miniapp-card {
    background: var(--tint); border-radius: 20px; padding: 40px 44px;
    display: flex; gap: 36px; align-items: center;
}
.miniapp-info { flex: 1; min-width: 0; }
.miniapp-info h2 {
    font-size: 24px; font-weight: 800; letter-spacing: -.5px;
    color: var(--ink); margin: 0 0 12px;
}
.miniapp-info p {
    color: var(--sub); font-size: 15px; line-height: 1.85;
    margin: 0 0 20px; max-width: 660px;
}
.miniapp-acts { display: flex; gap: 12px; flex-wrap: wrap; }
.miniapp-acts .miniapp-open {
    background: var(--ink); color: #fff; border: 0; border-radius: 10px;
    padding: 12px 22px; font-size: 14.5px; font-weight: 700; cursor: pointer;
}
.miniapp-acts .miniapp-open:hover { background: #22345c; }
.miniapp-acts .btn.ghost {
    background: #fff; border: 1px solid var(--ctl); color: var(--ink);
    border-radius: 10px; padding: 12px 20px; font-size: 14.5px;
}
.miniapp-note { font-size: 13px; color: var(--mute); margin: 14px 0 0; }
.miniapp-qr {
    flex: none; background: #fff; border-radius: 12px; padding: 12px 12px 8px;
    text-align: center;
}
.miniapp-qr img { width: 132px; height: 132px; border-radius: 8px; display: block; }
.miniapp-qr .qr-cap { margin-top: 8px; font-size: 12px; color: var(--mute); }

/* ---------- 延伸阅读 / 热词（轻调，融入方案A） ---------- */
.guides { padding: 60px 0 8px; }
.guides .guide-card {
    background: #fff; border: 1px solid var(--border); border-radius: 16px;
    padding: 24px; box-shadow: var(--shadow);
}
.hotwords { padding: 44px 0 56px; }
.hotwords h2 { color: var(--ink); }

/* ---------- 结果卡（方案A：左封面 / 右元信息） ---------- */
.result { padding: 26px 0 10px; scroll-margin-top: 92px; }
.result-card {
    display: grid; grid-template-columns: 396px minmax(0, 1fr);
    gap: 32px; align-items: start;
    background: #fff; border: 1px solid var(--border); border-radius: 20px;
    padding: 32px; box-shadow: var(--shadow);
}
.video-block {
    position: relative; background: var(--ink); border-radius: 14px;
    overflow: hidden; display: flex; flex-direction: column; justify-content: center;
}
.video-block .cover-preview { width: 100%; height: auto; display: block; border-radius: 0; }
.video-block .cover-tip {
    position: absolute; left: 0; right: 0; bottom: 0; border-radius: 0;
    background: rgba(0, 0, 0, .55); color: #fff; text-align: center;
    font-size: 12.5px; padding: 10px 12px;
}
.cover-badge {
    position: absolute; top: 14px; left: 14px; z-index: 2;
    background: var(--ok-bg); color: var(--ok-deep);
    font-size: 13px; font-weight: 700; padding: 6px 12px; border-radius: 999px;
}
.meta .author .nick { font-size: 16.5px; }
.meta .author .uid { font-size: 12.5px; color: var(--mute); }
.meta .desc {
    font-size: 21px; font-weight: 800; color: var(--ink);
    line-height: 1.5; margin: 8px 0 10px;
}
.meta .stats span { font-size: 13.5px; }
.meta .stats b { font-size: 16px; font-weight: 800; color: var(--ink); }
.meta .quality-bar { margin: 2px 0 18px; }
.meta .btns { display: flex; flex-wrap: wrap; gap: 10px; }
.meta .btns .dl-main {
    flex: 1 1 100%; justify-content: center; text-align: center;
    padding: 16px 20px; border-radius: 14px; font-size: 16.5px; font-weight: 800;
    background: var(--primary); color: #fff; border: 0;
}
.meta .btns .dl-main:hover { filter: brightness(1.06); }
.meta .btns .btns-row {
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; width: 100%;
}
.meta .btns .btn:not(.dl-main) {
    background: #fff; border: 1px solid var(--ctl); color: var(--ink);
    border-radius: 12px; justify-content: center; text-align: center;
}
.meta .result-note {
    font-size: 13.5px; color: var(--sub); line-height: 1.75;
    margin: 16px 0 0;
}
.meta .result-copyr {
    font-size: 12px; color: var(--mute); line-height: 1.7;
    margin: 14px 0 0; padding-top: 14px; border-top: 1px solid var(--line);
}
/* 清晰度芯片 → 方案A「清晰度卡片」（档位 + 体积/计次 + 选中态） */
.chip {
    display: inline-flex; flex-direction: column; align-items: flex-start;
    gap: 3px; position: relative; min-width: 116px;
    padding: 11px 14px; border: 1.5px solid var(--line2); border-radius: 12px;
    background: #fff; cursor: pointer;
    font-size: 15px; font-weight: 800; color: var(--ink);
    transition: border-color .15s ease, background .15s ease;
}
.chip:hover { border-color: var(--ctl); color: var(--ink); }
.chip .chip-size { font-size: 12px; font-weight: 500; color: var(--sub); opacity: 1; }
.chip.active { border-color: var(--primary); background: var(--tint); color: var(--ink); }
.chip.active .chip-size { color: var(--sub); }
.chip.active::after {
    content: "✓"; position: absolute; top: 8px; right: 9px;
    width: 18px; height: 18px; border-radius: 50%;
    background: var(--primary); color: #fff;
    font-size: 11px; font-weight: 700; display: grid; place-items: center;
}
.chip.recommended::before {
    content: "推荐"; position: absolute; top: -9px; left: 10px;
    background: var(--yellow); color: var(--ink);
    font-size: 10.5px; font-weight: 700; padding: 1px 8px; border-radius: 999px;
}

/* ---------- 状态行 ---------- */
.status { font-size: 14.5px; color: var(--sub); }
.status.ok { color: var(--ok-deep); }

/* ---------- 响应式 ---------- */
@media (max-width: 1080px) {
    .hero-grid { grid-template-columns: 1fr; }
    .steps-card { max-width: 480px; margin-top: 0; }
    .hero .hero-grid h1 { font-size: 40px; }
    .caps-grid { grid-template-columns: repeat(2, 1fr); }
    .pt-grid { grid-template-columns: repeat(3, 1fr); }
    .faq-cols { grid-template-columns: 1fr; gap: 0; }
    .result-card { grid-template-columns: 1fr; }
    .video-block { max-width: 420px; }
    .miniapp-card { flex-direction: column; text-align: left; padding: 28px 24px; }
    .miniapp-qr { align-self: center; }
}
@media (max-width: 720px) {
    /* 覆盖旧版头部重排：.nav-acct 已包进 .hd-right，order 需要重新分配 */
    .site-header .wrap { flex-wrap: wrap; gap: 8px 10px; }
    .brand { order: 1; }
    .hd-right { order: 2; margin-left: auto; }
    .nav {
        order: 3; width: 100%; flex: 1 0 100%;
        display: flex; flex-wrap: nowrap; overflow-x: auto;
        -webkit-overflow-scrolling: touch; padding-bottom: 2px;
        margin: 0 -4px; gap: 2px;
    }
    .nav::-webkit-scrollbar { display: none; }
    .nav a { margin-left: 0; margin-right: 18px; white-space: nowrap; flex: 0 0 auto; }
    .nav a[href="#faq"] { display: inline-block; } /* 恢复被旧规则隐藏的「使用帮助」 */
    .nav .lang-btn { margin-left: auto; flex: none; }
    .quota-pill { display: none; }
    .hero { padding: 30px 0 16px; }
    .hero .hero-grid h1 { font-size: 31px; letter-spacing: -.5px; margin-bottom: 12px; }
    .hero-sub { font-size: 14.5px; }
    .steps-card { padding: 18px 16px 16px; }
    .parse-shell { padding: 14px 14px 12px; border-radius: 16px; box-shadow: 0 0 0 5px rgba(31, 79, 255, .07); }
    .parse-field textarea { font-size: 15px; min-height: 96px; }
    .parse-demo { font-size: 13.5px; }
    .parse-demo mark { padding: 1px 4px; }
    .parse-foot { flex-direction: column; align-items: stretch; }
    .parse-actions { margin-left: 0; }
    .parse-actions .btn { flex: 1; }
    .parse-actions .btn.primary { padding: 13px 20px; }
    .trust-bar { gap: 10px 20px; }
    .trust-bar li { font-size: 13px; padding-left: 24px; }
    .sec-title { font-size: 22px; }
    .plat-table { padding: 18px 16px; }
    .pt-grid { grid-template-columns: repeat(2, 1fr); gap: 6px 10px; }
    .pt-grid code { display: none; }
    .caps-grid { grid-template-columns: 1fr; }
    .meta .desc { font-size: 17.5px; }
    .meta .btns .btns-row { grid-template-columns: 1fr; }
    .result-card { padding: 18px; gap: 20px; }
    .miniapp-card { padding: 22px 18px; }
}

/* ==============================================================
   Plan-A v3 精修层（2026-11-05 第二轮）
   严格对齐原型：2580px / 9 区块 / 纯细边框零阴影 / 大留白 /
   移动端三步卡在粘贴框下方、开始解析在最上、下载按钮置底
   ============================================================== */

/* ---------- Hero grid：重排顺序（桌面标题左+三步卡右，窄屏三步卡下移） ---------- */
.hero { padding: 48px 0 0; }
.hero-layout {
    display: grid; grid-template-columns: minmax(0, 1fr) 352px;
    column-gap: 56px; align-items: start; text-align: left;
}
.hero-main { grid-area: 1 / 1; }
.steps-card { grid-area: 1 / 2; margin-top: 8px; }
.parse-shell { grid-area: 2 / 1 / 3 / 3; margin-top: 18px; }
#status { grid-area: 3 / 1 / 4 / 3; }
.ext-hint { grid-area: 4 / 1 / 5 / 3; }
.trust-bar { grid-area: 5 / 1 / 6 / 3; margin-top: 22px; }
#pwa-install { grid-area: 6 / 1 / 7 / 3; }
.legacy-hidden { display: none !important; } /* 批量提示/收藏提示：保留 DOM，不占视觉流 */
.hero .hero-layout h1 { font-size: 58px; }
.hero-sub { font-size: 18px; }
.parse-field textarea, .parse-demo { font-size: 18px; }
.parse-field textarea { min-height: 140px; }

/* ---------- 纯细边框、零阴影（原型白卡没有阴影） ---------- */
.steps-card, .plat-table, .cap-card, .miniapp-card,
.result-card, .guide-card, .notice-bar { box-shadow: none; }

/* ---------- 区块间距（原型：信任条→平台表 142px，之后每节约 90px） ---------- */
.plats { padding: 130px 0 0; }
.caps { padding: 92px 0 0; }
.faq { padding: 96px 0 0; }
.miniapp { padding: 76px 0 0; }
.hotwords { padding: 32px 0 0; }
.site-footer { margin-top: 56px; }

/* ---------- FAQ：双栏 4+6（首条展开）+ 折叠 5 条 ---------- */
.faq-cols { margin-top: 10px; }
.faq-col summary { padding: 14px 0; font-size: 16px; }
.faq-col p { margin: 0 0 14px; font-size: 14px; line-height: 1.75; }
.faq-more { margin-top: 18px; border-top: 1px solid var(--line); padding-top: 12px; }
.faq-more > summary {
    list-style: none; cursor: pointer; font-size: 13.5px; color: var(--mute);
}
.faq-more > summary::-webkit-details-marker { display: none; }
.faq-more-body {
    display: grid; grid-template-columns: 1fr 1fr; gap: 0 56px; padding-top: 12px;
}
.faq-more-body details { border-bottom: 1px solid var(--line2); }
.faq-more-body summary {
    list-style: none; cursor: pointer; padding: 11px 0;
    font-size: 15px; font-weight: 600; color: var(--ink);
}
.faq-more-body summary::-webkit-details-marker { display: none; }
.faq-more-body p { margin: 0 0 12px; font-size: 13.5px; color: var(--sub); line-height: 1.75; }

/* ---------- 小程序横幅：原型 190px ---------- */
.miniapp-card { padding: 32px 36px; }
.miniapp-info h2 { font-size: 26px; }
.miniapp-info p { font-size: 15px; margin: 0 0 16px; }
.miniapp-qr img { width: 112px; height: 112px; }

/* ---------- 热词云：收成一行折叠（70+ 内链仍在 DOM） ---------- */
.hotwords h2, .hotwords-lead { display: none; }
.hw-collapse { border-top: 1px solid var(--line); padding: 14px 0; }
.hotwords .hw-collapse > summary {
    list-style: none; cursor: pointer; font-size: 13px; color: var(--mute);
}
.hotwords .hw-collapse > summary::-webkit-details-marker { display: none; }
.hotword-cloud { margin-top: 14px; }

/* ---------- 页脚：原型 4 栏简洁 + 折叠全站索引 ---------- */
.site-footer { padding: 36px 0 24px; border-top: 1px solid var(--border); background: transparent; }
.footer-cols { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 36px; }
.footer-group h4 { font-size: 15px; font-weight: 700; color: var(--ink); margin: 0 0 12px; }
.footer-group ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
.footer-group a { color: var(--sub); font-size: 14px; }
.footer-brand p { color: var(--mute); font-size: 13.5px; margin: 0 0 5px; }
.footer-all { margin-top: 26px; border-top: 1px solid var(--line); padding-top: 12px; }
.footer-all > summary { list-style: none; cursor: pointer; font-size: 12.5px; color: var(--mute); }
.footer-all > summary::-webkit-details-marker { display: none; }
.footer-all-cols { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; padding: 16px 0; }
.footer-all-cols ul {
    list-style: none; margin: 0; padding: 0;
    display: grid; grid-template-columns: repeat(2, 1fr); gap: 5px 12px;
}
.footer-all-cols a { font-size: 12.5px; color: var(--mute); }
.footer-copy { margin: 16px 0 0; font-size: 12.5px; color: var(--mute); }

/* ---------- 公告条：去掉老站的营销感 ---------- */
/* 悬浮球按用户要求保留，样式见文件末尾「方案A悬浮球层」 */
.notice-bar {
    background: transparent !important; border: 0 !important;
    padding: 8px 20px !important; font-size: 12.5px !important;
    color: var(--mute) !important; text-align: center;
}

/* ---------- 结果卡：贴原型（黄 1080P 角标 / 状态徽章 / 四列统计） ---------- */
.cover-q {
    position: absolute; top: 14px; left: 14px; z-index: 2;
    background: var(--yellow); color: var(--ink);
    font-family: var(--mono); font-size: 13px; font-weight: 800;
    padding: 4px 9px; border-radius: 6px;
}
.wm-badge {
    margin-left: auto; white-space: nowrap;
    background: var(--ok-bg); color: var(--ok-deep);
    font-size: 12.5px; font-weight: 700; padding: 5px 11px; border-radius: 999px;
}
.cover-badge { display: none; }
.meta .author { position: relative; }
.meta .stats {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 0; margin: 2px 0 18px;
}
.meta .stats > span { display: flex; flex-direction: column; gap: 2px; font-size: 12.5px; }
.meta .stats b { font-size: 19px; font-weight: 800; color: var(--ink); margin: 0; }
.meta .stats small { font-size: 12px; color: var(--mute); }

/* ---------- 响应式：窄屏用 grid-area 重排，三步卡落到粘贴框下方 ---------- */
@media (max-width: 1080px) {
    .hero .hero-layout h1 { font-size: 40px; }
    .hero-layout { grid-template-columns: 1fr; }
    .hero-main { grid-area: 1 / 1; }
    .parse-shell { grid-area: 2 / 1; }
    #status { grid-area: 3 / 1; }
    .ext-hint { grid-area: 3 / 1; }
    .steps-card { grid-area: 4 / 1; margin-top: 26px; max-width: 480px; }
    .trust-bar { grid-area: 5 / 1; margin-top: 20px; }
    #pwa-install { grid-area: 6 / 1; }
    .plats { padding-top: 80px; }
    .caps, .faq { padding-top: 64px; }
    .miniapp { padding-top: 56px; }
}
@media (max-width: 720px) {
    .hero { padding: 26px 0 0; }
    .hero .hero-layout h1 { font-size: 31px; }
    .hero-sub { font-size: 14.5px; }
    .parse-shell { margin-top: 16px; padding: 14px 14px 12px; border-radius: 16px; }
    .parse-field textarea, .parse-demo { font-size: 15px; }
    .parse-field textarea { min-height: 112px; }
    .parse-foot { flex-direction: column; align-items: stretch; gap: 12px; }
    .parse-actions { flex-direction: column-reverse; gap: 10px; margin-left: 0; }
    .parse-actions .btn { width: 100%; justify-content: center; text-align: center; }
    .parse-actions .btn.primary { padding: 15px 20px; font-size: 16px; }
    .trust-bar { flex-direction: column; gap: 9px; }
    .steps-card { max-width: none; margin-top: 24px; }
    .plats { padding-top: 64px; }
    .caps { padding-top: 56px; }
    .faq, .miniapp { padding-top: 48px; }
    .plat-table { padding: 18px 16px; }
    .pt-grid { grid-template-columns: repeat(2, 1fr); }
    .caps-grid { grid-template-columns: 1fr; }
    .faq-cols, .faq-more-body { grid-template-columns: 1fr; gap: 0; }
    .miniapp-card { flex-direction: column; align-items: flex-start; padding: 22px 18px; }
    .miniapp-qr { align-self: center; }
    .footer-cols { grid-template-columns: 1fr 1fr; gap: 24px; }
    .footer-all-cols { grid-template-columns: 1fr; }
    .meta .stats b { font-size: 15px; }
    .meta .quality-bar { gap: 6px; }
    .chip { min-width: 0; padding: 10px 8px; font-size: 14px; }
    .chip .chip-size { font-size: 11px; }
    .meta .btns .btns-row { order: 1; grid-template-columns: repeat(3, 1fr); gap: 6px; }
    .meta .btns .dl-main { order: 2; }
    .meta .btns .btn:not(.dl-main) { font-size: 12px; padding: 9px 4px; }
}

/* ==============================================================
   Plan-A v3 修正层：清除旧规则残留，严格还原原型观感
   ============================================================== */
/* 旧 .hero h1 渐变文字规则让 span 变成透明填充 → 还原纯墨蓝 */
.hero .hero-layout h1,
.hero .hero-layout h1 span {
    background: none !important;
    -webkit-background-clip: border-box !important;
    background-clip: border-box !important;
    color: var(--ink) !important;
    -webkit-text-fill-color: var(--ink) !important;
}
/* 旧 .faq details 白卡圆角 → 原型是纯横线分隔 */
.faq-col details {
    background: transparent !important; border: 0 !important;
    border-bottom: 1px solid var(--line2) !important;
    border-radius: 0 !important; padding: 0 !important; box-shadow: none !important;
}
.faq-col summary { padding: 11px 0; }
.faq-col p { margin-bottom: 10px; }
.faq { padding-top: 72px; }
/* 图集插图的 6 个色块被 place-items:center 压成 0×0 */
.cap-art-gallery { place-items: stretch; }
/* 页脚友链组会换行多出一整行 → 桌面 5 列同行；窄屏仍走 2 列 */
@media (min-width: 721px) {
    .footer-cols { grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr; }
}
.footer-copy { padding: 0; }
/* 再收一轮间距，向原型 2580px 节奏靠拢 */
.caps { padding-top: 80px; }
.miniapp { padding-top: 64px; }
.miniapp-card { padding: 26px 32px; }
.miniapp-qr img { width: 100px; height: 100px; }
.site-footer { margin-top: 40px; }

/* ---------- 最后一轮收口 ---------- */
.faq .sec-title, .caps .sec-title, .plats .sec-title { text-align: left !important; }
/* 友链组（app.js 拉到数据后会移除 hidden）与其余 4 组同行，避免页脚多出一整行 */
@media (min-width: 721px) {
    .footer-cols { grid-template-columns: 1.4fr 1fr 1fr 1fr 1fr !important; }
}
/* 悬浮球按用户要求恢复（小程序 / 开放API / 最近解析 / 反馈），
   样式统一见文件末尾「方案A悬浮球层」；页脚文字入口作为兜底保留 */
/* 窄屏演示文案会折成 5 行，textarea 高度不足会与识别提示重叠 */
@media (max-width: 720px) {
    .parse-field textarea { min-height: 158px; }
    .parse-demo { line-height: 1.75; }
}

/* ==============================================================
   Plan-A 全局弹窗层 v4（2026-11-05）
   登录/注册门槛弹窗、付费墙、反馈、联系我们、二维码浮层
   共用一套令牌：白卡 + 1px 细边框 + 墨蓝标题 + 钴蓝主行动 + 零渐变
   ============================================================== */

/* ---------- 门槛登录 / 注册弹窗（app.js 动态注入 DOM） ---------- */
.gt-mask {
    position: fixed; inset: 0; z-index: 9000;
    background: rgba(20, 33, 61, .45); backdrop-filter: blur(4px);
    display: flex; align-items: center; justify-content: center; padding: 16px;
    /* 矮屏双保险：整层可滚 + 卡片 margin:auto，内容超高时顶部不会被 flex 居中裁掉 */
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
}
.gt-card {
    width: 100%; max-width: 420px; margin: auto; background: #fff;
    border: 1px solid var(--border); border-radius: 20px;
    box-shadow: 0 24px 64px rgba(20, 33, 61, .16);
    position: relative; display: flex; flex-direction: column;
    /* dvh 跟随手机地址栏/键盘收放，老浏览器回退 vh；卡片锁在视口内，内容区自己滚 */
    max-height: calc(100vh - 32px);
    max-height: calc(100dvh - 32px);
    overflow: hidden;
}
.gt-scroll {
    flex: 1 1 auto; min-height: 0;
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
    padding: 28px 28px 24px;
    padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px));
}
.gt-x {
    position: absolute; top: 12px; right: 12px; z-index: 3;
    width: 34px; height: 34px; border-radius: 50%;
    display: grid; place-items: center;
    background: rgba(255, 255, 255, .94); border: 0; color: var(--mute);
    font-size: 22px; line-height: 1; cursor: pointer;
}
.gt-x:hover { color: var(--ink); background: #EEF3FF; }
.gt-brand { display: flex; align-items: center; gap: 9px; margin-bottom: 20px; }
.gt-logo {
    width: 28px; height: 28px; border-radius: 7px;
    background: var(--primary); display: grid; place-items: center; line-height: 0;
}
.gt-brand b { font-size: 17px; font-weight: 800; color: var(--ink); }
.gt-brand > span:last-child { font-size: 13px; color: var(--mute); }
.gt-title {
    font-size: 22px; font-weight: 800; letter-spacing: -.3px;
    color: var(--ink); margin: 0 0 6px;
}
.gt-desc { font-size: 14px; color: var(--sub); line-height: 1.7; margin: 0 0 20px; }
.gt-row { margin: 0 0 12px; }
.gt-row input {
    width: 100%; box-sizing: border-box;
    padding: 13px 14px; border-radius: 12px;
    border: 1px solid var(--ctl); background: #fff; color: var(--ink);
    font-size: 16px; outline: none;
    transition: border-color .15s ease, box-shadow .15s ease;
}
.gt-row input::placeholder { color: var(--mute); }
.gt-row input:focus {
    border-color: var(--primary); box-shadow: 0 0 0 3px rgba(31, 79, 255, .12);
}
.gt-code { display: flex; gap: 10px; }
.gt-code input { flex: 1; }
.gt-send {
    flex: none; padding: 0 16px; border-radius: 12px;
    border: 1px solid var(--primary); background: var(--tint);
    color: var(--primary); font-size: 14px; font-weight: 700; cursor: pointer;
}
.gt-send:disabled { opacity: .55; cursor: not-allowed; }
.gt-submit {
    width: 100%; padding: 14px; border: 0; border-radius: 12px;
    cursor: pointer; background: var(--primary); color: #fff;
    font-size: 16px; font-weight: 800; margin-top: 4px;
    transition: filter .15s ease;
}
.gt-submit:hover { filter: brightness(1.06); }
.gt-msg { font-size: 12.5px; min-height: 16px; margin: 10px 0 0; line-height: 1.5; }
.gt-msg.err { color: #dc2626; }
.gt-msg.ok { color: var(--ok-deep); }
.gt-switch {
    display: block; width: 100%; text-align: center;
    font-size: 14px; font-weight: 600; color: var(--primary);
    background: none; border: 0; cursor: pointer; padding: 0; margin: 14px 0 0;
}
.gt-free { font-size: 12.5px; color: var(--mute); margin: 12px 0 0; text-align: center; }

/* ---------- 全站弹窗统一（付费墙 / 反馈 / 联系我们 / 二维码浮层） ---------- */
.um-mask, .fb-modal-mask, .fbq-mask {
    background: rgba(20, 33, 61, .48) !important; backdrop-filter: blur(4px);
}
.um-card, .fb-modal-card, .fbq-card {
    background: #fff !important; border: 1px solid var(--border) !important;
    border-radius: 20px !important; box-shadow: 0 24px 64px rgba(20, 33, 61, .16) !important;
}
.um-card::before { display: none !important; }
.um-quota { background: var(--tint) !important; border-color: #C9D1E0 !important; }
.um-quota-txt { color: var(--primary) !important; }
.um-pip { background: var(--primary) !important; box-shadow: none !important; }
.um-perks li { background: var(--surface-hi) !important; }
.um-cta {
    background: var(--primary) !important; box-shadow: none !important;
}
.um-cta:hover { box-shadow: 0 10px 24px rgba(31, 79, 255, .24) !important; }
.fb-tab.active { background: var(--tint) !important; color: var(--primary) !important; }
.fb-content, .fb-contact, .fb-add-row input {
    background: #fff !important; border-color: var(--ctl) !important; color: var(--ink) !important;
}
.fb-wx { background: var(--surface-hi) !important; }
.fb-modal-card h3, .fbq-cap, .contact-email { color: var(--ink) !important; }
.contact-email { font-family: var(--mono); }
.fb-modal-x, .um-x, .fbq-x { color: var(--mute) !important; }

/* ---------- 平台落地页：表单与提示统一（20 个平台页共用模板） ---------- */
.plat-page .hero h1 { color: var(--ink); font-weight: 800; }
.plat-page .hero .subtitle { color: var(--sub); }
.plat-page .parse-box {
    background: #fff; border: 2px solid var(--primary); border-radius: 20px;
    padding: 20px 22px 14px; margin-top: 24px;
    box-shadow: 0 0 0 8px rgba(31, 79, 255, .08);
}
.plat-page .parse-box textarea {
    width: 100%; border: 0; outline: none; background: transparent;
    color: var(--ink); font-size: 16px; line-height: 1.8; min-height: 112px;
}
.plat-page .parse-box .parse-actions {
    display: flex; justify-content: flex-end; gap: 12px; margin-top: 10px;
}
.plat-page .parse-box #btn-parse {
    background: var(--primary); border: 0; border-radius: 12px;
    padding: 12px 36px; font-size: 16px; font-weight: 700; color: #fff;
}
.plat-page .parse-box #btn-paste {
    background: #fff; border: 1px solid var(--ctl); border-radius: 12px;
    color: var(--ink); padding: 12px 20px;
}
.plat-notice {
    background: var(--tint) !important; border: 1px solid #C9D1E0 !important;
    color: var(--ink) !important;
}
.plat-notice b { color: var(--primary) !important; }
/* ---------- 手机端：把注册弹窗压到尽量一屏看完，剩余部分在卡片内滚动 ---------- */
@media (max-width: 720px) {
    .gt-mask { padding: 10px; }
    .gt-card { border-radius: 16px; max-height: calc(100vh - 20px); max-height: calc(100dvh - 20px); }
    .gt-scroll { padding: 18px 16px 14px; padding-bottom: calc(14px + env(safe-area-inset-bottom, 0px)); }
    .gt-x { top: 8px; right: 8px; width: 32px; height: 32px; }
    .gt-brand { margin-bottom: 12px; }
    .gt-title { font-size: 20px; }
    .gt-desc { font-size: 13px; line-height: 1.55; margin-bottom: 12px; }
    .gt-row { margin-bottom: 8px; }
    /* 16px 不能改小：iOS Safari 对 <16px 输入框聚焦时会自动放大整页 */
    .gt-row input { padding: 11px 12px; font-size: 16px; }
    .gt-code { gap: 8px; }
    .gt-code input { min-width: 0; }
    .gt-send { padding: 0 12px; font-size: 13px; white-space: nowrap; }
    .gt-submit { padding: 13px; margin-top: 2px; }
    .gt-msg { margin-top: 6px; }
    .gt-switch { margin-top: 10px; }
    .gt-free { margin-top: 6px; }
    /* 特惠横幅与微信钩子也要跟着收紧，否则还是会顶出屏幕 */
    .gt-scroll .dpoff-inline { margin-bottom: 8px; padding: 9px 10px; gap: 2px 8px; }
    .gt-scroll .dpoff-inline-main { font-size: 14px; }
    .gt-scroll .dpoff-inline-main b { font-size: 16px; }
    .gt-scroll .dpoff-inline-sub { font-size: 11.5px; }
    .gt-scroll .wx-hook { margin-top: 8px; padding: 9px 10px; }
    .gt-scroll .wx-hook img { width: 42px; height: 42px; }
    .gt-scroll .wx-hook .wx-cap { font-size: 11px; }
    .plat-page .parse-box .parse-actions { flex-direction: column-reverse; }
    .plat-page .parse-box .parse-actions .btn { width: 100%; }
}
@media (max-width: 360px) {
    .gt-send { padding: 0 9px; font-size: 12px; }
    .gt-scroll .dpoff-inline-sub { font-size: 11px; }
}

/* 付费墙在 375x667 这类小屏原本高达 810px，压缩到接近一屏；超出的仍可整层滚动 */
@media (max-width: 560px) {
    .um-modal { padding: 10px; }
    .um-card { width: 100%; padding: 20px 16px 14px; border-radius: 16px; }
    .um-card h3 { font-size: 19px; }
    .um-quota { margin-bottom: 10px; }
    .um-lead { margin-bottom: 10px; font-size: 12.5px; }
    .um-promo { margin-bottom: 10px; padding: 8px 10px; font-size: 12.5px; }
    .um-perks { margin-bottom: 12px; }
    .um-perks li { padding: 7px 10px; margin-bottom: 5px; font-size: 12px; }
    .um-trial { margin-bottom: 10px; padding: 10px; }
    .um-cta { padding: 12px 14px; }
    .um-later { margin-top: 6px; }
}

/* 平台页其余小件：步骤圆点/标签/收藏提示统一为方案A（不碰业务模板） */
.plat-page .plat-step { box-shadow: none; border: 1px solid var(--border); }
.plat-page .plat-step-num { background: var(--ink) !important; color: #fff !important; }
.plat-page .bookmark-hint { display: none; }
.plat-page .plat-badge {
    background: var(--tint) !important; color: var(--primary) !important;
    border: 1px solid #C9D1E0;
}
.plat-page .plat-tags span {
    background: #fff !important; border: 1px solid var(--border) !important;
    color: var(--ink) !important;
}

/* ==============================================================
   全站代码块统一（v5）：所有页面 pre 一律浅灰蓝底 + 墨蓝等宽字 + 细边框
   修复 /api-docs 深底 pre 里 <code> 被 article.css 染成浅灰底导致的「白块黑字」
   ============================================================== */
pre {
    background: #F5F7FB !important;
    border: 1px solid var(--border) !important;
    border-radius: 12px;
    color: var(--ink) !important;
    overflow-x: auto;
}
pre code, .article pre code {
    background: transparent !important;
    padding: 0 !important;
    border-radius: 0 !important;
    color: inherit !important;
}
/* 定价页终端演示卡：外层已是白卡，内部 pre 不再套第二层框 */
.ap-term pre { background: transparent !important; border: 0 !important; }

/* 全站内容页输入框兜底：杜绝深底深字 */
input:not([type="checkbox"]):not([type="radio"]),
textarea, select {
    color: var(--ink);
}
input::placeholder, textarea::placeholder { color: var(--mute); }

/* ==============================================================
   Plan-A 全站组件版式层 v6（2026-11-05）
   不只是换色：把所有非首页页面的卡片、按钮、输入框、表格、标题
   统一到与首页同一套几何与排版规则（白卡细边框 / 零阴影 / 16-20px 圆角 /
   墨蓝大字重 / 钴蓝主行动）。各页内联样式负责具体内容，这里负责一致性。
   ============================================================== */

/* ---------- 卡片：所有页面的信息容器统一白卡语言 ---------- */
:is(.tool, .ap-tier, .ap-calc, .ap-out, .ap-bill, .ap-use, .ap-quick,
    .cli-card, .pt-mode, .work, .upd-panel, .plan-card, .key-ticket,
    .kpi, .panel, .box, .card, .auth) {
    background: #ffffff !important;
    border: 1px solid var(--border) !important;
    border-radius: 16px;
    box-shadow: none;
}

/* ---------- 按钮：统一圆角、字体、字重与过渡 ---------- */
:is(button, .btn, .cta, .ap-btn, .cli-btn, .btn-primary, .btn-sm,
    .btn-send, .row button, .ap-preset) {
    font-family: inherit;
    border-radius: 12px;
    transition: background .15s ease, filter .15s ease,
                transform .15s ease, border-color .15s ease;
}
button:hover:not(:disabled), .btn:hover, .ap-btn:hover { filter: brightness(1.05); }
:is(button, .btn, .cta, .ap-btn, .cli-btn) { font-weight: 700; }
.btn.ghost, .ap-btn.ghost, .btn-send, button.ghost {
    background: #fff; border: 1px solid var(--ctl); color: var(--ink);
}

/* ---------- 输入框：统一焦点态（防 iOS 缩放的字号已 ≥16px） ---------- */
input:not([type="checkbox"]):not([type="radio"]):focus,
textarea:focus, select:focus {
    outline: none;
    border-color: var(--primary) !important;
    box-shadow: 0 0 0 3px rgba(31, 79, 255, .12) !important;
}

/* ---------- 表格：细线 + 浅蓝表头 ---------- */
th { background: var(--surface-hi); color: var(--ink); font-weight: 700; }
td, th { border-bottom: 1px solid var(--line); }
table tr:last-child td { border-bottom: 0; }

/* ---------- 非文章页的标题字重（account / claim / 容量看板等） ---------- */
main:not(.article) h1 {
    font-size: clamp(28px, 3.4vw, 40px);
    font-weight: 800; letter-spacing: -.5px; color: var(--ink);
    line-height: 1.25;
}
main:not(.article) h2 { font-weight: 800; color: var(--ink); }
main:not(.article) h3 { font-weight: 700; color: var(--ink); }

/* ---------- 统一头部（注入 hd-right 后所有页面与首页完全一致） ---------- */
.site-header .wrap { min-height: 72px; }
.brand .name { white-space: nowrap; }
.hd-right { flex: none; }

/* ---------- 内容页底部留白 ---------- */
main { min-height: 40vh; }

@media (max-width: 720px) {
    .hd-right { margin-left: auto; }
    .site-header .wrap { flex-wrap: wrap; gap: 8px 10px; }
    .nav { order: 3; width: 100%; flex: 1 0 100%; flex-wrap: nowrap; overflow-x: auto; }
    .nav a { margin-left: 0; margin-right: 18px; white-space: nowrap; flex: 0 0 auto; }
    .nav a[href="#faq"] { display: inline-block; }
    .quota-pill { display: none; }
    main:not(.article) h1 { font-size: 28px; }
}

/* ==============================================================
   平台落地页 hero（20 个页面共用模板）：与首页同一套「左文 + 右三步卡」
   ============================================================== */
.plat-page .hero .wrap.plat-hero-grid {
    display: grid; grid-template-columns: minmax(0, 1fr) 320px;
    gap: 48px; align-items: start; text-align: left;
    padding-top: 48px; padding-bottom: 32px;
}
.plat-page .plat-hero-main { min-width: 0; }
.plat-page .plat-hero-aside { grid-column: 2; grid-row: 1; margin-top: 8px; }
.plat-page .hero h1 {
    font-size: 46px; line-height: 1.2; font-weight: 800;
    letter-spacing: -1px; color: var(--ink);
    margin: 14px 0 16px; text-align: left;
}
.plat-page .hero .subtitle {
    font-size: 17px; line-height: 1.85; color: var(--sub);
    margin: 0 0 18px; text-align: left;
}
.plat-page .plat-badge { display: inline-block; text-align: left; }
.plat-page .plat-tags { justify-content: flex-start; }
.plat-page .parse-box { margin-top: 20px; }
.plat-page .hero .bookmark-hint { display: none; }
/* 平台页右卡复用首页 steps-card 语言（article.css 不加载时也需要） */
.plat-page .plat-hero-aside h2 {
    font-size: 16px; font-weight: 700; color: var(--ink); margin: 0 0 16px;
}
.plat-page .plat-hero-aside ol {
    list-style: none; margin: 0; padding: 0; display: grid; gap: 14px;
}
.plat-page .plat-hero-aside li {
    display: flex; align-items: center; gap: 12px;
    font-size: 14.5px; line-height: 1.6; color: var(--ink);
}
.plat-page .plat-hero-aside li i {
    flex: none; width: 24px; height: 24px; border-radius: 50%;
    background: var(--ink); color: #fff; font-style: normal;
    font-weight: 700; font-size: 13px; display: grid; place-items: center;
}
.plat-page .plat-hero-aside .steps-note {
    margin: 16px 0 0; padding-top: 14px;
    border-top: 1px solid var(--line);
    font-size: 12.5px; color: var(--mute); line-height: 1.6;
}
@media (max-width: 900px) {
    .plat-page .hero .wrap.plat-hero-grid { grid-template-columns: 1fr; gap: 24px; }
    .plat-page .plat-hero-aside { grid-column: 1; grid-row: 2; max-width: 480px; margin-top: 0; }
    .plat-page .hero h1 { font-size: 34px; }
    .ap-hero { grid-template-columns: 1fr !important; gap: 30px; }
}

/* 平台页下方内容区：标题改方案A左对齐大字重，去掉旧居中感 */
.plat-page .plat-section h2 {
    text-align: left !important;
    font-size: 28px; font-weight: 800; letter-spacing: -.4px;
    color: var(--ink);
}
.plat-page .plat-section > .wrap > p { color: var(--sub); }
.plat-page .plat-step { background: #fff; border: 1px solid var(--border); box-shadow: none; }

/* ==============================================================
   头部 brand 对齐修复（v7.1）
   部分页面把 logo 与站名包在 <a> 里，而 <a> 是行内元素：内部 SVG
   按文字基线排布，导致方块偏上 4px、站名偏下 3~5px（看起来「歪」）。
   首页无 <a>、平台页的 <a> 自带 display:flex，所以只有部分页面出现。
   统一让 .brand 的直接 <a> 变成 flex 并垂直居中，全站对齐。
   ============================================================== */
.brand > a {
    display: inline-flex !important;
    align-items: center !important;
    gap: 10px;
    color: inherit;
    text-decoration: none;
    line-height: 1;
}
.brand > a .logo-mark { flex: none; }

/* ==============================================================
   方案A 悬浮球层 v7（按用户要求恢复）
   四个入口：反馈 / 小程序版 / 开放API / 最近解析
   统一为白底细边胶囊（移动端圆钮），墨蓝图标文字，hover 钴蓝；
   去掉旧版粉紫/青蓝/橙黄渐变小彩球，保持与全站克制风格一致
   ============================================================== */
.fb-fab, .sfab-bubble {
    background: #ffffff !important;
    border: 1px solid var(--border) !important;
    color: var(--ink) !important;
    box-shadow: 0 4px 16px rgba(20, 33, 61, .10) !important;
}
.fb-fab:hover, .sfab-bubble:hover {
    background: var(--tint) !important;
    border-color: var(--primary) !important;
    color: var(--primary) !important;
    box-shadow: 0 8px 22px rgba(31, 79, 255, .18) !important;
}
.sfab-bubble-mini, .sfab-bubble-api, .sfab-bubble-hist {
    background: #ffffff !important;
}
.sfab-bubble-mini:hover, .sfab-bubble-api:hover, .sfab-bubble-hist:hover {
    background: var(--tint) !important;
    border-color: var(--primary) !important;
    color: var(--primary) !important;
    box-shadow: 0 8px 22px rgba(31, 79, 255, .18) !important;
}
/* 四个球紧凑竖排：反馈 24 / 小程序 76 / API 128 / 最近解析 180 */
@media (min-width: 721px) {
    .fb-fab { bottom: 24px !important; right: 24px !important; }
    .sfab-bubble-mini { bottom: 76px !important; right: 24px !important; }
    .sfab-bubble-api { bottom: 128px !important; right: 24px !important; }
    .sfab-bubble-hist { bottom: 180px !important; right: 24px !important; }
}
/* 展开面板：白卡细边框 20px 圆角，与全站弹窗一致 */
.sfab-panel {
    background: #fff !important;
    border: 1px solid var(--border) !important;
    border-radius: 20px !important;
    box-shadow: 0 20px 48px rgba(20, 33, 61, .14) !important;
}
.sfab-hd { color: var(--ink); }
.sfab-x { color: var(--mute) !important; }
.sfab-cap, .sfab-tip { color: var(--sub); }
.sfab-api-pre { background: #F5F7FB !important; color: var(--ink) !important; }
.sfab-dismiss { color: var(--sub); }
/* API 面板：加宽并让四个按钮 2×2 排布，避免窄面板把文字挤成竖排 */
.sfab-panel-api { width: 320px; padding: 20px 18px; }
.sfab-api-btns { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.sfab-api-btns .btn {
    flex: none; min-width: 0; white-space: nowrap;
    font-size: 12px; padding: 9px 8px;
}
.sfab-panel-api .sfab-tip { font-size: 11.5px; line-height: 1.65; }
/* 移动端：38px 圆钮，光环换成页面底色，去掉旧的深色投影 */
@media (max-width: 720px) {
    .fb-fab, .sfab-bubble {
        box-shadow: 0 0 0 3px rgba(245, 247, 251, .95), 0 4px 14px rgba(20, 33, 61, .12) !important;
    }
    .fb-fab:hover, .sfab-bubble:hover { box-shadow: 0 0 0 3px rgba(234, 240, 255, .95), 0 6px 18px rgba(31, 79, 255, .18) !important; }
}

/* ==============================================================
   全站移动端适配收口层（360 / 390 / 720 实测后统一处理）
   根因归类：宽对比表、行内长代码与长 URL、双栏 hero、头部导航。
   关键规则带 !important：部分页面在 link 之后还有内联 <style>，
   同特异性时内联规则会覆盖外部样式表。
   ============================================================== */
@media (max-width: 720px) {
    /* 1) 行内代码 / 长链接：任意位置断行，不再撑破内容区 */
    code, .article code, .article li code, .article td code, .article p code {
        overflow-wrap: anywhere !important;
        word-break: break-word !important;
    }
    pre, .article pre { max-width: 100% !important; overflow-x: auto !important; }
    pre code, .article pre code {
        white-space: pre !important;
        overflow-wrap: normal !important; word-break: normal !important;
    }
    /* 2) 宽表格：自身横向滚动，保留完整表格语义与列对齐 */
    .article table, .article table.cmp, .tbl-wrap > table {
        display: block !important; width: 100% !important;
        overflow-x: auto !important; -webkit-overflow-scrolling: touch;
    }
    .article table > thead, .article table > tbody,
    .article table.cmp > thead, .article table.cmp > tbody { display: table !important; width: 100% !important; }
    /* 列数 ≥ 5 的宽表：给足最小宽度靠横滑查看，不把每列压成 50px；
       2~3 列的窄表（优点/缺点等）仍自适应铺满，不产生多余滚动 */
    .article table.cmp:has(thead tr th:nth-child(5)) > thead,
    .article table.cmp:has(thead tr th:nth-child(5)) > tbody { min-width: 560px !important; }
    .article table.cmp:has(thead tr th:nth-child(5))::before {
        content: "← 左右滑动查看完整表格 →";
        display: block; position: sticky; left: 0;
        font-size: 11px; color: var(--text-dim, #5B6478);
        padding: 0 0 8px; font-weight: 600;
    }
    /* 3) 正文容器断行保护 */
    .article li, .article td, .article th, .article p,
    .article .lead, .article .note, .article details p { overflow-wrap: anywhere; }
    /* 4) 头部导航横滑区与页面容器不越界 */
    .site-header .nav { max-width: 100% !important; }
    .site-header .wrap { max-width: 100%; }
    /* 5) 所有双栏首屏一律单列 */
    .page-hero, .hero-layout, .hero-grid, .plat-hero-grid, .ap-hero {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    .page-hero-aside, .plat-hero-aside { max-width: 100% !important; }
    /* 6) 媒体、表单控件、卡片不越界 */
    img, svg, canvas, video { max-width: 100% !important; }
    input, textarea, select { max-width: 100% !important; }
    .card, .miniapp-card, .plats-card, .cap-card { max-width: 100% !important; }
    .plat-domain, .plats td:last-child { font-size: 11.5px; }
    /* 7) 触控目标：手机端最小 40px，避免误触（正文链接不受影响） */
    .site-header .nav a {
        min-height: 40px !important; display: inline-flex !important;
        align-items: center;
    }
    .nav-more-btn, .chip, .pager-btn,
    .site-header .lang-btn, .notice-bar .nb-x { min-height: 40px !important; }
    .notice-bar .nb-x { min-width: 40px !important; }
}
@media (max-width: 420px) {
    .article pre { font-size: 11.5px !important; }
    .article table.cmp th, .article table.cmp td {
        padding: 8px 7px !important; font-size: 11.5px;
    }
    .page-hero-aside, .plat-hero-aside { padding: 14px !important; }
    .ar-chip { font-size: 11px; padding: 5px 9px; }
    /* 悬浮球在极窄屏收成更紧凑的一列，不遮挡输入框 */
    .fb-fab, .sfab-bubble { right: 8px !important; }
}

/* ============ ¥1 特惠档 · 注册链路引流（trial-offer.js） ============ */
/* 注册表单内横幅：注册过程中先把 ¥1 = 3 天会员摆出来 */
.dpoff-inline { display: grid; grid-template-columns: auto 1fr; align-items: center;
    gap: 2px 10px; margin: 0 0 12px; padding: 11px 13px; border-radius: 13px;
    border: 1.5px solid #1F4FFF; background: linear-gradient(115deg, #EEF3FF, #F8FAFF);
    opacity: 0; transition: opacity .18s ease; }
.dpoff-inline.on { opacity: 1; }
.dpoff-inline[hidden], .dpoff-inline.hidden { display: none !important; }
.dpoff-inline-tag { grid-column: 1; grid-row: 1; padding: 3px 9px; border-radius: 999px;
    background: #1F4FFF; color: #fff; font-size: 11px; font-weight: 800; white-space: nowrap; }
.dpoff-inline-main { grid-column: 2; grid-row: 1; font-size: 15px; font-weight: 700; color: #14213D; }
.dpoff-inline-main b { color: #1F4FFF; font-size: 17px; }
.dpoff-inline-sub { grid-column: 1 / span 2; grid-row: 2; font-size: 12px; color: #5B6478; }

/* 注册成功弹窗 */
.dpoff-mask { position: fixed; inset: 0; z-index: 10020; display: flex;
    align-items: center; justify-content: center; padding: 18px;
    background: rgba(12, 20, 42, .58); backdrop-filter: blur(3px);
    opacity: 0; visibility: hidden; transition: opacity .2s ease, visibility .2s ease; }
.dpoff-mask.on { opacity: 1; visibility: visible; }
.dpoff-card { position: relative; width: 100%; max-width: 420px;
    max-height: 92vh; max-height: 92dvh;
    overflow-y: auto; overscroll-behavior: contain; -webkit-overflow-scrolling: touch;
    padding: 30px 26px 22px; border-radius: 22px; background: #fff;
    box-shadow: 0 24px 70px rgba(12, 20, 42, .38);
    transform: translateY(14px) scale(.97); transition: transform .24s cubic-bezier(.2, .8, .3, 1); }
.dpoff-mask.on .dpoff-card { transform: none; }
.dpoff-card::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 6px;
    border-radius: 22px 22px 0 0;
    background: linear-gradient(100deg, #1F4FFF 0%, #ec4899 55%, #FFD84D 100%); }
.dpoff-x { position: absolute; right: 14px; top: 14px; width: 30px; height: 30px;
    border: 0; border-radius: 50%; background: #F1F4FA; color: #5B6478;
    font-size: 15px; line-height: 30px; cursor: pointer; }
.dpoff-x:hover { background: #E3E9F6; color: #14213D; }
.dpoff-badge { display: inline-block; margin: 4px 0 14px; padding: 5px 12px; border-radius: 999px;
    background: #EEF3FF; color: #1F4FFF; font-size: 12px; font-weight: 800; }
.dpoff-card h3 { margin: 0 0 10px; font-size: 27px; line-height: 1.35; font-weight: 900;
    letter-spacing: -.4px; color: #14213D; }
.dpoff-card h3 em { font-style: normal; color: #1F4FFF; }
.dpoff-lead { margin: 0 0 18px; font-size: 13.5px; line-height: 1.7; color: #5B6478; }
.dpoff-perks { list-style: none; margin: 0 0 20px; padding: 14px 15px; border-radius: 14px;
    background: #F5F7FB; }
.dpoff-perks li { display: flex; gap: 9px; align-items: flex-start; padding: 6px 0;
    font-size: 13px; line-height: 1.6; color: #3B4560; }
.dpoff-perks li span { flex: 0 0 20px; font-size: 15px; }
.dpoff-perks li b { color: #14213D; }
.dpoff-cta { display: block; padding: 15px 18px; border-radius: 14px; text-align: center;
    text-decoration: none; color: #fff; font-size: 17px; font-weight: 900; letter-spacing: .3px;
    background: linear-gradient(100deg, #1F4FFF 0%, #6D3BF5 55%, #ec4899 100%);
    box-shadow: 0 10px 26px rgba(31, 79, 255, .34); transition: transform .18s, filter .18s; }
.dpoff-cta:hover { transform: translateY(-2px); filter: brightness(1.07); }
.dpoff-later { display: block; width: 100%; margin-top: 9px; padding: 8px; border: 0;
    background: transparent; color: #5B6478; font-size: 13px; cursor: pointer; }
.dpoff-later:hover { color: #14213D; }
.dpoff-trust { margin-top: 4px; text-align: center; font-size: 11.5px; color: #8A93A8; }

/* 顶部轻提醒条：弹窗点「暂不」后仍留一个入口 */
.dpoff-bar { position: fixed; left: 50%; top: 12px; z-index: 10010;
    display: flex; align-items: center; gap: 10px; max-width: calc(100vw - 24px);
    box-sizing: border-box;
    padding: 9px 10px 9px 12px; border-radius: 999px; border: 1px solid #C9D6FF;
    background: #fff; box-shadow: 0 8px 30px rgba(20, 33, 61, .18);
    transform: translate(-50%, -140%); opacity: 0; transition: transform .28s ease, opacity .28s ease; }
.dpoff-bar.on { transform: translate(-50%, 0); opacity: 1; }
.dpoff-bar-tag { padding: 3px 9px; border-radius: 999px; background: #1F4FFF; color: #fff;
    font-size: 11px; font-weight: 800; white-space: nowrap; }
.dpoff-bar-main { font-size: 13px; color: #14213D; white-space: nowrap;
    min-width: 0; flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; }
.dpoff-bar-main b { color: #1F4FFF; }
.dpoff-bar > a { flex: none; padding: 6px 12px; border-radius: 999px; background: #1F4FFF; color: #fff;
    font-size: 12px; font-weight: 800; text-decoration: none; white-space: nowrap; }
.dpoff-bar-x { flex: none; width: 24px; height: 24px; border: 0; border-radius: 50%; background: #F1F4FA;
    color: #5B6478; font-size: 12px; cursor: pointer; }
@media (max-width: 560px) {
    .dpoff-card { padding: 26px 20px 18px; }
    .dpoff-card h3 { font-size: 23px; }
    .dpoff-bar { gap: 7px; padding: 8px 9px; }
    .dpoff-bar-main { font-size: 12px; }
    .dpoff-bar-tag { display: none; }
}
@media (prefers-reduced-motion: reduce) {
    .dpoff-mask, .dpoff-card, .dpoff-bar, .dpoff-inline { transition: none; }
    .dpoff-card { transform: none; }
}

/* ==============================================================
   全站手机端适配收口（2026-11-08）
   121 个公开页面在 320/360/390 三档视口实测均无横向溢出；本段处理
   剩余的「能看但不好用」：iOS 聚焦放大、点击区过小、辅助字过小、
   悬浮入口互相重叠、横滑区没有提示、锚点被吸顶头部盖住。
   ============================================================== */
@media (max-width: 720px) {
    /* 1) iOS Safari 对 <16px 的文本输入框聚焦时会强制放大整页并难以缩回 */
    input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="submit"]),
    textarea, select { font-size: 16px !important; }
    /* 2) 触控目标 ≥36px；纯文本链接不撑高，否则正文行距会被拉散 */
    button, .btn, .chip, .ap-preset, .pager-btn, .nav-more-btn { min-height: 36px; }
    /* 圆形悬浮钮/弹窗关闭钮保持圆形，不能被上面的规则拉成椭圆 */
    button.dpoff-bar-x, button.gt-x, button.fb-fab, button.sfab-bubble { min-height: 0; }
    .fb-fab, .sfab-bubble { min-width: 38px; min-height: 38px; }
    /* 3) 辅助说明文字统一 ≥12.5px（原来有 10/11/11.5px，手机上几乎看不清） */
    .wx-cap, .um-trust, .um-free-s, .sfab-tip, .qr-hint,
    .ap-path, .ap-flag, .tag, .eyebrow, .pm-note, .pc-x2,
    .pc-count, .dpoff-inline-sub, .dpoff-bar-main { font-size: 12.5px !important; }
    /* 11-09 全量复测补漏：这些角标/按钮还是 11~12px，手机上一并提到 12.5px。
       .dpmock-panel 是「模拟下载面板」里的拟真界面文字，刻意保持小字，不动。 */
    .badge.get, .badge.post, .bonus, .lang-btn, .upd-rec-badge,
    .nav-more-btn, .cap-badge, .cap-btn, .qr-cap,
    .ap-chip, .unit, .k, .pt-ready, .ap-preset { font-size: 12.5px !important; }
    .article table.cmp th, .article table.cmp td { font-size: 12.5px !important; }
    /* 注册弹窗内部已按一屏精算过间距，这两处恢复紧凑值 */
    .gt-scroll .wx-cap, .gt-scroll .dpoff-inline-sub { font-size: 11.5px !important; }
    /* 4) 悬浮圆钮重排：旧规则漏了 .sfab-bubble-ext，它和 .fb-fab 都停在
       bottom:12px 完全重叠，导致「边看边存教程」这个入口永远点不到。 */
    .fb-fab { bottom: var(--fab-b, 12px); }
    .sfab-bubble-api  { bottom: calc(var(--fab-b, 12px) + 44px); }
    .sfab-bubble-mini { bottom: calc(var(--fab-b, 12px) + 88px); }
    .sfab-bubble-ext  { bottom: calc(var(--fab-b, 12px) + 132px); }
    .sfab-bubble-hist { bottom: calc(var(--fab-b, 12px) + 176px); }
    .sfab-panel, .sfab-panel-api, .sfab-panel-mini, .sfab-panel-ext, .sfab-panel-hist {
        bottom: calc(var(--fab-b, 12px) + 48px);
    }
    /* 5) 头部导航是隐藏了滚动条的横滑区，用户常以为链接「被裁掉」。
       提示元素由 nav-auth.js 插到 .wrap 里做绝对定位（不随导航内容滚动），
       右侧渐隐 + 箭头，滑到末尾自动隐藏。 */
    .site-header .nav { scrollbar-width: none; }
    .site-header .wrap { position: relative; }
    .nav-swipe-tip {
        position: absolute; z-index: 2; width: 50px;
        display: flex; align-items: center; justify-content: flex-end;
        padding-right: 4px; box-sizing: border-box;
        color: #1F4FFF; font-size: 22px; font-weight: 800; line-height: 1;
        /* 渐变拉长，让最后半截链接自然淡出，而不是硬切出一个残字 */
        background: linear-gradient(90deg, rgba(245,247,251,0) 0%, rgba(245,247,251,.97) 78%);
        pointer-events: none; transition: opacity .2s ease;
    }
    .nav-swipe-tip::before { content: "›"; }
    .nav-swipe-tip.at-end { opacity: 0; }
    /* 6) 代码块可横滑，给一条细滚动条作为可见线索 */
    pre { scrollbar-width: thin; }
    /* 7) 手机端头部是吸顶两行，#锚点跳转目标要留出头部高度 */
    html { scroll-padding-top: 96px; }
    /* 8) 底部内容避开右下角常驻圆钮与 iPhone 安全区 */
    .site-footer, footer { padding-bottom: calc(20px + env(safe-area-inset-bottom, 0px)); }
    /* 9) 320px 小屏仍有三处横向溢出（2026-11-09 全量复测抓到）：
      首页解析框占位示例是「长链接 + 不换行空格」，文章步骤卡里有
      chrome://extensions、dpk_… 之类不可断长串，flex/grid 项目默认
      min-width:auto 会把整页撑宽 5~17px。统一允许任意处断行 + 收缩。 */
    .parse-demo p,
    .article .steps li,
    .article .steps li * { overflow-wrap: anywhere; word-break: break-word; min-width: 0; }
    .article .steps { grid-template-columns: minmax(0, 1fr); }
    /* 10) 宽对比表格在窄屏靠原生横滑查看右侧列，留一条细滚动条作线索。
      不写死「左右滑动」文字提示：全站 11 页里只有 3 个表格真会溢出，
      给 2 列的小表格也挂提示反而是误导。 */
    .article table.cmp { scrollbar-width: thin; -webkit-overflow-scrolling: touch; }
}
@media (max-width: 380px) {
    /* 3 列图集在 320~360 宽每列只剩 73px，改 2 列 */
    .cap-art-gallery { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
    .footer-cols { gap: 12px; }
}

/* ===== MCP / mcptry 实时徽章（2026-11-09）=====
   首页能力条 + 开放 API 文档页内嵌行共用一套徽章与悬停说明。
   徽章是第三方实时状态图，悬停/键盘聚焦时解释「这是什么」，
   移动端靠条内中文说明兜底（手机没有 hover）。 */
.mcp-strip {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    margin: 18px 0 4px; padding: 12px 16px;
    background: #F5F7FB; border: 1px solid #E3E7EF; border-radius: 14px;
}
.mcp-strip-txt { flex: 1 1 260px; min-width: 0; font-size: 13.5px; line-height: 1.55; color: #14213D; }
.mcp-strip-txt b { display: block; font-size: 14px; font-weight: 700; }
.mcp-strip-txt > span { display: block; opacity: .72; margin-top: 2px; }
.mcp-strip-link { flex: 0 0 auto; font-size: 13.5px; font-weight: 700; color: #1F4FFF; white-space: nowrap; }
.mcp-inline { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 10px 0 14px; font-size: 13.5px; color: #14213D; }
.mcp-inline > span { opacity: .75; }
.mcp-badge-tip { position: relative; display: inline-flex; align-items: center; flex: 0 0 auto; outline: none; }
.mcp-badge-tip img { display: block; height: 20px; width: auto; max-width: 180px; border: 0; }
/* 外链徽章加载失败时显示本地文字徽章，避免出现一大段 alt 文本把窄屏撑破 */
.mcp-badge-fallback { display: none; align-items: center; height: 20px; padding: 0 9px; border-radius: 4px; background: #14213D; color: #FFFFFF; font-size: 12px; font-weight: 700; white-space: nowrap; }
.mcp-badge-tip:focus-visible { box-shadow: 0 0 0 2px #1F4FFF; border-radius: 4px; }
.mcp-badge-tip::after {
    content: attr(data-tip);
    /* 隐藏时必须 display:none：absolute 伪元素即使用 visibility:hidden 也会参与
       文档滚动区计算，320px 窄屏会被它撑出 10px 横向溢出。 */
    display: none;
    position: absolute; left: 0; top: calc(100% + 10px); z-index: 30;
    box-sizing: border-box;
    width: max-content; max-width: min(300px, 78vw);
    padding: 9px 12px; border-radius: 10px;
    background: #14213D; color: #FFFFFF; font-size: 12.5px; line-height: 1.55;
    box-shadow: 0 8px 24px rgba(20, 33, 61, .22);
    pointer-events: none; white-space: normal; text-align: left;
}
.mcp-badge-tip:hover::after, .mcp-badge-tip:focus::after, .mcp-badge-tip:focus-visible::after {
    display: block;
}
.mcp-i18n.en { display: none; }
html[lang="en"] .mcp-i18n.zh { display: none; }
html[lang="en"] .mcp-i18n.en { display: inline; }
@media (max-width: 640px) {
    .mcp-strip { gap: 9px; padding: 11px 13px; margin-top: 15px; }
    .mcp-strip-txt { flex: 1 1 100%; font-size: 13px; }
    .mcp-strip-txt b { font-size: 13.5px; }
    .mcp-badge-tip::after { max-width: min(280px, calc(100vw - 48px)); }
}

/* MCP 一键安装按钮（/api-docs 客户端配置区）。
   article.css 里 .article p / a / b / code 是 0-1-1，会盖掉单类选择器，
   所以这里统一带 .article + 元素限定，避免蓝底蓝字、提示条字号被改写。 */
.article .mcp-install { margin: 0 0 2px; }
.article .mcp-install-btns { display: flex; flex-wrap: wrap; gap: 9px; }
.article a.mcp-install-btn, .article button.mcp-install-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 7px;
    box-sizing: border-box; min-height: 40px; padding: 9px 16px;
    border: 1px solid #1F4FFF; border-radius: 10px;
    background: #1F4FFF; color: #FFFFFF;
    font-family: inherit; font-size: 13.5px; font-weight: 700; line-height: 1.3;
    text-decoration: none; cursor: pointer; white-space: nowrap;
    transition: transform .12s ease, box-shadow .12s ease;
}
.article a.mcp-install-btn:hover, .article button.mcp-install-btn:hover {
    color: #FFFFFF; box-shadow: 0 6px 16px rgba(31, 79, 255, .22); transform: translateY(-1px);
}
.article a.mcp-install-btn:active, .article button.mcp-install-btn:active { transform: none; }
.article a.mcp-install-btn:focus-visible, .article button.mcp-install-btn:focus-visible {
    outline: 2px solid #1F4FFF; outline-offset: 2px;
}
.article a.mcp-install-btn.ghost, .article button.mcp-install-btn.ghost {
    background: #FFFFFF; color: #1F4FFF; border-color: #1F4FFF;
}
.article .mcp-install-arrow { font-size: 14px; opacity: .85; }
.article .mcp-copy-state { min-width: 1em; }
.article p.mcp-install-note {
    max-width: none; margin: 11px 0 0; padding: 10px 13px;
    background: #FFFBEB; border: 1px solid #FDE68A; border-left: 3px solid #F59E0B;
    border-radius: 10px; color: #14213D; font-size: 12.8px; line-height: 1.85;
    overflow-wrap: anywhere;
}
.article .mcp-install-note b { color: #B45309; }
.article .mcp-install-note code {
    background: #FFFFFF; color: #14213D; padding: 1px 5px;
    border-radius: 5px; font-size: .92em; overflow-wrap: anywhere;
}
.article .mcp-install-note a { color: #1F4FFF; font-weight: 700; }
@media (max-width: 640px) {
    .article .mcp-install-btns { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; }
    .article a.mcp-install-btn, .article button.mcp-install-btn { width: 100%; min-height: 42px; }
    .article p.mcp-install-note { font-size: 12.5px; }
}

/* MCP 通用配置卡片（/ai 与 /api-docs 共用，2026-11-09）。
   MCP 只统一协议不统一配置文件格式，这里按客户端切成四种可整段粘贴的完整配置。
   article.css 的 .article p / pre / code / button 是 0-1-1，全部带 .article 前缀覆盖。 */
.article .mcp-cfg {
    margin: 14px 0 0; padding: 15px 16px;
    border: 1px solid #E3E7EF; border-radius: 14px; background: #F5F7FB;
}
.article .mcp-cfg-head { margin-bottom: 11px; font-size: 13.5px; line-height: 1.7; color: #14213D; }
.article .mcp-cfg-head b { display: block; font-size: 14.5px; }
.article .mcp-cfg-head span { opacity: .72; }
.article .mcp-cfg-tabs { display: flex; flex-wrap: wrap; gap: 7px; margin-bottom: 11px; }
.article button.mcp-cfg-tab {
    box-sizing: border-box; min-height: 34px; padding: 6px 12px;
    border: 1px solid #C9D1E0; border-radius: 999px;
    background: #FFFFFF; color: #14213D;
    font-family: inherit; font-size: 12.8px; font-weight: 600; line-height: 1.3;
    cursor: pointer; white-space: nowrap;
}
.article button.mcp-cfg-tab.active { background: #1F4FFF; border-color: #1F4FFF; color: #FFFFFF; }
.article button.mcp-cfg-tab:focus-visible { outline: 2px solid #1F4FFF; outline-offset: 2px; }
.article .mcp-cfg-keyhint { display: block; margin-bottom: 6px; font-size: 12.5px; opacity: .72; }
.article .mcp-cfg-inputs { display: flex; gap: 8px; align-items: stretch; margin-bottom: 10px; }
.article .mcp-cfg-inputs input {
    flex: 1 1 auto; min-width: 0; box-sizing: border-box;
    padding: 9px 12px; border: 1px solid #C9D1E0; border-radius: 10px;
    background: #FFFFFF; color: #14213D;
    font-family: inherit; font-size: 16px; line-height: 1.3;
}
.article .mcp-cfg-inputs input:focus { border-color: #1F4FFF; outline: none; }
.article .mcp-cfg-inputs button.mcp-install-btn { flex: 0 0 auto; }
.article .mcp-cfg pre {
    margin: 0; padding: 12px 14px;
    background: #FFFFFF; border: 1px solid #E3E7EF; border-radius: 10px;
    overflow-x: auto; white-space: pre; tab-size: 2;
    font-size: 12.8px; line-height: 1.7;
}
.article .mcp-cfg pre code { background: none; padding: 0; font-size: inherit; }
.article p.mcp-cfg-hint {
    max-width: none; margin: 9px 0 0;
    color: #5B6478; font-size: 12.5px; line-height: 1.8; overflow-wrap: anywhere;
}
@media (max-width: 640px) {
    .article .mcp-cfg { padding: 12px 13px; }
    .article .mcp-cfg-tabs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 7px; }
    .article button.mcp-cfg-tab { width: 100%; font-size: 12.5px; }
    .article .mcp-cfg-inputs { flex-direction: column; }
    .article .mcp-cfg-inputs button.mcp-install-btn { width: 100%; min-height: 42px; }
    .article .mcp-cfg pre { font-size: 12.5px; }
}
