/* =========================================================================
   ZaFeed 内页通用样式：页头 / 统计卡 / 工具栏 / 数据表 / 侧栏卡 / 分页 /
   文档排版 / 代码块 / 认证页 / 会员中心
   依赖 foundation.css、overlays.css、site.css
   ========================================================================= */

/* ---------------- 页头 ---------------- */
.ph { position: relative; padding: 56px 0 36px; }
.crumb { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--zf-text-3); }
.crumb a { transition: color var(--zf-dur-hover); }
.crumb a:hover { color: var(--zf-green-700); }
.crumb span[data-icon] svg { width: 13px; height: 13px; }
.ph__row { display: flex; align-items: flex-end; justify-content: space-between; gap: 40px; }
.ph h1 { margin-top: 14px; font-size: 44px; letter-spacing: -.02em; }
.ph p.ph__desc { margin-top: 12px; max-width: 680px; font-size: 17px; color: var(--zf-text-2); }
.ph__aside { display: flex; align-items: center; gap: 12px; flex: none; }
.ph__live { display: inline-flex; align-items: center; gap: 8px; height: 34px; padding: 0 14px; border-radius: 99px; background: rgb(var(--zf-surface-rgb) / .75); border: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-text-2); }

.pstats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: 32px; }
.pstat {
  --ac: var(--zf-green-600);
  position: relative; overflow: hidden; isolation: isolate; display: flex; align-items: center; gap: 16px; padding: 20px 22px; border-radius: 20px;
  background: rgb(var(--zf-surface-rgb) / .78); border: 1px solid rgb(var(--zf-surface-rgb) / .95); box-shadow: 0 1px 2px rgba(16,42,67,.04), 0 18px 40px -28px rgba(16,42,67,.24);
  -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
}
.pstat::before { content: ""; position: absolute; z-index: -1; right: -60px; top: -70px; width: 180px; height: 180px; border-radius: 50%; background: radial-gradient(closest-side, color-mix(in srgb, var(--ac) 14%, transparent), transparent); }
.pstat .tile__ico { width: 44px; height: 44px; border-radius: 14px; }
.pstat b { display: block; font-size: 28px; font-weight: 700; color: var(--zf-text); letter-spacing: -.02em; line-height: 1.15; font-variant-numeric: tabular-nums; }
.pstat b small { margin-left: 2px; font-size: 14px; font-weight: 600; color: var(--zf-text-2); }
.pstat span.lbl { font-size: 13px; color: var(--zf-text-3); }
.pstat--b { --ac: #2B78F0; } .pstat--v { --ac: #7B5CF5; } .pstat--g { --ac: #B7862B; }

.pbody { padding-bottom: 112px; }
.pgrid { display: grid; grid-template-columns: minmax(0, 1fr) 340px; gap: 24px; align-items: start; }
.pside { display: grid; gap: 16px; position: sticky; top: 88px; }
.psec { margin-top: 56px; }
.psec__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; margin-bottom: 20px; }
.psec__head h2 { font-size: 24px; }
.psec__head p { margin-top: 6px; font-size: 14px; color: var(--zf-text-3); }

/* ---------------- 工具栏 ---------------- */
.toolbar { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--zf-line); }
.toolbar .mk__search { width: 300px; height: 40px; box-shadow: none; }
.toolbar .zf-select { min-width: 150px; height: 40px; font-size: 14px; }
.toolbar__end { margin-left: auto; display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--zf-text-3); }

/* ---------------- 数据表 ---------------- */
.dtable { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 14px; }
.dtable th { position: sticky; top: 64px; z-index: 2; height: 42px; padding: 0 16px; text-align: left; font-size: 12px; font-weight: 600; color: var(--zf-text-3); background: var(--zf-surface-2); border-bottom: 1px solid var(--zf-line); white-space: nowrap; }
.dtable th.r, .dtable td.r { text-align: right; }
.dtable th button { display: inline-flex; align-items: center; gap: 4px; color: inherit; font-weight: inherit; }
.dtable th button:hover { color: var(--zf-text); }
.dtable th button svg { width: 12px; height: 12px; opacity: .6; }
.dtable td { height: 60px; padding: 0 16px; border-bottom: 1px solid var(--zf-line); color: var(--zf-text); white-space: nowrap; transition: background-color var(--zf-dur-hover); }
.dtable tbody tr { cursor: pointer; animation: mkin 360ms var(--zf-ease-out) both; animation-delay: calc(var(--d, 0) * 24ms); }
.dtable tbody tr:hover td { background: rgba(0,144,74,.04); }
.dtable tbody tr:hover td:first-child { box-shadow: inset 3px 0 0 var(--zf-green-600); }
.dtable tbody tr:last-child td { border-bottom: 0; }
.dtable .muted { color: var(--zf-text-3); font-size: 13px; }
.dtable .zf-tnum { font-variant-numeric: tabular-nums; }
.sym { display: flex; align-items: center; gap: 12px; }
.sym .mchip__flag { --ac: var(--zf-ink-600); width: 34px; height: 34px; font-size: 10.5px; }
.sym b { display: block; font-size: 14.5px; font-weight: 600; }
.sym small { display: block; font-size: 12px; color: var(--zf-text-3); }
.pill { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 9px; border-radius: 99px; font-size: 12px; font-weight: 600; background: var(--zf-ink-50); color: var(--zf-text-2); }
.pill--open { background: rgba(16,168,98,.10); color: var(--zf-green-700); }
.pill--holiday { background: rgba(229,72,77,.10); color: #C9363B; }
.pill--half, .pill--break, .pill--pre { background: rgba(224,138,0,.12); color: #A86400; }
.pill .st { margin-right: 0; }
.rowgo { display: inline-grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; color: var(--zf-text-3); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover), transform var(--zf-dur-pop) var(--zf-ease-out); }
.rowgo svg { width: 15px; height: 15px; }
.dtable tbody tr:hover .rowgo { background: var(--zf-green-600); color: #fff; transform: translateX(2px); }
.star { display: inline-grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; color: var(--zf-ink-200); font-size: 16px; transition: color var(--zf-dur-hover), transform 300ms var(--zf-ease-spring); }
.star:hover { color: var(--zf-warning); }
.star.is-on { color: #F5A524; transform: scale(1.1); }
.tfoot { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-top: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-text-3); }
.pager { display: flex; gap: 6px; }
.pager button { display: grid; place-items: center; min-width: 32px; height: 32px; padding: 0 8px; border-radius: 10px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); border: 1px solid var(--zf-line); background: var(--zf-surface); transition: all var(--zf-dur-hover); }
.pager button:hover { border-color: var(--zf-green-300); color: var(--zf-green-700); }
.pager button.is-on { background: var(--zf-green-600); border-color: var(--zf-green-600); color: #fff; }
.pager button[disabled] { opacity: .4; pointer-events: none; }
.pager svg { width: 14px; height: 14px; }
.tempty { padding: 64px 0; text-align: center; color: var(--zf-text-3); font-size: 14px; }
.tempty .zf-nodes { display: flex; justify-content: center; margin: 0 auto 12px; }

/* ---------------- 侧栏卡 ---------------- */
.acard { padding: 20px; }
.acard__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.acard__head h4 { font-size: 16px; display: flex; align-items: center; gap: 8px; }
.acard__head h4 svg { width: 17px; height: 17px; color: var(--zf-green-600); }
.alist { display: grid; gap: 2px; }
.arow { position: relative; display: flex; align-items: center; gap: 10px; height: 46px; padding: 0 10px; margin: 0 -10px; border-radius: 12px; font-size: 14px; color: var(--zf-text); transition: background-color var(--zf-dur-hover); cursor: pointer; }
.arow:hover { background: rgba(0,144,74,.05); }
.arow .rk { width: 18px; font: 700 12px var(--zf-sans); color: var(--zf-text-3); }
.arow small { font-size: 12px; color: var(--zf-text-3); }
.arow .end { margin-left: auto; text-align: right; font-variant-numeric: tabular-nums; }
.cta-card { padding: 22px; background: linear-gradient(150deg, var(--zf-tint), var(--zf-surface) 70%); border-color: var(--zf-green-100) !important; }
.cta-card h4 { font-size: 16px; }
.cta-card p { margin: 6px 0 14px; font-size: 13.5px; color: var(--zf-text-3); }

/* 抽屉详情 */
.kv { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--zf-line); border: 1px solid var(--zf-line); border-radius: 14px; overflow: hidden; }
.kv div { padding: 12px 14px; background: var(--zf-surface); }
.kv span { display: block; font-size: 12px; color: var(--zf-text-3); }
.kv b { display: block; margin-top: 2px; font-size: 15px; color: var(--zf-text); font-variant-numeric: tabular-nums; }
.dr-big { display: flex; align-items: flex-end; gap: 12px; margin: 6px 0 18px; }
.dr-big b { font-size: 40px; line-height: 1; font-weight: 700; color: var(--zf-text); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.dr-chart { height: 180px; margin: 0 -6px 18px; }
.hlist { display: grid; gap: 8px; }
.hitem { display: grid; grid-template-columns: 96px 1fr auto; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 14px; border: 1px solid var(--zf-line); background: var(--zf-surface); font-size: 14px; }
.hitem.is-past { opacity: .45; }
.hitem b { color: var(--zf-text); font-variant-numeric: tabular-nums; }
.hitem small { display: block; font-size: 12px; color: var(--zf-text-3); }

/* ---------------- 文档 ---------------- */
.doc { display: grid; grid-template-columns: 232px minmax(0, 1fr) 200px; gap: 40px; align-items: start; padding-bottom: 112px; }
.doc__nav, .doc__toc { position: sticky; top: 92px; }
.doc__nav { padding: 12px; border-radius: 20px; background: rgb(var(--zf-surface-rgb) / .65); border: 1px solid rgb(var(--zf-shade-rgb) / .06); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.doc__grp { padding: 14px 10px 6px; font-size: 11.5px; font-weight: 600; letter-spacing: .08em; color: var(--zf-text-3); }
.doc__nav a { position: relative; display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 10px; border-radius: 10px; font-size: 14px; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.doc__nav a:hover { background: rgb(var(--zf-shade-rgb) / .05); color: var(--zf-text); }
.doc__nav a.is-on { background: var(--zf-surface); color: var(--zf-green-800); font-weight: 600; box-shadow: var(--zf-sh-1); }
.doc__nav a.is-on::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px; border-radius: 3px; background: var(--zf-green-600); }
.method { display: inline-grid; place-items: center; min-width: 34px; height: 18px; padding: 0 5px; margin-left: auto; border-radius: 5px; font: 700 10px var(--zf-mono); background: rgba(16,168,98,.12); color: var(--zf-green-700); }
.method--ws { background: rgba(123,92,245,.12); color: #6243DB; }
.doc__toc { font-size: 13px; }
.doc__toc h5 { font-size: 12px; letter-spacing: .08em; color: var(--zf-text-3); margin-bottom: 10px; }
.doc__toc a { display: block; padding: 5px 0 5px 12px; border-left: 2px solid var(--zf-line); color: var(--zf-text-3); transition: color var(--zf-dur-hover), border-color var(--zf-dur-hover); }
.doc__toc a:hover { color: var(--zf-text); }
.doc__toc a.is-on { color: var(--zf-green-700); border-left-color: var(--zf-green-600); font-weight: 600; }
.doc__body { min-width: 0; }
.dsec { padding: 36px 40px; margin-bottom: 24px; scroll-margin-top: 96px; }
.dsec > .zf-eyebrow { margin-bottom: 12px; }
.dsec h2 { font-size: 28px; letter-spacing: -.01em; }
.dsec h3 { margin: 30px 0 10px; font-size: 18px; scroll-margin-top: 96px; }
.dsec p, .dsec li { font-size: 15.5px; line-height: 1.85; color: var(--zf-text-2); }
.dsec p + p { margin-top: 10px; }
.dsec ul, .dsec ol { margin: 10px 0 0; padding-left: 22px; }
.dsec code:not(pre code) { padding: 2px 6px; border-radius: 6px; background: var(--zf-ink-50); font: 500 13px var(--zf-mono); color: var(--zf-ink-800); }
.dsec .lead { font-size: 16.5px; }
.endpoint { display: flex; align-items: center; gap: 12px; margin-top: 18px; padding: 12px 14px; border-radius: 14px; background: var(--zf-ink-900); color: #DCE6EF; font: 500 14px var(--zf-mono); }
.endpoint .method { margin: 0; height: 22px; min-width: 44px; font-size: 11px; background: rgba(47,190,121,.18); color: #7FD7AA; }
.endpoint .method--ws { background: rgba(155,130,255,.2); color: #C4B5FF; }
.endpoint .code__btn { margin-left: auto; }
.ptable { width: 100%; margin-top: 14px; border-collapse: separate; border-spacing: 0; border: 1px solid var(--zf-line); border-radius: 14px; overflow: hidden; font-size: 14px; }
.ptable th { height: 40px; padding: 0 14px; text-align: left; font-size: 12px; font-weight: 600; color: var(--zf-text-3); background: var(--zf-surface-2); border-bottom: 1px solid var(--zf-line); }
.ptable td { padding: 12px 14px; border-bottom: 1px solid var(--zf-line); color: var(--zf-text-2); vertical-align: top; line-height: 1.6; }
.ptable tr:last-child td { border-bottom: 0; }
.ptable td:first-child { white-space: nowrap; }
.ptable td:first-child code { color: var(--zf-green-800) !important; font-weight: 600 !important; }
.req { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 5px; font-size: 11px; font-weight: 700; background: rgba(229,72,77,.1); color: #C9363B; }
.opt { display: inline-block; margin-left: 6px; padding: 0 6px; border-radius: 5px; font-size: 11px; font-weight: 600; background: var(--zf-ink-50); color: var(--zf-text-3); }
.callout { display: flex; gap: 12px; margin-top: 18px; padding: 14px 16px; border-radius: 14px; background: var(--zf-green-50); border: 1px solid var(--zf-green-100); font-size: 14px; color: var(--zf-green-900); line-height: 1.7; }
.callout > [data-icon] svg { width: 18px; height: 18px; margin-top: 2px; color: var(--zf-green-600); }
.callout--warn { background: rgba(224,138,0,.08); border-color: rgba(224,138,0,.22); color: #7A4A00; }
.callout--warn > [data-icon] svg { color: var(--zf-warning); }
.cblock { margin-top: 16px; border-radius: 16px; overflow: hidden; background: var(--zf-ink-900); border: 1px solid rgba(16,42,67,.2); }
.cblock__bar { display: flex; align-items: center; gap: 10px; height: 44px; padding: 0 10px 0 16px; border-bottom: 1px solid rgba(255,255,255,.07); font-size: 12px; font-weight: 600; letter-spacing: .04em; color: #7F95AA; }
.cblock__bar .code__btn { margin-left: auto; height: 28px; }
.cblock__bar .zf-tabs { border: 0; }
.cblock__bar .zf-tabs button { height: 44px; color: #7F95AA; font-size: 13px; }
.cblock__bar .zf-tabs button[aria-selected="true"], .cblock__bar .zf-tabs button:hover { color: #fff; }
.cblock__bar .zf-tabs__ind { bottom: 0; background: var(--zf-green-400); }
.cblock pre { margin: 0; padding: 16px 18px; font: 13px/1.8 var(--zf-mono); color: #C9D5E1; overflow: auto; }
.cblock pre .k { color: #FF9E9E; } .cblock pre .f { color: #7FD7AA; } .cblock pre .s { color: #F6C177; } .cblock pre .n { color: #9CC9FF; } .cblock pre .c { color: #5C7690; }
.steps4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 20px; }
.step4 { --ac: var(--zf-green-600); position: relative; padding: 18px; border-radius: 18px; border: 1px solid var(--zf-line); background: var(--zf-surface); transition: transform var(--zf-dur-pop) var(--zf-ease-out), box-shadow var(--zf-dur-pop), border-color var(--zf-dur-hover); }
.step4:hover { transform: translateY(-3px); box-shadow: var(--zf-sh-2); border-color: var(--zf-green-200); }
.step4 .n { position: absolute; right: 16px; top: 12px; font: 800 30px/1 var(--zf-sans); color: var(--zf-ink-100); }
.step4 .tile__ico { width: 38px; height: 38px; }
.step4 h4 { margin-top: 14px; font-size: 15.5px; }
.step4 p { margin-top: 4px; font-size: 13px !important; line-height: 1.6 !important; color: var(--zf-text-3) !important; }
.step4 .zf-link { margin-top: 10px; font-size: 13px; }
.check { margin-top: 16px; padding: 18px; border-radius: 18px; border: 1px solid var(--zf-line); background: var(--zf-surface-2); }
.check__bar { display: flex; align-items: center; gap: 14px; font-size: 13px; color: var(--zf-text-3); }
.check__track { flex: 1; height: 6px; border-radius: 6px; background: var(--zf-ink-100); overflow: hidden; }
.check__track i { display: block; height: 100%; width: 0; border-radius: inherit; background: linear-gradient(90deg, var(--zf-green-500), var(--zf-green-400)); transition: width var(--zf-dur-layer) var(--zf-ease-out); }
.check__list { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 14px; }
.check__item { display: flex; align-items: center; gap: 10px; height: 44px; padding: 0 12px; border-radius: 12px; background: var(--zf-surface); border: 1px solid var(--zf-line); font-size: 14px; color: var(--zf-text); text-align: left; transition: border-color var(--zf-dur-hover), background-color var(--zf-dur-hover); }
.check__item:hover { border-color: var(--zf-green-300); }
.check__box { display: grid; place-items: center; width: 20px; height: 20px; flex: none; border-radius: 6px; border: 1.5px solid var(--zf-line-2); color: transparent; transition: all var(--zf-dur-pop) var(--zf-ease-spring); }
.check__box svg { width: 13px; height: 13px; }
.check__item.is-on { background: var(--zf-green-50); border-color: var(--zf-green-200); }
.check__item.is-on .check__box { background: var(--zf-green-600); border-color: var(--zf-green-600); color: #fff; transform: scale(1.08); }
.check__item.is-on span:last-child { color: var(--zf-text-2); text-decoration: line-through; text-decoration-color: var(--zf-green-300); }
.strategy { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 16px; }
.strategy div { padding: 16px; border-radius: 16px; border: 1px solid var(--zf-line); background: var(--zf-surface); }
.strategy b { font: 700 11px var(--zf-mono); letter-spacing: .1em; color: var(--zf-green-700); }
.strategy h4 { margin-top: 6px; font-size: 15px; }
.strategy p { margin-top: 4px; font-size: 13px !important; line-height: 1.6 !important; }

/* ---------------- 认证页 ---------------- */
.auth { display: grid; grid-template-columns: 1.05fr 1fr; min-height: calc(100vh - 76px); }
.auth__brand { position: relative; overflow: hidden; display: flex; flex-direction: column; justify-content: center; padding: 64px clamp(48px, 6vw, 112px); background: linear-gradient(160deg, #0B1F33, #0E2A45 60%, #0B2236); color: #A9BCCD; }
.auth__brand::before { content: ""; position: absolute; inset: 0; background: radial-gradient(600px 400px at 20% 10%, rgba(47,190,121,.22), transparent 70%), radial-gradient(500px 360px at 90% 90%, rgba(43,120,240,.14), transparent 70%); }
.auth__brand > * { position: relative; }
.auth__brand h1 { margin-top: 18px; font-size: 42px; color: #fff; line-height: 1.25; }
.auth__brand > p { margin-top: 14px; max-width: 460px; font-size: 16px; }
.auth__feats { display: grid; gap: 12px; margin-top: 36px; max-width: 460px; }
.auth__feat { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: 16px; background: rgba(255,255,255,.05); border: 1px solid rgba(255,255,255,.08); font-size: 14px; color: #DCE6EF; }
.auth__feat .tile__ico { --ac: #2FBE79; width: 38px; height: 38px; background: rgba(47,190,121,.12); border-color: rgba(47,190,121,.25); color: #7FD7AA; }
.auth__feat small { display: block; font-size: 12.5px; color: #8DA2B6; }
.auth__keys { position: relative; height: 150px; margin-top: 40px; max-width: 460px; }
.auth__keys .keycard { position: absolute; left: 0; top: 0; width: 360px; padding: 16px 18px; transform: none; }
.auth__keys .keycard:nth-child(2) { left: 60px; top: 46px; }
.auth__form { display: grid; place-items: center; padding: 48px; }
.auth__card { width: 440px; padding: 36px; }
.auth__card h2 { font-size: 26px; }
.auth__card > p { margin-top: 6px; font-size: 14px; color: var(--zf-text-3); }
.auth__card form { display: grid; gap: 16px; margin-top: 24px; }
.auth__card .zf-seg { display: flex; margin-top: 22px; }
.auth__card .zf-seg button { flex: 1; }
.codebtn { position: absolute; right: 6px; top: 6px; height: 34px; padding: 0 12px; border-radius: 10px; font-size: 13px; font-weight: 600; color: var(--zf-green-700); background: var(--zf-green-50); transition: background-color var(--zf-dur-hover); }
.codebtn:hover { background: var(--zf-green-100); }
.codebtn[disabled] { color: var(--zf-text-3); background: var(--zf-ink-50); }
.pwmeter { display: flex; gap: 4px; margin-top: 2px; }
.pwmeter i { flex: 1; height: 4px; border-radius: 4px; background: var(--zf-ink-100); transition: background-color var(--zf-dur-pop); }

/* ---------------- 会员中心 ---------------- */
.mem { display: grid; grid-template-columns: 232px minmax(0, 1fr); gap: 32px; align-items: start; padding: 40px 0 112px; }
.mem__nav { position: sticky; top: 92px; padding: 14px; border-radius: 20px; background: rgb(var(--zf-surface-rgb) / .65); border: 1px solid rgb(var(--zf-shade-rgb) / .06); }
.mem__user { display: flex; align-items: center; gap: 12px; padding: 6px 6px 16px; margin-bottom: 8px; border-bottom: 1px solid var(--zf-line); }
.mem__avatar { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 14px; background: linear-gradient(135deg, var(--zf-green-500), var(--zf-green-700)); color: #fff; font-weight: 700; }
.mem__user b { display: block; font-size: 14.5px; color: var(--zf-text); }
.mem__user small { font-size: 12px; color: var(--zf-text-3); }
.mem__nav a { position: relative; display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 12px; border-radius: 12px; font-size: 14px; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.mem__nav a svg { width: 17px; height: 17px; }
.mem__nav a:hover { background: rgb(var(--zf-shade-rgb) / .05); color: var(--zf-text); }
.mem__nav a.is-on { background: var(--zf-surface); color: var(--zf-green-800); font-weight: 600; box-shadow: var(--zf-sh-1); }
.mem__nav a .cnt { margin-left: auto; font-size: 12px; color: var(--zf-text-3); }
.mem__body { display: grid; gap: 24px; min-width: 0; }
.mem__sec { scroll-margin-top: 96px; }
.mem__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; margin-bottom: 14px; }
.mem__head h2 { font-size: 22px; }
.mem__head p { margin-top: 4px; font-size: 13.5px; color: var(--zf-text-3); }
.keyrow { display: grid; grid-template-columns: 44px minmax(0, 1.2fr) minmax(0, 1.4fr) 150px 120px auto; align-items: center; gap: 16px; padding: 16px 18px; border-bottom: 1px solid var(--zf-line); transition: background-color var(--zf-dur-hover); }
.keyrow:last-child { border-bottom: 0; }
.keyrow:hover { background: rgba(0,144,74,.03); }
.keyrow .mchip__flag { width: 44px; height: 44px; border-radius: 13px; font-size: 13px; }
.keyrow__n b { display: block; font-size: 15px; color: var(--zf-text); }
.keyrow__n small { font-size: 12.5px; color: var(--zf-text-3); }
.keyrow__k { display: flex; align-items: center; gap: 6px; height: 40px; padding: 0 4px 0 12px; border-radius: 10px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font: 500 13px var(--zf-mono); color: var(--zf-text); min-width: 0; }
.keyrow__k span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.keyrow__k .zf-iconbtn { width: 32px; height: 32px; }
.keyrow__k .zf-iconbtn svg { width: 15px; height: 15px; }
.usage { font-size: 12.5px; color: var(--zf-text-3); }
.usage b { color: var(--zf-text); font-variant-numeric: tabular-nums; }
.usage__bar { height: 6px; margin-top: 6px; border-radius: 6px; background: var(--zf-ink-100); overflow: hidden; }
.usage__bar i { display: block; height: 100%; border-radius: inherit; background: var(--zf-green-500); }
.usage__bar i.is-warn { background: var(--zf-warning); }
.keyrow.is-off { opacity: .55; }
.keyrow.is-off .mchip__flag { filter: grayscale(1); }
.rbar { display: grid; grid-template-columns: 110px 1fr 28px; align-items: center; gap: 10px; height: 34px; font-size: 13.5px; color: var(--zf-text-2); }
.rbar__t { height: 8px; border-radius: 8px; background: var(--zf-ink-100); overflow: hidden; }
.rbar__t i { display: block; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--zf-green-500), var(--zf-green-300)); }
.rbar b { text-align: right; color: var(--zf-text); }
.arow .mchip__flag { flex: none; }
.pside--row { position: static; grid-template-columns: repeat(3, 1fr); align-items: start; margin-top: 24px; }
.sym-tabs { margin-top: 28px; }
.sym-tabs button { height: 34px; padding: 0 16px; }

/* 交易日历：月历热力与时间线 */
.mcal { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.mcal__w { display: grid; place-items: center; height: 26px; font-size: 11.5px; font-weight: 600; color: var(--zf-text-3); }
.mcal__d { display: grid; place-items: center; aspect-ratio: 1; border-radius: 10px; font-size: 13px; font-variant-numeric: tabular-nums; color: var(--zf-text-2); background: var(--zf-surface-2); transition: transform var(--zf-dur-pop) var(--zf-ease-spring), box-shadow var(--zf-dur-hover); }
.mcal__d:hover { transform: scale(1.08); box-shadow: var(--zf-sh-2); }
.mcal__d.lv1 { background: rgba(229,72,77,.10); color: #B8323A; }
.mcal__d.lv2 { background: rgba(229,72,77,.22); color: #A82B33; font-weight: 600; }
.mcal__d.lv3 { background: #E5484D; color: #fff; font-weight: 700; }
.mcal__d.is-today { box-shadow: 0 0 0 2px var(--zf-green-600); color: var(--zf-green-800); font-weight: 700; }
.mcal__legend { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; font-size: 11.5px; color: var(--zf-text-3); }
.mcal__legend span { display: inline-flex; align-items: center; gap: 5px; }
.mcal__legend i { width: 10px; height: 10px; border-radius: 3px; }
.mcal__legend .lv1 { background: rgba(229,72,77,.18); } .mcal__legend .lv2 { background: rgba(229,72,77,.4); } .mcal__legend .lv3 { background: #E5484D; }
.tl { display: grid; gap: 14px; }
.tl__day { display: grid; grid-template-columns: 56px 1fr; gap: 10px; }
.tl__date b { display: block; font-size: 13.5px; color: var(--zf-text); }
.tl__date small { font-size: 12px; color: var(--zf-text-3); }
.tl__items { display: grid; gap: 6px; }
.tl__it { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: center; gap: 8px; padding: 7px 8px; border-radius: 12px; border: 1px solid var(--zf-line); background: var(--zf-surface); text-align: left; transition: border-color var(--zf-dur-hover), transform var(--zf-dur-pop) var(--zf-ease-out); }
.tl__it:hover { border-color: var(--zf-line-2); transform: translateX(2px); }
.tl__it .mchip__flag { width: 28px; height: 28px; border-radius: 8px; }
.tl__it b { display: block; font-size: 13px; color: var(--zf-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tl__it small { display: block; font-size: 11.5px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tl__it .pill { height: 20px; padding: 0 7px; font-size: 11px; }
.tl__day { grid-template-columns: 64px 1fr; }
.tl__date b { white-space: nowrap; }
.dtable td, .dtable th { padding-left: 14px; padding-right: 14px; }

/* 价格页 */
.rules { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-top: 32px; }
.rule { --ac: var(--zf-green-600); position: relative; overflow: hidden; isolation: isolate; padding: 20px 22px; border-radius: 20px; background: rgb(var(--zf-surface-rgb) / .78); border: 1px solid rgb(var(--zf-surface-rgb) / .95); box-shadow: 0 1px 2px rgba(16,42,67,.04), 0 18px 40px -28px rgba(16,42,67,.24); }
.rule::before { content: ""; position: absolute; z-index: -1; right: -60px; top: -70px; width: 180px; height: 180px; border-radius: 50%; background: radial-gradient(closest-side, color-mix(in srgb, var(--ac) 14%, transparent), transparent); }
.rule .tile__ico { --ac: inherit; }
.rule b { display: block; margin-top: 14px; font-size: 16px; color: var(--zf-text); }
.rule p { margin-top: 4px; font-size: 13.5px; color: var(--zf-text-3); }
.rule p span { font-weight: 700; color: var(--zf-text); }
.plist { display: grid; gap: 16px; }
.pgrp { overflow: hidden; }
.pgrp__head { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--zf-line); }
.pgrp__head h3 { display: flex; align-items: center; gap: 10px; font-size: 17px; }
.pgrp__head h3::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--ac); box-shadow: 0 0 0 4px color-mix(in srgb, var(--ac) 16%, transparent); }
.pgrp__head span { font-size: 12.5px; color: var(--zf-text-3); }
.prow { position: relative; display: grid; grid-template-columns: 36px minmax(0, 1fr) 130px 170px 40px; align-items: center; gap: 14px; padding: 12px 20px; border-bottom: 1px solid var(--zf-line); cursor: pointer; transition: background-color var(--zf-dur-hover); }
.prow:last-child { border-bottom: 0; }
.prow::before { content: ""; position: absolute; left: 0; top: 10px; bottom: 10px; width: 3px; border-radius: 3px; background: var(--zf-green-600); transform: scaleY(0); transition: transform var(--zf-dur-pop) var(--zf-ease-out); }
.prow:hover { background: rgba(0,144,74,.035); }
.prow.is-on { background: var(--zf-tint); }
.prow:hover::before, .prow.is-on::before { transform: scaleY(1); }
.prow .mchip__flag { width: 36px; height: 36px; }
.prow.is-on .mchip__flag { background: var(--zf-green-600); border-color: var(--zf-green-600); color: #fff; }
.prow__n b { display: block; font-size: 14.5px; color: var(--zf-text); }
.prow__n small { display: block; font-size: 12px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.prow__c { font-size: 13.5px; color: var(--zf-text); }
.prow__c small, .prow__p small { font-size: 12px; color: var(--zf-text-3); }
.prow__p { text-align: right; }
.prow__p b { font-size: 16px; color: var(--zf-text); }
.prow__p em { display: block; font-style: normal; font-size: 11.5px; color: var(--zf-text-3); }
.prow.is-ping { animation: rping 1300ms var(--zf-ease-out); }
.psum .sum__ent { display: none; }
.sum__item.is-static { animation: none; }
.incl { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.incl__i { padding: 22px; border-radius: 20px; background: var(--zf-surface); border: 1px solid var(--zf-line); transition: transform var(--zf-dur-pop) var(--zf-ease-out), box-shadow var(--zf-dur-pop); }
.incl__i:hover { transform: translateY(-3px); box-shadow: var(--zf-sh-2); }
.incl__i b { display: block; margin-top: 14px; font-size: 16px; color: var(--zf-text); }
.incl__i p { margin-top: 4px; font-size: 13.5px; color: var(--zf-text-3); }

/* 会员中心补充 */
.keyadd { display: flex; align-items: center; gap: 14px; padding: 16px 18px; border-top: 1px dashed var(--zf-line-2); color: var(--zf-green-700); transition: background-color var(--zf-dur-hover); }
.keyadd:hover { background: var(--zf-green-50); }
.keyadd > svg { width: 44px; height: 44px; padding: 12px; border-radius: 13px; border: 1.5px dashed var(--zf-green-300); }
.keyadd b { display: block; font-size: 14.5px; }
.keyadd small { font-size: 12.5px; color: var(--zf-text-3); }
.keyrow__n small .st { margin-right: 4px; }
.use__top { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.use__top div { padding: 12px 14px; border-radius: 14px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); }
.use__top span { display: block; font-size: 12px; color: var(--zf-text-3); }
.use__top b { display: block; margin-top: 2px; font-size: 20px; color: var(--zf-text); }
.set { padding: 4px 22px; }
.set .perm:last-child { border-bottom: 0; }
.mem .dtable th, .mem__body .dtable th { top: 64px; }

/* =====================================================================
   会员中心（多页）：导航分组、提醒条、批量操作、付款窗、调试台、活动时间线
   ===================================================================== */
.mem__nav .mnav__grp { padding: 12px 12px 4px; font-size: 11.5px; font-weight: 600; letter-spacing: .08em; color: var(--zf-text-3); }
.mem__nav a .badge { margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--zf-ink-100); color: var(--zf-text-2); font-size: 11.5px; font-weight: 700; line-height: 20px; text-align: center; }
.mem__nav a .badge--warn { background: rgba(224,138,0,.14); color: #A86400; }
.mem__nav a .badge--dot { min-width: 8px; width: 8px; height: 8px; padding: 0; background: var(--zf-warning); }
.mem__nav .mnav__help { display: grid; gap: 4px; margin-top: 10px; padding: 14px; border-radius: 14px; background: var(--zf-tint); border: 1px solid var(--zf-green-100); font-size: 12.5px; color: var(--zf-text-2); }
.mem__nav .mnav__help b { font-size: 13.5px; color: var(--zf-text); }
.mem__crumb { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--zf-text-3); margin-bottom: 4px; }
.mem__title { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; }
.mem__title h1 { font-size: 30px; letter-spacing: -.01em; }
.mem__title p { margin-top: 6px; font-size: 14px; color: var(--zf-text-3); }
.mem__title .acts { display: flex; gap: 10px; flex: none; }

.alertbar { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-radius: 16px; border: 1px solid rgba(224,138,0,.25); background: rgba(224,138,0,.07); font-size: 14px; color: var(--zf-text); }
.alertbar > [data-icon] svg { width: 20px; height: 20px; color: var(--zf-warning); }
.alertbar small { display: block; font-size: 12.5px; color: var(--zf-text-3); }
.alertbar .zf-btn { margin-left: auto; }
.alertbar--ok { border-color: var(--zf-green-200); background: var(--zf-tint); }
.alertbar--ok > [data-icon] svg { color: var(--zf-green-600); }

.uidcard { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 18px; padding: 22px 24px; }
.uidcard .mem__avatar { width: 56px; height: 56px; border-radius: 18px; font-size: 20px; }
.uidcard h2 { font-size: 20px; }
.uidcard p { margin-top: 4px; font-size: 13.5px; color: var(--zf-text-3); }
.uidcard .chips { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
.mgrid2 { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 24px; align-items: start; }
.mlist { display: grid; }
.mlist__row { display: flex; align-items: center; gap: 12px; padding: 12px 20px; border-bottom: 1px solid var(--zf-line); font-size: 14px; color: var(--zf-text); }
.mlist__row:last-child { border-bottom: 0; }
.mlist__row small { display: block; font-size: 12px; color: var(--zf-text-3); }
.mlist__row .end { margin-left: auto; text-align: right; font-variant-numeric: tabular-nums; }
.mcard__h { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--zf-line); }
.mcard__h h3 { font-size: 16px; display: flex; align-items: center; gap: 8px; }
.mcard__h h3 svg { width: 17px; height: 17px; color: var(--zf-green-600); }

/* Key 与订阅表 */
.ksel { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 6px; border: 1.5px solid var(--zf-line-2); color: transparent; transition: all var(--zf-dur-pop) var(--zf-ease-spring); flex: none; }
.ksel svg { width: 13px; height: 13px; }
.is-picked .ksel, .ksel.is-on { background: var(--zf-green-600); border-color: var(--zf-green-600); color: #fff; }
.ktable .keyrow { grid-template-columns: 20px 44px minmax(0, 1.1fr) minmax(0, 1.3fr) 130px 120px 110px 40px; }
.ktable .keyrow.is-picked { background: var(--zf-tint); }
.kexp b { display: block; font-size: 14px; color: var(--zf-text); font-variant-numeric: tabular-nums; }
.kexp small { font-size: 12px; color: var(--zf-text-3); }
.kexp small.warn { color: #A86400; font-weight: 600; }
.kexp small.bad { color: var(--zf-danger); font-weight: 600; }
.batchbar { position: sticky; bottom: 20px; z-index: 20; display: flex; align-items: center; gap: 16px; margin-top: 16px; padding: 12px 12px 12px 20px; border-radius: 18px; background: rgba(11,31,51,.92); color: #A9BCCD; box-shadow: 0 24px 50px -20px rgba(11,31,51,.5); transform: translateY(20px); opacity: 0; pointer-events: none; transition: transform var(--zf-dur-layer) var(--zf-ease-out), opacity var(--zf-dur-pop); }
.batchbar.is-on { transform: none; opacity: 1; pointer-events: auto; }
.batchbar b { color: #fff; }
.batchbar .zf-btn { margin-left: auto; }

/* 时长选择 */
.months { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.months button { position: relative; padding: 12px 10px; border-radius: 14px; border: 1px solid var(--zf-line-2); background: var(--zf-surface); text-align: center; transition: all var(--zf-dur-hover); }
.months button b { display: block; font-size: 16px; color: var(--zf-text); }
.months button small { font-size: 11.5px; color: var(--zf-text-3); }
.months button:hover { border-color: var(--zf-green-300); }
.months button.is-on { border-color: var(--zf-green-500); background: var(--zf-tint); box-shadow: 0 0 0 3px rgba(0,144,74,.12); }
.months button .off { position: absolute; top: -8px; right: 8px; height: 18px; padding: 0 6px; border-radius: 99px; background: var(--zf-green-600); color: #fff; font-size: 10.5px; font-weight: 700; line-height: 18px; }

/* USDT 付款窗 */
.pay { display: grid; grid-template-columns: 168px 1fr; gap: 20px; align-items: start; }
.pay__qr { position: relative; width: 168px; height: 168px; padding: 10px; border-radius: 16px; background: #fff; border: 1px solid var(--zf-line); }
.pay__qr svg { width: 100%; height: 100%; }
.pay__qr span { position: absolute; left: 50%; top: 50%; display: grid; place-items: center; width: 36px; height: 36px; margin: -18px 0 0 -18px; border-radius: 10px; background: #26A17B; color: #fff; font: 800 15px var(--zf-sans); box-shadow: 0 0 0 4px #fff; }
.pay__amt { font-size: 32px; font-weight: 700; color: var(--zf-text); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.pay__amt small { margin-left: 6px; font-size: 15px; color: var(--zf-text-2); }
.pay__net { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 9px; border-radius: 99px; background: rgba(38,161,123,.12); color: #1E8A69; font-size: 12px; font-weight: 700; }
.pay__addr { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding: 8px 8px 8px 12px; border-radius: 12px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font: 500 12.5px var(--zf-mono); color: var(--zf-text); word-break: break-all; }
.pay__addr .zf-iconbtn { flex: none; width: 32px; height: 32px; }
.pay__state { display: flex; align-items: center; gap: 12px; margin-top: 18px; padding: 14px 16px; border-radius: 14px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font-size: 13.5px; color: var(--zf-text-2); }
.pay__state b { color: var(--zf-text); }
.pay__state .cd { margin-left: auto; font: 700 16px var(--zf-mono); color: var(--zf-text); }
.pay__state.is-ok { background: var(--zf-tint); border-color: var(--zf-green-200); }
.pay__steps { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 14px; }
.pay__steps div { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--zf-line); font-size: 12.5px; color: var(--zf-text-3); }
.pay__steps i { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--zf-ink-100); font: 700 11px var(--zf-sans); font-style: normal; color: var(--zf-text-3); transition: all var(--zf-dur-layer) var(--zf-ease-spring); }
.pay__steps div.is-on { color: var(--zf-text); border-color: var(--zf-green-200); }
.pay__steps div.is-on i { background: var(--zf-green-600); color: #fff; }

/* 活动记录 */
.lday { padding: 6px 20px 2px; font-size: 12px; font-weight: 600; letter-spacing: .06em; color: var(--zf-text-3); background: var(--zf-surface-2); border-bottom: 1px solid var(--zf-line); }
.litem { display: grid; grid-template-columns: 36px minmax(0, 1fr) auto; align-items: center; gap: 14px; padding: 12px 20px; border-bottom: 1px solid var(--zf-line); animation: mkin 360ms var(--zf-ease-out) both; animation-delay: calc(var(--d, 0) * 24ms); }
.litem .tile__ico { width: 36px; height: 36px; border-radius: 11px; }
.litem .tile__ico svg { width: 17px; height: 17px; }
.litem b { display: block; font-size: 14px; color: var(--zf-text); }
.litem small { display: block; font-size: 12.5px; color: var(--zf-text-3); }
.litem .end { text-align: right; font-size: 12.5px; color: var(--zf-text-3); font-variant-numeric: tabular-nums; }
.dates { display: flex; align-items: center; gap: 8px; }
.dates .zf-input { width: 150px; height: 40px; font-size: 13.5px; }

/* WS 调试工具 */
.wsgrid { display: grid; grid-template-columns: 380px minmax(0, 1fr); gap: 24px; align-items: stretch; }
.wsstep { position: relative; display: grid; grid-template-columns: 32px 1fr; gap: 12px; padding: 18px; border-bottom: 1px solid var(--zf-line); }
.wsstep:last-child { border-bottom: 0; }
.wsstep .n { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%; background: var(--zf-ink-100); color: var(--zf-text-3); font: 700 13px var(--zf-sans); transition: all var(--zf-dur-layer) var(--zf-ease-spring); }
.wsstep.is-done .n { background: var(--zf-green-600); color: #fff; }
.wsstep.is-cur .n { background: var(--zf-tint); color: var(--zf-green-700); box-shadow: 0 0 0 2px var(--zf-green-400); }
.wsstep h4 { font-size: 15px; }
.wsstep p { margin-top: 2px; font-size: 12.5px; color: var(--zf-text-3); }
.wsstep .row { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; align-items: center; }
.wsstep .zf-input { height: 38px; font-size: 13px; font-family: var(--zf-mono); }
.term { display: flex; flex-direction: column; min-height: 560px; border-radius: 22px; overflow: hidden; background: #0B1F33; border: 1px solid rgba(255,255,255,.06); box-shadow: 0 30px 60px -30px rgba(0,0,0,.45); }
.term__bar { display: flex; align-items: center; gap: 10px; height: 52px; padding: 0 12px 0 18px; border-bottom: 1px solid rgba(255,255,255,.07); color: #7F95AA; font-size: 13px; }
.term__bar b { color: #fff; font-weight: 600; }
.term__bar .sp { margin-left: auto; display: flex; gap: 8px; }
.term__body { flex: 1; overflow: auto; max-height: 520px; padding: 12px 0; font: 12.5px/1.7 var(--zf-mono); color: #C9D5E1; }
.term__line { display: grid; grid-template-columns: 96px 54px 1fr; gap: 10px; padding: 2px 18px; animation: zf-msg-in 260ms var(--zf-ease-out) both; }
.term__line .t { color: #5C7690; }
.term__line .d { font-weight: 700; }
.term__line .d--out { color: #9CC9FF; } .term__line .d--in { color: #7FD7AA; } .term__line .d--err { color: #FF9E9E; } .term__line .d--sys { color: #F6C177; }
.term__line code { white-space: pre-wrap; word-break: break-all; }
.term__empty { display: grid; place-items: center; height: 100%; min-height: 400px; color: #5C7690; font-size: 13px; text-align: center; }

/* 账户设置 */
.setgrid { display: grid; gap: 24px; }
.setsec { padding: 6px 24px; }
.setsec h3 { padding: 18px 0 4px; font-size: 16px; }
.linked { display: flex; align-items: center; gap: 12px; }
.linked .logo { display: grid; place-items: center; width: 36px; height: 36px; border-radius: 11px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font: 800 14px var(--zf-sans); color: var(--zf-text); }
.danger { border-color: rgba(229,72,77,.22) !important; }
.danger h3 { color: var(--zf-danger); }
.alertbar > svg { width: 20px; height: 20px; flex: none; color: var(--zf-warning); }
.alertbar--ok > svg { color: var(--zf-green-600); }
.callout > svg { width: 18px; height: 18px; flex: none; margin-top: 3px; color: var(--zf-green-600); }
.callout--warn > svg { color: var(--zf-warning); }
.term__empty svg { width: 30px; height: 30px; margin: 0 auto 8px; color: #3B5878; }
.pay__net svg { width: 13px; height: 13px; }
.mem__title .acts .zf-btn svg, .wsstep .zf-btn svg { width: 16px; height: 16px; }
.pay__state.is-ok .zf-nodes { display: none; }
.mem .prow, .mem__body .prow { grid-template-columns: 36px minmax(0, 1fr) 110px 100px 132px; }
.mem .prow > .zf-switch, .mem .prow > .zf-btn, .mem__body .prow > .zf-switch, .mem__body .prow > .zf-btn { justify-self: end; }
.mem .prow > .zf-btn, .mem__body .prow > .zf-btn { white-space: nowrap; }

/* =====================================================================
   开发文档（多页）：左侧目录 / 正文 / 右侧接口摘要
   ===================================================================== */
.dlay { display: grid; grid-template-columns: 248px minmax(0, 1fr) 272px; gap: 32px; align-items: start; padding: 36px 0 112px; }
.dlay--wide { grid-template-columns: 248px minmax(0, 1fr); }
.dside { position: sticky; top: 88px; display: grid; gap: 12px; }
.dside__search { display: flex; align-items: center; gap: 10px; height: 42px; padding: 0 10px 0 14px; border-radius: 14px; border: 1px solid var(--zf-line-2); background: var(--zf-surface); color: var(--zf-text-3); font-size: 13.5px; text-align: left; transition: border-color var(--zf-dur-hover); }
.dside__search:hover { border-color: var(--zf-green-300); }
.dside__search svg { width: 16px; height: 16px; }
.dside__search .zf-kbd { margin-left: auto; }
.dside nav { padding: 10px; border-radius: 20px; background: rgb(var(--zf-surface-rgb) / .65); border: 1px solid rgb(var(--zf-shade-rgb) / .06); -webkit-backdrop-filter: blur(8px); backdrop-filter: blur(8px); }
.dside__grp { padding: 12px 10px 6px; font-size: 11.5px; font-weight: 600; letter-spacing: .08em; color: var(--zf-text-3); }
.dside nav a { position: relative; display: flex; align-items: center; gap: 10px; height: 38px; padding: 0 10px; border-radius: 11px; font-size: 14px; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.dside nav a svg { width: 16px; height: 16px; flex: none; color: var(--zf-text-3); transition: color var(--zf-dur-hover); }
.dside nav a:hover { background: rgb(var(--zf-shade-rgb) / .05); color: var(--zf-text); }
.dside nav a.is-on { background: var(--zf-surface); color: var(--zf-green-800); font-weight: 600; box-shadow: var(--zf-sh-1); }
.dside nav a.is-on svg { color: var(--zf-green-600); }
.dside nav a.is-on::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px; border-radius: 3px; background: var(--zf-green-600); }
.dside__status { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-radius: 16px; background: var(--zf-tint); border: 1px solid var(--zf-green-100); font-size: 12.5px; color: var(--zf-text-2); }
.dside__status b { display: block; font-size: 13.5px; color: var(--zf-text); }

.dmain { min-width: 0; display: grid; gap: 20px; }
.dhead { padding: 4px 0 4px; }
.dhead .crumb { margin-bottom: 12px; }
.dhead h1 { display: flex; align-items: center; gap: 14px; font-size: 36px; letter-spacing: -.02em; }
.dhead h1 .method { margin: 0; height: 26px; min-width: 52px; font-size: 12px; border-radius: 8px; }
.dhead p { margin-top: 10px; max-width: 720px; font-size: 16.5px; color: var(--zf-text-2); }
.dtabs { position: sticky; top: 76px; z-index: 5; display: flex; gap: 4px; padding: 5px; border-radius: 14px; background: rgb(var(--zf-surface-rgb) / .82); border: 1px solid var(--zf-line); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); box-shadow: var(--zf-sh-1); }
.dtabs a { position: relative; z-index: 1; height: 34px; padding: 0 14px; border-radius: 10px; font-size: 13.5px; font-weight: 600; line-height: 34px; color: var(--zf-text-3); transition: color var(--zf-dur-hover), background-color var(--zf-dur-hover); }
.dtabs a:hover { color: var(--zf-text); background: rgb(var(--zf-shade-rgb) / .04); }
.dtabs a.is-on { color: var(--zf-green-800); background: var(--zf-tint); }
.dmain .dsec { margin: 0; padding: 30px 34px; }
.dmain .dsec h2 { font-size: 22px; }
.dmain .dsec > p:first-of-type { margin-top: 8px; }
.ucases { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.ucases span { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; border-radius: 99px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-text-2); }
.ucases svg { width: 14px; height: 14px; color: var(--zf-green-600); }

.drail { position: sticky; top: 88px; display: grid; gap: 16px; }
.dsum { padding: 20px; }
.dsum h4 { font-size: 14px; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
.dsum h4 svg { width: 16px; height: 16px; color: var(--zf-green-600); }
.dsum dl { display: grid; gap: 10px; margin: 0; }
.dsum dl div { display: grid; gap: 2px; padding-bottom: 10px; border-bottom: 1px dashed var(--zf-line); }
.dsum dl div:last-child { border-bottom: 0; padding-bottom: 0; }
.dsum dt { font-size: 12px; color: var(--zf-text-3); }
.dsum dd { margin: 0; font-size: 13.5px; font-weight: 600; color: var(--zf-text); word-break: break-all; }
.dsum dd code { font: 500 12.5px var(--zf-mono); }
.dsum .zf-btn { width: 100%; margin-top: 14px; }
.drel a { display: flex; align-items: center; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--zf-line); font-size: 13.5px; color: var(--zf-text); }
.drel a:last-child { border-bottom: 0; }
.drel a:hover { color: var(--zf-green-700); }
.drel a .method { margin-left: 0; }
.drel a svg { width: 15px; height: 15px; margin-left: auto; color: var(--zf-text-3); }

.dnext { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.dnext a { display: grid; gap: 4px; padding: 18px 20px; border-radius: 18px; border: 1px solid var(--zf-line); background: var(--zf-surface); transition: border-color var(--zf-dur-hover), transform var(--zf-dur-pop) var(--zf-ease-out), box-shadow var(--zf-dur-pop); }
.dnext a:hover { border-color: var(--zf-green-300); transform: translateY(-2px); box-shadow: var(--zf-sh-2); }
.dnext small { font-size: 12px; color: var(--zf-text-3); }
.dnext b { font-size: 15.5px; color: var(--zf-text); }
.dnext a:last-child { text-align: right; }

/* 文档总览 */
.dov-hero { position: relative; overflow: hidden; padding: 34px 36px; border-radius: 26px; background: linear-gradient(135deg, #0B1F33, #12385A 70%); color: #A9BCCD; }
.dov-hero::before { content: ""; position: absolute; inset: 0; background: radial-gradient(500px 300px at 85% 0%, rgba(47,190,121,.28), transparent 70%); }
.dov-hero > * { position: relative; }
.dov-hero h1 { margin-top: 12px; font-size: 38px; color: #fff; }
.dov-hero p { margin-top: 10px; max-width: 600px; font-size: 16px; }
.dov-hero .acts { display: flex; gap: 10px; margin-top: 24px; }
.dov-hero .base { display: flex; gap: 24px; margin-top: 26px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.08); font-size: 13px; }
.dov-hero .base b { display: block; margin-top: 2px; font: 500 13.5px var(--zf-mono); color: #fff; }
.dcards { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; }
.dcards--3 { grid-template-columns: repeat(3, 1fr); }
.dcard { --ac: var(--zf-green-600); position: relative; overflow: hidden; display: grid; gap: 8px; padding: 22px; border-radius: 20px; background: var(--zf-surface); border: 1px solid var(--zf-line); transition: transform var(--zf-dur-pop) var(--zf-ease-out), box-shadow var(--zf-dur-pop), border-color var(--zf-dur-hover); }
.dcard:hover { transform: translateY(-3px); box-shadow: var(--zf-sh-2); border-color: color-mix(in srgb, var(--ac) 30%, var(--zf-line)); }
.dcard .top { display: flex; align-items: center; gap: 12px; }
.dcard .tile__ico { width: 40px; height: 40px; }
.dcard b { font-size: 16px; color: var(--zf-text); }
.dcard p { font-size: 13.5px; color: var(--zf-text-3); line-height: 1.65; }
.dcard code { justify-self: start; padding: 3px 8px; border-radius: 7px; background: var(--zf-surface-2); border: 1px solid var(--zf-line); font: 500 12px var(--zf-mono); color: var(--zf-text-2); }
.dcard .go { position: absolute; right: 18px; top: 22px; color: var(--zf-text-3); transition: transform var(--zf-dur-pop) var(--zf-ease-out), color var(--zf-dur-hover); }
.dcard .go svg { width: 16px; height: 16px; }
.dcard:hover .go { transform: translateX(3px); color: var(--zf-green-600); }
.dgrp-title { display: flex; align-items: baseline; justify-content: space-between; margin: 8px 0 -4px; }
.dgrp-title h2 { font-size: 20px; }
.dgrp-title small { font-size: 13px; color: var(--zf-text-3); }

/* API Explorer */
.exp { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 20px; align-items: start; }
.exp__form { padding: 22px; display: grid; gap: 14px; }
.exp__form h3, .exp__res h3 { font-size: 16px; display: flex; align-items: center; gap: 8px; }
.exp__form h3 svg, .exp__res h3 svg { width: 17px; height: 17px; color: var(--zf-green-600); }
.exp__ep { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; }
.exp__ep button { display: flex; align-items: center; gap: 8px; padding: 10px 12px; border-radius: 12px; border: 1px solid var(--zf-line-2); background: var(--zf-surface); font-size: 13.5px; color: var(--zf-text); text-align: left; transition: all var(--zf-dur-hover); }
.exp__ep button .method { margin: 0; }
.exp__ep button:hover { border-color: var(--zf-green-300); }
.exp__ep button.is-on { border-color: var(--zf-green-500); background: var(--zf-tint); box-shadow: 0 0 0 3px rgba(0,144,74,.12); }
.exp__fields { display: grid; gap: 12px; }
.exp__fields .zf-label small { margin-left: 6px; font-weight: 400; color: var(--zf-text-3); }
.exp__fields .zf-input { height: 42px; font-size: 14px; font-family: var(--zf-mono); }
.exp__key { position: relative; }
.exp__key .zf-iconbtn { position: absolute; right: 4px; top: 4px; width: 34px; height: 34px; }
.exp__preview { padding: 12px 14px; border-radius: 12px; background: var(--zf-ink-900); color: #C9D5E1; font: 12.5px/1.7 var(--zf-mono); word-break: break-all; }
.exp__preview b { color: #7FD7AA; }
.exp__acts { display: flex; gap: 10px; }
.exp__res { overflow: hidden; }
.exp__res .head { display: flex; align-items: center; gap: 10px; padding: 16px 20px; border-bottom: 1px solid var(--zf-line); }
.exp__res .head .sp { margin-left: auto; display: flex; gap: 8px; }
.exp__meta { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--zf-line); border-bottom: 1px solid var(--zf-line); }
.exp__meta div { padding: 12px 18px; background: var(--zf-surface); }
.exp__meta span { display: block; font-size: 12px; color: var(--zf-text-3); }
.exp__meta b { font-size: 16px; color: var(--zf-text); font-variant-numeric: tabular-nums; }
.exp__out { min-height: 380px; max-height: 560px; overflow: auto; margin: 0; padding: 18px 20px; background: var(--zf-ink-900); color: #C9D5E1; font: 12.5px/1.75 var(--zf-mono); white-space: pre; }
.exp__out .k { color: #7FD7AA; } .exp__out .s { color: #F6C177; } .exp__out .n { color: #9CC9FF; } .exp__out .b { color: #FF9E9E; }
.exp__wait { display: grid; place-items: center; min-height: 380px; text-align: center; color: #5C7690; font: 13px var(--zf-sans); white-space: normal; }
.exp__wait .zf-nodes { display: flex; justify-content: center; margin: 0 auto 12px; color: #2FBE79; }

/* r11：会员中心「开通市场」侧栏较窄，四档时长改为 2 × 2 */
.pside .months { grid-template-columns: repeat(2, 1fr); row-gap: 14px; }
.months button b { white-space: nowrap; }

/* =====================================================================
   r14（2026-11-04）：会员中心改为控制台布局
   全高侧栏 + 顶栏 + 内容区；不用官网导航、页脚和右侧客服栏（客服放进顶栏「帮助」）。
   品牌元素：墨蓝 + 品牌绿；Key 卡沿用首屏 Key 卡（kc-* 样式）。
   ===================================================================== */
body[data-shell="app"] { --app-side: 248px; --app-bg: #F4F7F5; background: var(--app-bg); }
[data-theme="dark"] body[data-shell="app"] { --app-bg: #0A1522; }
body[data-shell="app"] .zf-dock { display: none; }
body[data-shell="app"] .zf-chat { right: 24px; top: auto; bottom: 24px; transform-origin: right bottom; transform: translateY(16px) scale(.96); }
body[data-shell="app"] .zf-chat.is-open { transform: none; }
body[data-shell="app"] .proto-flag { left: auto; right: 20px; }

.app { display: grid; grid-template-columns: var(--app-side) minmax(0, 1fr); min-height: 100vh; }

/* 侧栏 */
.app__side { position: sticky; top: 0; height: 100vh; display: flex; flex-direction: column; padding: 18px 14px 14px; background: var(--zf-surface); border-right: 1px solid var(--zf-line); overflow-y: auto; }
.app__brand { display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 10px; margin-bottom: 14px; }
.app__brand img { height: 24px; width: auto; }
.app__tag { height: 22px; padding: 0 8px; border-radius: 6px; background: var(--zf-green-50); color: var(--zf-green-800); font-size: 11.5px; font-weight: 700; line-height: 22px; letter-spacing: .02em; }
.app__nav { display: grid; gap: 2px; }
.app__grp { padding: 16px 12px 6px; font-size: 11.5px; font-weight: 600; letter-spacing: .06em; color: var(--zf-text-3); }
.app__grp:first-child { padding-top: 4px; }
.app__nav a { position: relative; display: flex; align-items: center; gap: 11px; height: 38px; padding: 0 12px; border-radius: 10px; font-size: 14px; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.app__nav a svg { width: 17px; height: 17px; flex: none; color: var(--zf-text-3); transition: color var(--zf-dur-hover); }
.app__nav a:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.app__nav a.is-on { background: var(--zf-green-50); color: var(--zf-green-800); font-weight: 600; }
.app__nav a.is-on svg { color: var(--zf-green-600); }
.app__nav a.is-on::before { content: ""; position: absolute; left: -14px; top: 9px; bottom: 9px; width: 3px; border-radius: 0 3px 3px 0; background: var(--zf-green-600); }
.app__nav .badge { margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--zf-ink-100); color: var(--zf-text-2); font-size: 11.5px; font-weight: 700; line-height: 20px; text-align: center; }
.app__nav .badge--warn { background: rgba(224,138,0,.14); color: #A86400; }
.app__sidefoot { margin-top: auto; display: grid; gap: 6px; padding-top: 14px; border-top: 1px solid var(--zf-line); }
.app__home { display: flex; align-items: center; gap: 11px; height: 36px; padding: 0 12px; border-radius: 10px; font-size: 13.5px; color: var(--zf-text-2); }
.app__home svg { width: 16px; height: 16px; color: var(--zf-text-3); }
.app__home svg:last-child { margin-left: auto; width: 14px; height: 14px; }
.app__home:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.app__me { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px; border-radius: 12px; text-align: left; transition: background-color var(--zf-dur-hover); }
.app__me:hover, .app__me[aria-expanded="true"] { background: var(--zf-ink-50); }
.app__me .mem__avatar { width: 34px; height: 34px; border-radius: 10px; font-size: 14px; flex: none; }
.app__me-id { min-width: 0; flex: 1; }
.app__me-id b { display: block; font-size: 13px; color: var(--zf-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.app__me-id small { font-size: 11.5px; color: var(--zf-text-3); }
.app__me > svg { width: 15px; height: 15px; color: var(--zf-text-3); transform: rotate(180deg); }
.app__menu-me { display: flex; align-items: center; gap: 10px; padding: 8px 10px 6px; }
.app__menu-me .mem__avatar { width: 36px; height: 36px; border-radius: 11px; font-size: 14px; }
.app__menu-me b { display: block; font-size: 13.5px; color: var(--zf-text); }
.app__menu-me small { font-size: 12px; color: var(--zf-text-3); }

/* 顶栏 */
.app__main { min-width: 0; display: flex; flex-direction: column; }
.app__top { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 16px; height: 64px; padding: 0 32px; background: color-mix(in srgb, var(--app-bg) 82%, transparent); border-bottom: 1px solid var(--zf-line); -webkit-backdrop-filter: blur(14px) saturate(1.4); backdrop-filter: blur(14px) saturate(1.4); }
.app__crumb { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--zf-text-3); min-width: 0; }
.app__crumb a:hover { color: var(--zf-text); }
.app__crumb b { color: var(--zf-text); font-weight: 600; }
.app__crumb .zf-demo-chip { margin-left: 6px; }
.app__tools { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.app__search { display: inline-flex; align-items: center; gap: 10px; width: 280px; height: 38px; padding: 0 8px 0 12px; margin-right: 6px; border-radius: 10px; border: 1px solid var(--zf-line); background: var(--zf-surface); color: var(--zf-text-3); font-size: 13.5px; transition: border-color var(--zf-dur-hover); }
.app__search:hover { border-color: var(--zf-line-2); }
.app__search svg { width: 16px; height: 16px; }
.app__search .zf-kbd { margin-left: auto; }
.app__tools .zf-iconbtn { width: 38px; height: 38px; border-radius: 10px; }
.app__tools .zf-iconbtn:hover { background: var(--zf-ink-50); }
.app__tools .zf-iconbtn svg { width: 18px; height: 18px; }
.app__bell { position: relative; }
.app__dot { position: absolute; top: 4px; right: 3px; min-width: 16px; height: 16px; padding: 0 4px; border-radius: 99px; background: #E08A00; color: #fff; font: 700 10px/16px var(--zf-sans); font-style: normal; text-align: center; box-shadow: 0 0 0 2px var(--app-bg); }
.app__sep { width: 1px; height: 22px; margin: 0 8px; background: var(--zf-line); }

/* 通知弹层 */
.app__notes { padding: 6px; }
.app__notes-h { display: flex; align-items: baseline; justify-content: space-between; padding: 8px 10px 10px; }
.app__notes-h b { font-size: 15px; color: var(--zf-text); }
.app__notes-h span { font-size: 12.5px; color: var(--zf-text-3); }
.app__note { display: flex; align-items: center; gap: 12px; padding: 10px; border-radius: 12px; }
.app__note:hover { background: var(--zf-ink-50); }
.app__note-ic { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: 10px; background: rgba(224,138,0,.12); color: #A86400; }
.app__note-ic svg { width: 17px; height: 17px; }
.app__note > div { min-width: 0; flex: 1; }
.app__note b { display: block; font-size: 13.5px; color: var(--zf-text); }
.app__note small { display: block; font-size: 12px; color: var(--zf-text-3); }
.app__note-empty { padding: 24px 10px; text-align: center; font-size: 13.5px; color: var(--zf-text-3); }
.app__notes-f { display: flex; align-items: center; justify-content: center; gap: 6px; height: 40px; margin-top: 4px; border-top: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-green-700); font-weight: 600; }
.app__notes-f svg { width: 14px; height: 14px; }

/* 内容区 */
.app__body.mem__body { display: grid; gap: 24px; align-content: start; width: 100%; max-width: 1360px; padding: 28px 32px 72px; }
[data-shell="app"] .mem__title h1 { font-size: 26px; }
[data-shell="app"] .mem__title p { font-size: 14px; }

/* 控制台面板：实底白卡，不用光晕 */
[data-shell="app"] .panel2, [data-shell="app"] .pstat, .mpanel, .kpi {
  background: var(--zf-surface); border: 1px solid var(--zf-line); border-radius: 16px;
  box-shadow: 0 1px 2px rgba(16,42,67,.04); -webkit-backdrop-filter: none; backdrop-filter: none;
}
[data-shell="app"] .pstat::before { display: none; }
[data-theme="dark"] [data-shell="app"] .panel2, [data-theme="dark"] [data-shell="app"] .pstat, [data-theme="dark"] .mpanel, [data-theme="dark"] .kpi { box-shadow: 0 1px 2px rgba(0,0,0,.35); }

/* 提醒条：紧凑单行 */
.notices { display: grid; gap: 10px; }
.notice { display: flex; align-items: center; gap: 12px; min-height: 52px; padding: 8px 10px 8px 16px; border-radius: 12px; background: var(--zf-surface); border: 1px solid var(--zf-line); font-size: 14px; color: var(--zf-text-2); }
.notice > svg { width: 18px; height: 18px; flex: none; color: var(--zf-green-600); }
.notice b { color: var(--zf-text); }
.notice .zf-btn { margin-left: auto; flex: none; }
.notice--warn { background: rgba(224,138,0,.06); border-color: rgba(224,138,0,.22); }
.notice--warn > svg { color: #C27A00; }

/* 指标 */
.kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
.kpi { padding: 18px 20px; }
.kpi__l { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--zf-text-3); }
.kpi__l svg { width: 16px; height: 16px; color: var(--zf-green-600); }
.kpi__v { margin-top: 10px; font-size: 28px; font-weight: 700; color: var(--zf-text); letter-spacing: -.02em; line-height: 1.15; }
.kpi__v small { margin-left: 3px; font-size: 15px; font-weight: 600; color: var(--zf-text-3); letter-spacing: 0; }
.kpi__s { margin-top: 6px; font-size: 12.5px; color: var(--zf-text-3); }

/* 区块标题 */
.msec { display: grid; gap: 14px; }
.msec__h { display: flex; align-items: center; gap: 10px; }
.msec__h h2 { font-size: 18px; }
.msec__n { height: 22px; padding: 0 8px; border-radius: 99px; background: var(--zf-ink-50); color: var(--zf-text-3); font-size: 12px; font-weight: 600; line-height: 22px; }
.msec__h .zf-link { margin-left: auto; font-size: 13.5px; }

/* 我的市场 Key：沿用首屏 Key 卡 */
.vkeys { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.vkey { position: relative; display: flex; flex-direction: column; padding: 20px; border-radius: 20px; background: var(--zf-surface); border: 1px solid var(--zf-line); box-shadow: var(--zf-sh-inset), 0 1px 2px rgba(16,42,67,.04), 0 18px 40px -30px rgba(16,42,67,.3); transition: transform var(--zf-dur-pop) var(--zf-ease-out), box-shadow var(--zf-dur-pop) var(--zf-ease-out), border-color var(--zf-dur-hover); }
.vkey:hover { transform: translateY(-2px); border-color: var(--zf-line-2); box-shadow: var(--zf-sh-inset), 0 24px 48px -28px rgba(16,42,67,.34); }
.vkey .kc-flag { width: 40px; height: 40px; font-size: 13px; }
.vkey .kc-name { font-size: 15.5px; }
.vkey .kc-ex { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vkey .kc-top > div { min-width: 0; flex: 1; }
.vkey .kc-top .pill { flex: none; }
.vkey .kc-keyrow { height: 46px; margin-top: 16px; border-radius: 12px; background: var(--zf-surface-2); }
.vkey .kc-key { font-size: 14px; }
.vkey .kc-keyrow .zf-iconbtn { width: 34px; height: 34px; }
.vkey .kc-keyrow .zf-iconbtn svg { width: 16px; height: 16px; }
.vkey__meta { display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: 10px; margin: 16px 0 0; }
.vkey__meta dt { font-size: 12px; color: var(--zf-text-3); }
.vkey__meta dd { margin: 2px 0 0; font-size: 14px; font-weight: 600; color: var(--zf-text); }
.vkey__meta dd small { display: block; font-size: 11.5px; font-weight: 600; color: #A86400; }
.vkey__foot { display: flex; align-items: center; justify-content: space-between; margin-top: auto; padding-top: 16px; }
.vkey__foot .zf-link { font-size: 13.5px; }
.vkey__meta + .vkey__foot { margin-top: 16px; border-top: 1px solid var(--zf-line); }
.vkey--disabled .kc-flag, .vkey--expired .kc-flag { background: var(--zf-ink-300); }
.vkey--disabled .kc-key, .vkey--expired .kc-key { color: var(--zf-text-3); }
.vkey--expiring { border-color: rgba(224,138,0,.3); }
.vkey--add { align-items: center; justify-content: center; gap: 6px; text-align: center; border-style: dashed; border-color: var(--zf-line-2); background: transparent; box-shadow: none; color: var(--zf-text-3); font-size: 13px; }
.vkey--add b { margin-top: 6px; font-size: 15px; color: var(--zf-text); }
.vkey--add:hover { border-color: var(--zf-green-400); background: var(--zf-green-50); box-shadow: none; }
.vkey__plus { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; background: var(--zf-green-600); color: #fff; }
.vkey__plus svg { width: 20px; height: 20px; }
[data-theme="dark"] .vkey { box-shadow: 0 1px 2px rgba(0,0,0,.35); }
[data-theme="dark"] .vkey--disabled .kc-flag, [data-theme="dark"] .vkey--expired .kc-flag { background: #2A3B50; }

/* 面板 */
.mpanel { overflow: hidden; }
.mpanel__h { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 18px 20px 14px; }
.mpanel__h h3 { font-size: 16px; }
.mpanel__h p { margin-top: 2px; font-size: 12.5px; color: var(--zf-text-3); }
.mpanel__h .zf-link { font-size: 13px; white-space: nowrap; }
.mpanel > .zf-chart-host { margin: 0 12px 12px; }
.mpanel .mlist { border-top: 1px solid var(--zf-line); }
.mpanel .mlist__row b { display: block; font-size: 13.5px; font-weight: 600; }
.mpanel .mlist__row .end { display: flex; align-items: center; gap: 10px; }
.mpanel .mlist__row .end small { white-space: nowrap; }
.mlist__ic { display: grid; place-items: center; width: 32px; height: 32px; flex: none; border-radius: 10px; background: var(--zf-ink-50); color: var(--zf-text-2); }
.mlist__ic svg { width: 16px; height: 16px; }
[data-shell="app"] .mgrid2 { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 16px; align-items: stretch; }

/* =====================================================================
   r15（2026-11-05）：会员中心改为「个人中心式」
   保留官网导航与页脚（登录态：通知 + 头像菜单），账户横幅 + 横向标签页 + 单栏内容。
   不再使用 r14 的侧栏控制台（.app* 样式保留给通知 / 账户弹层复用）。
   ===================================================================== */
.nav__bell { position: relative; }
.nav__bell .app__dot { box-shadow: 0 0 0 2px var(--zf-surface); }
.nav__me { display: inline-flex; align-items: center; gap: 4px; height: 40px; padding: 3px 6px 3px 3px; border-radius: 12px; transition: background-color var(--zf-dur-hover); }
.nav__me:hover, .nav__me[aria-expanded="true"] { background: var(--zf-ink-50); }
.nav__me .mem__avatar { width: 34px; height: 34px; border-radius: 10px; font-size: 14px; }
.nav__me > svg { width: 14px; height: 14px; color: var(--zf-text-3); }

/* 账户横幅 */
.pc-hero { position: relative; padding: 36px 0 28px; }
.pc-id { display: flex; align-items: center; gap: 20px; }
.pc-av.mem__avatar { width: 68px; height: 68px; border-radius: 22px; font-size: 26px; flex: none; box-shadow: 0 14px 30px -16px rgba(0,144,74,.6); }
.pc-id__t { min-width: 0; }
.pc-eyebrow { display: flex; align-items: center; gap: 10px; font-size: 13px; font-weight: 600; color: var(--zf-green-700); letter-spacing: .02em; }
.pc-id h1 { margin-top: 4px; font-size: 30px; line-height: 1.2; letter-spacing: -.01em; }
.pc-id p { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 6px; font-size: 13.5px; color: var(--zf-text-3); }
.pc-id p > i { width: 3px; height: 3px; border-radius: 50%; background: var(--zf-ink-300); }
.pc-copy { display: inline-grid; place-items: center; width: 22px; height: 22px; margin-left: -4px; border-radius: 6px; color: var(--zf-text-3); }
.pc-copy:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.pc-copy svg { width: 13px; height: 13px; }
.pc-ok { display: inline-flex; align-items: center; gap: 4px; color: var(--zf-green-700); }
.pc-ok svg { width: 14px; height: 14px; }
.pc-acts { margin-left: auto; display: flex; gap: 10px; flex: none; }
.pc-acts .zf-btn svg { width: 16px; height: 16px; }
.pc-sum { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: 28px; border-radius: 20px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.pc-sum > div { display: grid; gap: 4px; padding: 20px 26px; min-width: 0; }
.pc-sum > div + div { border-left: 1px solid var(--zf-line); }
.pc-sum span { font-size: 13px; color: var(--zf-text-3); }
.pc-sum b { font-size: 28px; font-weight: 700; line-height: 1.15; letter-spacing: -.02em; color: var(--zf-text); }
.pc-sum b small { margin-left: 3px; font-size: 15px; font-weight: 600; color: var(--zf-text-3); letter-spacing: 0; }
.pc-sum em { font-style: normal; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-sum em.is-warn { color: #A86400; font-weight: 600; }
.pc-flags { display: flex; gap: 4px; }
.pc-flags i { height: 20px; padding: 0 6px; border-radius: 6px; background: var(--zf-ink-800); color: #fff; font: 700 10.5px/20px var(--zf-sans); font-style: normal; letter-spacing: .04em; }

/* 横向标签页（吸顶在导航下） */
.pc-tabs { position: sticky; top: 64px; z-index: 40; background: rgb(var(--zf-surface-rgb) / .86); border-top: 1px solid var(--zf-line); border-bottom: 1px solid var(--zf-line); -webkit-backdrop-filter: blur(18px) saturate(1.5); backdrop-filter: blur(18px) saturate(1.5); }
.pc-tabs .zf-container { display: flex; align-items: stretch; gap: 4px; height: 52px; }
.pc-tab { position: relative; display: inline-flex; align-items: center; gap: 7px; padding: 0 16px; font-size: 14.5px; color: var(--zf-text-2); transition: color var(--zf-dur-hover); }
.pc-tab:first-child { margin-left: -16px; }
.pc-tab:hover { color: var(--zf-text); }
.pc-tab.is-on { color: var(--zf-text); font-weight: 600; }
.pc-tab.is-on::after { content: ""; position: absolute; left: 16px; right: 16px; bottom: -1px; height: 2px; border-radius: 2px; background: var(--zf-green-600); }
.pc-tab .badge { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--zf-ink-100); color: var(--zf-text-2); font-size: 11.5px; font-weight: 700; line-height: 20px; text-align: center; }
.pc-tab .badge--warn { background: rgba(224,138,0,.14); color: #A86400; }
.pc-tabs__doc { margin-left: auto; align-self: center; font-size: 13.5px; }
.pc-tabs__doc svg { width: 15px; height: 15px; }

/* 内容区：单栏 */
.pc-body.mem__body { display: grid; gap: 24px; align-content: start; padding: 28px 0 88px; }
[data-shell="member"] .mem__title { align-items: center; }
[data-shell="member"] .mem__title h1 { font-size: 20px; }
[data-shell="member"] .mem__title p { margin-top: 4px; font-size: 13.5px; }
[data-shell="member"] .panel2, [data-shell="member"] .pstats {
  background: var(--zf-surface); border: 1px solid var(--zf-line); border-radius: 16px;
  box-shadow: 0 1px 2px rgba(16,42,67,.04); -webkit-backdrop-filter: none; backdrop-filter: none;
}
/* 页面内统计：合成一条，不再是四张带图标的卡 */
[data-shell="member"] .pstats { gap: 0; overflow: hidden; }
[data-shell="member"] .pstat { padding: 16px 22px; background: none; border: 0; border-radius: 0; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
[data-shell="member"] .pstat + .pstat { border-left: 1px solid var(--zf-line); }
[data-shell="member"] .pstat::before, [data-shell="member"] .pstat .tile__ico { display: none; }
[data-shell="member"] .pstat b { font-size: 22px; }
[data-shell="member"] .mgrid2 { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 16px; align-items: stretch; }
[data-shell="member"] .mem__body .dtable th { position: static; } /* 外层面板 overflow:hidden，吸顶会把表头压到首行上 */
[data-theme="dark"] [data-shell="member"] .panel2, [data-theme="dark"] [data-shell="member"] .pstats { box-shadow: 0 1px 2px rgba(0,0,0,.35); }
[data-theme="dark"] .pc-flags i { background: #2A3B50; }

/* r15.1：「我的市场 Key」卡片压缩为三行（名称 / Key / 状态 + 操作），统一高度与按钮 */
.vkeys { gap: 14px; }
.vkey { padding: 16px 18px 14px; border-radius: 16px; box-shadow: 0 1px 2px rgba(16,42,67,.04); }
.vkey:hover { transform: none; border-color: var(--zf-line-2); box-shadow: 0 1px 2px rgba(16,42,67,.04), 0 14px 30px -24px rgba(16,42,67,.3); }
.vkey .kc-top { gap: 12px; }
.vkey .kc-flag { width: 34px; height: 34px; border-radius: 10px; font-size: 11.5px; }
.vkey .kc-name { display: block; font-size: 15px; line-height: 1.3; }
.vkey a.kc-name:hover { color: var(--zf-green-700); }
.vkey .kc-ex { font-size: 12px; }
.vkey .kc-keyrow { height: 40px; margin-top: 12px; padding: 0 4px 0 12px; border-radius: 10px; }
.vkey .kc-key { font-size: 13.5px; }
.vkey .kc-keyrow .zf-iconbtn { width: 30px; height: 30px; }
.vkey .kc-keyrow .zf-iconbtn svg { width: 15px; height: 15px; }
.vkey__foot { gap: 12px; margin-top: 12px; padding-top: 0; }
.vkey__meta + .vkey__foot { border-top: 0; }
.vkey__info { display: flex; align-items: baseline; gap: 14px; min-width: 0; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; }
.vkey__info b { font-weight: 600; color: var(--zf-text); }
.vkey__info em { margin-left: 6px; font-style: normal; font-weight: 600; color: #A86400; }
.vkey__info em.is-bad { color: #C2412D; }
.vkey__foot .zf-btn { flex: none; }
.vkey--expiring { border-color: rgba(224,138,0,.32); }
.vkey--add { flex-direction: row; gap: 14px; min-height: 0; text-align: left; }
.vkey--add b { display: block; margin-top: 0; font-size: 14.5px; }
.vkey--add small { display: block; font-size: 12.5px; }
.vkey__plus { width: 38px; height: 38px; border-radius: 12px; flex: none; }
.vkey__plus svg { width: 18px; height: 18px; }
[data-theme="dark"] .vkey:hover { box-shadow: 0 1px 2px rgba(0,0,0,.35), 0 14px 30px -24px rgba(0,0,0,.6); }
[data-theme="dark"] .vkey__info em { color: #F0B354; }
[data-theme="dark"] .vkey__info em.is-bad { color: #F08A78; }

/* r15.2：订阅卡——剩余时间 + 有效期进度条为主，Key 为底部可复制标签，去掉卡中套框 */
.vkey { padding: 18px 18px 14px; }
.vkey__life { margin-top: 16px; }
.vkey__life-h { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; font-size: 12.5px; color: var(--zf-text-3); }
.vkey__left { font-size: 14px; color: var(--zf-text-2); }
.vkey__left b { margin: 0 2px; font-size: 22px; font-weight: 700; letter-spacing: -.02em; color: var(--zf-text); }
.vkey__bar { height: 6px; margin-top: 8px; border-radius: 99px; background: var(--zf-ink-50); overflow: hidden; }
.vkey__bar i { display: block; height: 100%; border-radius: inherit; background: var(--zf-green-500); }
.vkey--expiring .vkey__left b { color: #A86400; }
.vkey--expiring .vkey__bar i { background: #E08A00; }
.vkey--expired .vkey__left, .vkey--expired .vkey__left b { color: #C2412D; }
.vkey--expired .vkey__bar { background: rgba(194,65,45,.12); }
.vkey--disabled .vkey__left { font-size: 15px; font-weight: 600; color: var(--zf-text-3); line-height: 30px; }
.vkey--disabled .vkey__bar i { background: var(--zf-ink-300); }
.vkey__foot { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--zf-line); }
.vkey__key { display: inline-flex; align-items: center; gap: 8px; min-width: 0; height: 30px; padding: 0 8px 0 10px; margin-left: -6px; border-radius: 8px; color: var(--zf-text-2); font-size: 13px; transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.vkey__key:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.vkey__key svg { width: 14px; height: 14px; flex: none; color: var(--zf-text-3); }
.vkey--disabled .vkey__key, .vkey--expired .vkey__key { color: var(--zf-text-3); }
[data-theme="dark"] .vkey__bar { background: rgba(220,232,244,.08); }
[data-theme="dark"] .vkey--expiring .vkey__left b { color: #F0B354; }
[data-theme="dark"] .vkey--expired .vkey__left, [data-theme="dark"] .vkey--expired .vkey__left b { color: #F08A78; }

/* =====================================================================
   r16（2026-11-05）：会员子页细调 + 官网内页向首页 r13 规则收敛
   规则：颜色只用墨蓝 + 品牌绿；不用深色大块、角落光晕、英文水印；卡片用统一玻璃规格。
   ===================================================================== */
/* 统计卡：去掉彩色角光，统一玻璃卡与品牌绿图标 */
.pstat { background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); }
.pstat::before { display: none; }
.pstat, .pstat--b, .pstat--v, .pstat--g { --ac: #00904A; }
.dcard { --ac: #00904A !important; }

/* 开发文档首屏：由深色块改为浅色玻璃 */
.dov-hero { background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); color: var(--zf-text-2); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.dov-hero::before { background: radial-gradient(520px 300px at 88% 0%, rgba(47,190,121,.16), transparent 70%); }
.dov-hero .zf-eyebrow { color: var(--zf-green-700); }
.dov-hero h1 { color: var(--zf-text); }
.dov-hero .base { border-top-color: var(--zf-line); color: var(--zf-text-3); }
.dov-hero .base b { color: var(--zf-text); }
[data-theme="dark"] .dov-hero { background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); }

/* 登录页：左侧由深色块改为浅色，沿用首屏丝带背景 */
.auth__brand { background: transparent; color: var(--zf-text-2); }
.auth__brand::before { background: radial-gradient(560px 380px at 15% 15%, rgba(47,190,121,.14), transparent 70%); }
.auth__brand .zf-eyebrow { color: var(--zf-green-700); }
.auth__brand h1 { color: var(--zf-text); }
.auth__feat { background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); color: var(--zf-text); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.auth__feat .tile__ico { background: var(--zf-green-50); border-color: rgba(0,144,74,.18); color: var(--zf-green-700); }
.auth__feat small { color: var(--zf-text-3); }
[data-theme="dark"] .auth__feat .tile__ico { background: rgba(47,190,121,.12); color: #7FD7AA; }

/* 会员 · 市场 Key 表：表头、墨蓝市场标识、无框 Key、有效期进度条、显式续费 */
.ktable .keyrow { grid-template-columns: 20px 36px minmax(0, 1fr) minmax(0, 1.15fr) 80px 200px 96px 128px; gap: 14px; padding: 14px 18px; }
.keyrow--head { padding-top: 10px !important; padding-bottom: 10px !important; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); }
.keyrow--head:hover { background: var(--zf-surface-2); }
.keyrow--head > span:nth-child(2) { grid-column: 2 / 4; }
.keyrow--head > span:nth-child(3) { display: none; }
.keyrow .kc-flag { width: 36px; height: 36px; border-radius: 10px; font-size: 11.5px; }
.keyrow--expired .kc-flag, .keyrow--disabled .kc-flag { background: var(--zf-ink-300); }
.keyrow__n b { font-size: 14.5px; }
.keyrow__key { justify-self: start; max-width: 100%; margin-left: -10px; }
.keyrow__key .zf-mono { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.usage { font-size: 13px; }
.kexp__h { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }
.kexp__h > span { font-size: 13.5px; font-weight: 600; color: var(--zf-text); white-space: nowrap; }
.kexp__h > span.warn { color: #A86400; }
.kexp__h > span.bad { color: #C2412D; }
.kexp__h small { white-space: nowrap; }
.kexp .vkey__bar { margin-top: 6px; height: 5px; }
.keyrow--expiring .vkey__bar i { background: #E08A00; }
.keyrow--expired .vkey__bar { background: rgba(194,65,45,.12); }
.keyrow--disabled .vkey__bar i { background: var(--zf-ink-300); }
.keyrow__act { display: flex; align-items: center; justify-content: flex-end; gap: 4px; }
.keyrow__act .zf-iconbtn { width: 32px; height: 32px; }
.keyrow__act .zf-iconbtn svg { width: 16px; height: 16px; }
.keyrow.is-off { opacity: 1; }
.keyrow.is-off .keyrow__n b, .keyrow.is-off .keyrow__key { color: var(--zf-text-3); }
[data-theme="dark"] .keyrow--expired .kc-flag, [data-theme="dark"] .keyrow--disabled .kc-flag { background: #2A3B50; }
[data-theme="dark"] .kexp__h > span.warn { color: #F0B354; }
[data-theme="dark"] .kexp__h > span.bad { color: #F08A78; }

/* 会员 · 订单表：市场用代码标签 + 名称 */
.omk { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; color: var(--zf-text-2); white-space: nowrap; }
.omk i { height: 20px; padding: 0 6px; border-radius: 6px; background: var(--zf-ink-800); color: #fff; font: 700 10.5px/20px var(--zf-sans); font-style: normal; letter-spacing: .04em; }
.omk span { margin-left: 4px; }
[data-theme="dark"] .omk i { background: #2A3B50; }

/* r16.1：账户横幅合成一张卡——左侧身份与操作，右侧四项摘要；去掉「会员中心」眉标与卡外留白 */
.pc-hero { padding: 28px 0 24px; }
.pc-card { display: grid; grid-template-columns: minmax(340px, 1fr) minmax(0, 2.6fr); border-radius: 22px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.pc-me { display: flex; flex-direction: column; justify-content: center; gap: 18px; min-width: 0; padding: 22px 26px; border-right: 1px solid var(--zf-line); }
.pc-id { gap: 14px; min-width: 0; }
.pc-av.mem__avatar { width: 52px; height: 52px; border-radius: 16px; font-size: 21px; box-shadow: 0 10px 24px -14px rgba(0,144,74,.6); }
.pc-id__t { flex: 1; }
.pc-id h1 { margin-top: 0; font-size: 21px; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pc-id p { gap: 7px; margin-top: 3px; font-size: 12.5px; }
.pc-id p .zf-demo-chip { margin-left: 2px; }
.pc-acts { margin-left: 0; gap: 8px; }
.pc-sum { margin-top: 0; border: 0; border-radius: 0; background: none; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
.pc-sum > div { align-content: center; padding: 22px 24px; }
.pc-sum b { font-size: 27px; }
.pc-card { grid-template-columns: minmax(380px, 1.3fr) minmax(0, 2.7fr); }
.pc-name { display: flex; align-items: center; gap: 10px; min-width: 0; }
.pc-name .zf-demo-chip { flex: none; }
.pc-tabs__demo { margin-left: auto; align-self: center; }
.pc-tabs__demo + .pc-tabs__doc { margin-left: 16px; }
.pc-sum > div { min-width: 0; }
.pc-sum b { white-space: nowrap; }
@media (max-width: 1320px) {
  .pc-card { grid-template-columns: minmax(300px, 1.15fr) minmax(0, 2.6fr); }
  .pc-me { padding: 20px 22px; }
  .pc-sum > div { padding: 20px 18px; }
  .pc-sum b { font-size: 23px; }
  .pc-sum em { white-space: normal; }
}

/* r16.2：概览「只在一处说急事」——横幅改为无歧义的账户状态；卡片每种状态只用一种强调 */
.pc-sum { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.pc-sum > * { display: grid; gap: 4px; align-content: center; min-width: 0; padding: 22px 24px; }
.pc-sum > * + * { border-left: 1px solid var(--zf-line); }
.pc-sum > a { position: relative; transition: background-color var(--zf-dur-hover); }
.pc-sum > a:hover { background: rgb(var(--zf-surface-rgb) / .5); }
.pc-sum > a:last-of-type:hover, .pc-sum > a:hover:last-child { border-radius: 0 22px 22px 0; }
.pc-sum > a::after { content: "→"; position: absolute; right: 22px; top: 22px; font-size: 13px; color: var(--zf-text-3); opacity: 0; transform: translateX(-4px); transition: opacity var(--zf-dur-hover), transform var(--zf-dur-hover); }
.pc-sum > a:hover::after { opacity: 1; transform: none; }
.pc-sum b { font-size: 26px; }
.pc-sum b small { margin-left: 6px; font-size: 14px; }
.pc-sum em { color: var(--zf-text-3); }

/* 卡片：剩余天数统一深色；颜色只留给状态标签与「即将到期」进度条 */
.vkey--expiring .vkey__left b, .vkey--expired .vkey__left b { color: var(--zf-text); }
.vkey--expired .vkey__left { color: var(--zf-text-2); }
.vkey__note { margin-top: 8px; font-size: 12.5px; line-height: 20px; color: var(--zf-text-3); }
.vkey--expired .vkey__note { color: #B23A26; }
.vkey__ws { margin-left: auto; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; }
.vkey__ws b { font-weight: 600; color: var(--zf-text); }
.vkey__foot { gap: 14px; }
.vkey--expiring { border-color: var(--zf-line); }
[data-theme="dark"] .vkey--expiring .vkey__left b, [data-theme="dark"] .vkey--expired .vkey__left b { color: var(--zf-text); }
[data-theme="dark"] .vkey--expired .vkey__left { color: var(--zf-text-2); }
[data-theme="dark"] .vkey--expired .vkey__note { color: #F08A78; }
/* 进度条与说明文字占同样高度，所有卡片等高 */
.vkey__life .vkey__bar { margin-top: 8px; margin-bottom: 6px; }
.vkey__note { margin-top: 4px; line-height: 16px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }


/* =====================================================================
   r16.3：会员中心菜单从全宽横向标签移入内容区左栏（左菜单 + 右内容）
   ===================================================================== */
.pc-wrap { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 28px; align-items: start; padding-bottom: 88px; }
.pc-hero:empty::before { content: ""; display: block; height: 78px; border-radius: 18px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); max-width: 1376px; margin: 0 auto; }
.pc-menu:empty { min-height: 390px; }
.pc-menu:empty::before { content: "正在加载会员信息…"; display: block; padding: 16px 10px; font-size: 13px; color: var(--zf-text-3); }
.pc-body:empty::before { content: ""; display: block; min-height: 170px; border-radius: 18px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); }
.pc-menu { position: sticky; top: 88px; display: grid; gap: 2px; padding: 10px; border-radius: 18px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.pc-menu__grp { padding: 14px 12px 6px; font-size: 11.5px; font-weight: 600; letter-spacing: .06em; color: var(--zf-text-3); }
.pc-menu__grp:first-child { padding-top: 6px; }
.pc-menu__a { position: relative; display: flex; align-items: center; gap: 10px; width: 100%; height: 38px; padding: 0 10px 0 12px; border-radius: 10px; font-size: 14px; color: var(--zf-text-2); text-align: left; transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.pc-menu__a svg { width: 17px; height: 17px; flex: none; color: var(--zf-text-3); }
.pc-menu__a:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.pc-menu__a.is-on { background: var(--zf-green-50); color: var(--zf-green-800); font-weight: 600; }
.pc-menu__a.is-on svg { color: var(--zf-green-600); }
.pc-menu__a.is-on::before { content: ""; position: absolute; left: -10px; top: 9px; bottom: 9px; width: 3px; border-radius: 0 3px 3px 0; background: var(--zf-green-600); }
.pc-menu__a .badge { margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 99px; background: var(--zf-ink-100); color: var(--zf-text-2); font-size: 11.5px; font-weight: 700; line-height: 20px; text-align: center; }
.pc-menu__a .badge--warn { background: rgba(224,138,0,.14); color: #A86400; }
.pc-menu__foot { display: grid; gap: 2px; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--zf-line); }
.pc-menu__foot .zf-demo-chip { justify-self: start; margin: 8px 0 2px 10px; }
[data-theme="dark"] .pc-menu__a.is-on { background: rgba(47,190,121,.12); color: #7FD7AA; }
.pc-body.mem__body { padding: 0; }
.pc-hero { padding-bottom: 24px; }
/* 内容区变窄：Key 卡按宽度自动 2 / 3 列 */
.vkeys { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }

/* r16.3：内容区变窄后的市场 Key 表 */
.ktable .keyrow { grid-template-columns: 20px 36px minmax(0, 1.2fr) minmax(0, 1fr) 64px 180px 92px 112px; gap: 12px; }
.keyrow__n b, .keyrow__n small { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
/* r16.3：会员内容区变窄，表格收紧列距（1280 宽下订单表不溢出） */
.pc-body .dtable td, .pc-body .dtable th { padding-left: 10px; padding-right: 10px; }
.pc-body .dtable td:first-child, .pc-body .dtable th:first-child { padding-left: 18px; }
.pc-body .dtable td:last-child, .pc-body .dtable th:last-child { padding-right: 18px; }
.pc-body .dtable td { font-size: 13.5px; }


/* r16.4：概览「我的市场 Key」紧凑列表（替代大卡片） */
.vlist { padding: 0; }
.vrow { display: grid; grid-template-columns: 34px minmax(116px, 1.2fr) 88px minmax(150px, 1fr) 64px 78px 140px 72px; align-items: center; gap: 14px; padding: 12px 18px; border-bottom: 1px solid var(--zf-line); transition: background-color var(--zf-dur-hover); }
.vrow:hover { background: rgba(0,144,74,.03); }
.vrow--head { padding-top: 9px; padding-bottom: 9px; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); }
.vrow--head:hover { background: var(--zf-surface-2); }
.vrow--head > span:nth-child(5), .vrow--head > span:nth-child(6) { text-align: right; }
.vrow .kc-flag { width: 34px; height: 34px; border-radius: 10px; font-size: 11px; }
.vrow--expired .kc-flag, .vrow--disabled .kc-flag { background: var(--zf-ink-300); }
.vrow__n { min-width: 0; }
.vrow__n a { display: block; font-size: 14px; font-weight: 600; color: var(--zf-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vrow__n a:hover { color: var(--zf-green-700); }
.vrow__n small { display: block; font-size: 12px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vrow__life { min-width: 0; }
.vrow__lh { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; font-size: 13px; color: var(--zf-text-2); white-space: nowrap; }
.vrow__lh b { font-size: 15px; font-weight: 700; color: var(--zf-text); }
.vrow__lh small { font-size: 12px; color: var(--zf-text-3); }
.vrow__life .vkey__bar { height: 4px; margin: 6px 0 0; }
.vrow--expiring .vkey__bar i { background: #E08A00; }
.vrow__note { display: block; margin-top: 3px; font-size: 12px; line-height: 13px; color: var(--zf-text-3); }
.vrow--expired .vrow__note { color: #B23A26; }
.vrow__num { text-align: right; font-size: 13px; color: var(--zf-text-3); white-space: nowrap; }
.vrow__num b { font-weight: 600; color: var(--zf-text); }
.vrow .vkey__key { justify-self: start; margin-left: 0; }
.vrow__act { display: flex; justify-content: flex-end; }
.vrow--disabled .vrow__n a, .vrow--disabled .vkey__key, .vrow--expired .vkey__key { color: var(--zf-text-3); }
.vlist .keyadd { border-top: 0; padding: 12px 18px; }
.vlist .keyadd > svg { width: 34px; height: 34px; padding: 8px; border-radius: 10px; }
[data-theme="dark"] .vrow--expired .kc-flag, [data-theme="dark"] .vrow--disabled .kc-flag { background: #2A3B50; }
[data-theme="dark"] .vrow--expired .vrow__note { color: #F08A78; }


/* r16.4：账户横幅压成一行——身份 | 三项状态 | 主操作，高度约 84px */
.pc-hero { padding: 20px 0 20px; }
.pc-card--row { display: flex; align-items: center; gap: 0; padding: 14px 18px 14px 18px; }
.pc-card--row .pc-id { flex: none; gap: 12px; max-width: 320px; padding-right: 24px; }
.pc-card--row .pc-av.mem__avatar { width: 44px; height: 44px; border-radius: 13px; font-size: 18px; }
.pc-card--row .pc-id h1 { font-size: 17px; }
.pc-card--row .pc-id p { margin-top: 1px; font-size: 12px; }
.pc-card--row .pc-sum { flex: 1; display: flex; min-width: 0; }
.pc-card--row .pc-sum > * { flex: 1; display: block; min-width: 0; padding: 6px 20px; border-left: 1px solid var(--zf-line); }
.pc-card--row .pc-sum > a:hover { border-radius: 10px; }
.pc-card--row .pc-sum > a::after { top: 8px; right: 14px; }
.pc-card--row .pc-sum span { display: block; font-size: 12px; }
.pc-card--row .pc-sum b { display: inline; font-size: 20px; line-height: 1.3; }
.pc-card--row .pc-sum b small { margin-left: 4px; font-size: 13px; }
.pc-card--row .pc-sum em { display: inline; margin-left: 8px; font-size: 12px; }
.pc-card--row .pc-acts { flex: none; padding-left: 20px; border-left: 1px solid var(--zf-line); align-self: stretch; display: flex; align-items: center; }
.pc-card--row .pc-acts:empty { display: none; }
@media (max-width: 1320px) {
  .pc-card--row .pc-id { max-width: 280px; padding-right: 16px; }
  .pc-card--row .pc-sum > * { padding: 6px 14px; }
  .pc-card--row .pc-sum em { display: block; margin-left: 0; }
  .pc-card--row .pc-sum b { font-size: 18px; }
}


/* =====================================================================
   r17（2026-11-05）：会员子页整体收紧——去掉无意义统计卡，计数进筛选，列表单行化；
   概览图表带刻度；WS 调试改为控制条 + 控制台；账户设置重做为「左说明 + 右设置项」
   ===================================================================== */
/* 筛选里的计数 */
.zf-seg .segn { margin-left: 6px; font-style: normal; font-size: 11.5px; font-weight: 600; color: var(--zf-text-3); font-variant-numeric: tabular-nums; }
.zf-seg [aria-selected="true"] .segn { color: var(--zf-green-700); }
.toolbar__end { gap: 14px; }

/* 概览图表：从 0 起算的柱状图 */
.mpanel__h .ustat { display: flex; gap: 22px; margin: 0; }
.ustat dt { font-size: 11.5px; color: var(--zf-text-3); }
.ustat dd { margin: 2px 0 0; font-size: 16px; font-weight: 700; color: var(--zf-text); text-align: right; }
.ustat div { text-align: right; }
.ubar { position: relative; height: 196px; margin: 4px 20px 16px 52px; }
.ubar__grid { position: absolute; inset: 0 0 22px 0; }
.ubar__grid span { position: absolute; left: 0; right: 0; border-top: 1px dashed var(--zf-line); }
.ubar__grid span:last-child { border-top-style: solid; border-color: var(--zf-line-2); }
.ubar__grid em { position: absolute; right: calc(100% + 10px); top: -8px; font-style: normal; font-size: 11px; color: var(--zf-text-3); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ubar__cols { position: absolute; inset: 0 0 22px 0; display: flex; align-items: flex-end; gap: 3px; }
.ubar__cols i { position: relative; flex: 1; min-width: 0; border-radius: 3px 3px 0 0; background: color-mix(in srgb, var(--zf-green-500) 55%, transparent); transition: background-color var(--zf-dur-hover); }
.ubar__cols i:hover { background: var(--zf-green-600); }
.ubar__cols i.is-today { background: var(--zf-green-600); }
.ubar__cols i:hover::after { content: attr(data-v); position: absolute; bottom: calc(100% + 6px); left: 50%; transform: translateX(-50%); padding: 4px 8px; border-radius: 6px; background: var(--zf-ink-900, #0B1F33); color: #fff; font-size: 11.5px; white-space: nowrap; z-index: 2; pointer-events: none; }
.ubar__x { position: absolute; left: 0; right: 0; bottom: 0; display: flex; gap: 3px; }
.ubar__x span { flex: 1; min-width: 0; font-size: 11px; color: var(--zf-text-3); white-space: nowrap; overflow: visible; }
.ubar__x span:last-child { text-align: right; }

/* 单行紧凑列表（概览订单、活动、活动记录页） */
.tlist { border-top: 1px solid var(--zf-line); }
.trow { display: flex; align-items: center; gap: 12px; min-height: 46px; padding: 8px 20px; border-bottom: 1px solid var(--zf-line); font-size: 13.5px; color: var(--zf-text); transition: background-color var(--zf-dur-hover); }
.trow:last-child { border-bottom: 0; }
a.trow:hover, .trow:hover { background: rgba(0,144,74,.03); }
.trow__ic { display: grid; place-items: center; width: 28px; height: 28px; flex: none; border-radius: 8px; background: var(--zf-ink-50); color: var(--zf-text-2); }
.trow__ic svg { width: 15px; height: 15px; }
.trow__t { display: flex; align-items: baseline; gap: 10px; flex: 1; min-width: 0; }
.trow__t b { flex: none; font-weight: 600; white-space: nowrap; }
.trow__t small { min-width: 0; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.trow__amt { font-size: 14px; }
.trow .zf-tag { flex: none; height: 22px; font-size: 11.5px; }
.trow__time { flex: none; width: 64px; text-align: right; font-size: 12px; color: var(--zf-text-3); }
.panel2 > .trow { animation: none; }

/* 开通市场：顶部搜索 + 地区切换，行更紧凑 */
.btool { display: flex; align-items: center; gap: 12px; padding: 10px 12px; margin-bottom: 16px; }
.btool .mk__search { width: 260px; height: 38px; box-shadow: none; }
.plist { display: grid; gap: 16px; }
.pgrp__head { padding: 12px 18px; }
.pgrp__head h3 { font-size: 15px; }
.pgrp__head h3::before { --ac: var(--zf-green-600); }
.pc-body .prow { grid-template-columns: 32px minmax(0, 1fr) 110px 120px 110px; gap: 12px; padding: 9px 18px; }
.pc-body .prow .mchip__flag { width: 32px; height: 32px; border-radius: 9px; font-size: 11px; }
.prow__p b { font-size: 15px; }
.prow__own { justify-self: end; display: flex; align-items: center; gap: 10px; font-size: 13px; }
.prow__own small { color: var(--zf-text-3); }
.prow__own .zf-link { font-size: 13px; font-weight: 600; }
.sum__empty--sm { padding: 14px 4px 6px; text-align: left; font-size: 13px; }

/* WS 调试：控制条 */
.wsbar { display: grid; padding: 0; overflow: visible; }
.wsbar__row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; padding: 12px 16px; }
.wsbar__row + .wsbar__row { border-top: 1px solid var(--zf-line); }
.wsbar__l { font-size: 13px; font-weight: 600; color: var(--zf-text-2); }
.wsbar__state { margin-left: auto; display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--zf-text-3); }
.wsbar__state b { color: var(--zf-text); }
.wsbar__steps .zf-btn { gap: 6px; }
.wsn { display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; background: rgb(0 0 0 / .08); font-size: 11px; font-weight: 700; }
.zf-btn--primary .wsn { background: rgb(255 255 255 / .22); }
.wsbar__steps .is-done .wsn { background: var(--zf-green-600); color: #fff; }
.wsbar__arrow svg { width: 14px; height: 14px; color: var(--zf-text-3); }
.wsbar__in { flex: 1; min-width: 200px; height: 34px; font-size: 13px; }
.wsbar__close { margin-left: auto; }
.term--wide { min-height: 0; margin-top: 16px; border-radius: 16px; box-shadow: none; }
.term--wide .term__body { height: 420px; max-height: none; }

/* 账户设置：左说明 + 右设置项 */
.sblock { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 24px; padding: 4px 0; }
.sblock + .sblock { padding-top: 20px; border-top: 1px solid var(--zf-line); }
.sblock__h h3 { font-size: 15px; }
.sblock__h p { margin-top: 4px; font-size: 12.5px; line-height: 1.6; color: var(--zf-text-3); }
.sblock__b { padding: 0; overflow: hidden; }
.srow { display: grid; grid-template-columns: 150px minmax(0, 1fr) auto; align-items: center; gap: 16px; min-height: 54px; padding: 8px 18px; border-bottom: 1px solid var(--zf-line); font-size: 13.5px; }
.srow:last-child { border-bottom: 0; }
.srow__l { display: flex; align-items: center; gap: 8px; color: var(--zf-text-2); }
.srow__v { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; min-width: 0; color: var(--zf-text); }
.srow__v b { font-weight: 600; }
.srow__v small { font-size: 12.5px; color: var(--zf-text-3); }
.srow__a { justify-self: end; }
.srow__ic { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; background: var(--zf-ink-50); }
.srow__ic svg { width: 14px; height: 14px; color: var(--zf-text-3); }
.srow .linked { display: inline-flex; align-items: center; gap: 8px; }
.sblock--danger .sblock__h h3 { color: #B23A26; }
.sblock--danger .sblock__b { border-color: rgba(194,65,45,.28); }
[data-theme="dark"] .sblock--danger .sblock__h h3 { color: #F08A78; }
.pc-body .dtable td { height: 50px; }
.pc-body .dtable th { height: 38px; }
.btool .mk__search { flex: 1; width: auto; min-width: 160px; }
.btool .zf-seg { flex: none; }
.btool .zf-seg button { white-space: nowrap; }
.term--wide { margin-top: -8px; }
.term--wide .term__empty { padding-top: 140px; }
.term--wide .term__body { flex: none; height: 420px; } /* flex:1 的 basis 为 0 会让 height 失效 */


/* r17.1：账户设置重做——与概览同一套面板，左右两列 */
.sgrid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: start; }
.scol { display: grid; gap: 16px; }
.scard .mpanel__h { padding-bottom: 12px; }
.scard .mpanel__h .zf-btn { flex: none; }
.slist { border-top: 1px solid var(--zf-line); }
.sitem { display: flex; align-items: center; gap: 12px; min-height: 58px; padding: 10px 20px; border-bottom: 1px solid var(--zf-line); }
.sitem:last-child { border-bottom: 0; }
.sitem .trow__ic { width: 32px; height: 32px; border-radius: 10px; }
.sitem .trow__ic svg { width: 16px; height: 16px; }
.slogo { font: 700 11.5px/1 var(--zf-sans); color: var(--zf-text); letter-spacing: .02em; }
.sitem__t { flex: 1; min-width: 0; }
.sitem__t b { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--zf-text); }
.sitem__t b .zf-tag { height: 20px; font-size: 11px; font-weight: 600; }
.sitem__t small { display: block; margin-top: 2px; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sitem__a { flex: none; display: flex; align-items: center; }
.sok { display: inline-flex; align-items: center; gap: 3px; color: var(--zf-green-700); font-weight: 600; }
.sok svg { width: 13px; height: 13px; }
.sdanger .mpanel__h h3 { color: #B23A26; }
.sdanger .trow__ic { background: rgba(194,65,45,.08); color: #B23A26; }
.sdanger__btn { color: #B23A26; border-color: rgba(194,65,45,.3); }
.sdanger__btn:hover { background: rgba(194,65,45,.06); border-color: rgba(194,65,45,.5); color: #9A2F1E; }
/* 修改邮箱 / 注销账户弹窗：验证码输入框与发送按钮同一行；注销提示 */
.sset__code { display: flex; gap: 8px; }
.sset__code .zf-input { flex: 1; min-width: 0; }
.sset__code .zf-btn { flex: none; min-width: 112px; }
.sset__warn { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; margin-bottom: 14px; border-radius: 10px; background: rgba(194,65,45,.06); color: #8A2E20; font-size: 13px; line-height: 1.6; }
.sset__warn svg { flex: none; width: 16px; height: 16px; margin-top: 2px; }
[data-theme="dark"] .sset__warn { background: rgba(240,138,120,.1); color: #F4A898; }
.sdemo { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--zf-text-3); }
.sdemo svg { width: 15px; height: 15px; }
.sdemo .zf-link { font-size: 12.5px; }
[data-theme="dark"] .sok { color: #7FD7AA; }
[data-theme="dark"] .sdanger .mpanel__h h3, [data-theme="dark"] .sdanger__btn { color: #F08A78; }
[data-theme="dark"] .sdanger .trow__ic { background: rgba(240,138,120,.1); color: #F08A78; }


/* r17.2：开通市场——单列列表 + 工具栏 + 吸底结算条（沿用首页结算条的玻璃质感） */
.blist { overflow: visible; }
.blist .btool { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 0; padding: 12px 16px; border: 0; border-bottom: 1px solid var(--zf-line); border-radius: 0; background: none; box-shadow: none; }
.blist .btool .mk__search { flex: 1; min-width: 180px; width: auto; height: 36px; box-shadow: none; }
.bterm { display: inline-flex; gap: 2px; padding: 3px; border-radius: 999px; background: var(--zf-ink-50); }
.bterm button { display: inline-flex; align-items: center; gap: 5px; height: 30px; padding: 0 12px; border-radius: 999px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); white-space: nowrap; transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.bterm button i { font-style: normal; font-size: 11px; font-weight: 700; color: var(--zf-green-700); }
.bterm button:hover { color: var(--zf-text); }
.bterm button.is-on { background: var(--zf-surface); color: var(--zf-text); box-shadow: 0 1px 2px rgba(16,42,67,.12); }
.brow { display: grid; grid-template-columns: 20px 34px minmax(0, 1fr) 110px 160px 150px; align-items: center; gap: 14px; min-height: 56px; padding: 8px 20px; border-bottom: 1px solid var(--zf-line); cursor: pointer; transition: background-color var(--zf-dur-hover); }
.brow:hover { background: rgba(0,144,74,.03); }
.brow:focus-visible { outline: 2px solid var(--zf-green-500); outline-offset: -2px; }
.brow.is-on { background: var(--zf-tint, rgba(0,144,74,.06)); }
.brow--head { min-height: 0; padding-top: 9px; padding-bottom: 9px; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); cursor: default; }
.brow--head:hover { background: var(--zf-surface-2); }
.brow--head > span:nth-child(4), .brow--head > span:nth-child(5) { text-align: right; }
.brow .kc-flag { width: 34px; height: 34px; border-radius: 10px; font-size: 11px; }
.bchk { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 6px; border: 1.5px solid var(--zf-line-2); color: transparent; transition: background-color var(--zf-dur-pop), border-color var(--zf-dur-pop); }
.bchk svg { width: 13px; height: 13px; }
.brow.is-on .bchk { background: var(--zf-green-600); border-color: var(--zf-green-600); color: #fff; }
.brow.is-owned { cursor: default; }
.brow.is-owned .bchk { border-style: dashed; opacity: .5; }
.brow.is-owned .brow__n b { color: var(--zf-text-2); }
.brow__n { min-width: 0; }
.brow__n b { display: block; font-size: 14px; font-weight: 600; color: var(--zf-text); }
.brow__n small { display: block; font-size: 12px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.brow__c { text-align: right; font-size: 13px; color: var(--zf-text); white-space: nowrap; }
.brow__c small, .brow__p small { font-size: 12px; color: var(--zf-text-3); }
.brow__p { text-align: right; white-space: nowrap; }
.brow__p b { font-size: 15px; color: var(--zf-text); }
.brow__p em { display: block; font-style: normal; font-size: 11.5px; color: var(--zf-text-3); }
.brow__s { display: flex; align-items: center; justify-content: flex-end; gap: 10px; font-size: 12.5px; white-space: nowrap; }
.brow__s small { color: var(--zf-text-3); }
.brow__s small.is-on { color: var(--zf-green-700); font-weight: 600; }
.brow__s small.is-bad { color: #B23A26; font-weight: 600; }
.brow__s .zf-link { font-size: 13px; font-weight: 600; }
.bgrp { display: flex; align-items: baseline; gap: 10px; padding: 8px 20px 6px; background: var(--zf-surface-2); border-bottom: 1px solid var(--zf-line); }
.bgrp b { font-size: 12.5px; font-weight: 700; color: var(--zf-text-2); letter-spacing: .04em; }
.bgrp small { font-size: 12px; color: var(--zf-text-3); }
.blist > :last-child { border-bottom: 0; border-radius: 0 0 16px 16px; }

.bbar { position: sticky; bottom: 16px; z-index: 30; display: flex; align-items: center; gap: 20px; margin-top: -8px; padding: 12px 12px 12px 20px; border-radius: 18px; background: rgb(var(--zf-surface-rgb) / .94); border: 1px solid var(--zf-line); box-shadow: 0 18px 40px -20px rgba(16,42,67,.35); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.bbar__sel { display: flex; align-items: center; gap: 12px; flex: 1; min-width: 0; font-size: 13.5px; color: var(--zf-text-3); }
.bbar.is-on .bbar__sel { color: var(--zf-text-2); }
.bbar__sel b { color: var(--zf-text); }
.bbar__flags { display: flex; gap: 4px; }
.bbar__flags i { height: 22px; padding: 0 7px; border-radius: 6px; background: var(--zf-ink-800); color: #fff; font: 700 11px/22px var(--zf-sans); font-style: normal; letter-spacing: .04em; }
.bbar__sum { display: flex; align-items: baseline; gap: 8px; }
.bbar__sum s { font-size: 13px; color: var(--zf-text-3); }
.bbar__sum b { font-size: 24px; font-weight: 700; color: var(--zf-text); letter-spacing: -.02em; }
.bbar__sum small { font-size: 12px; color: var(--zf-text-3); }
.bbar .zf-btn svg { width: 16px; height: 16px; }
[data-theme="dark"] .bbar { background: rgba(20,37,58,.95); box-shadow: 0 18px 40px -20px rgba(0,0,0,.7); }
[data-theme="dark"] .bbar__flags i { background: #2A3B50; }
[data-theme="dark"] .bterm button.is-on { box-shadow: 0 1px 2px rgba(0,0,0,.4); }
[data-theme="dark"] .bterm button i { color: #7FD7AA; }
@media (max-width: 1320px) {
  .brow { grid-template-columns: 20px 34px minmax(0, 1fr) 90px 140px 132px; gap: 12px; }
}
.brow.is-owned .bchk { visibility: hidden; }

/* r17.3：开通市场分页 */
.bpager { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 16px 10px 20px; border-top: 1px solid var(--zf-line); font-size: 12.5px; color: var(--zf-text-3); }
.bpager__btns { display: flex; align-items: center; gap: 4px; }
.bpager .zf-iconbtn { width: 30px; height: 30px; border-radius: 8px; }
.bpager .zf-iconbtn svg { width: 15px; height: 15px; transform: rotate(90deg); }
.bpager .zf-iconbtn:last-child svg { transform: rotate(-90deg); }
.bpager .zf-iconbtn:disabled { opacity: .35; pointer-events: none; }
.bpager__n { min-width: 30px; height: 30px; padding: 0 8px; border-radius: 8px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); font-variant-numeric: tabular-nums; transition: background-color var(--zf-dur-hover); }
.bpager__n:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.bpager__n.is-on { background: var(--zf-green-50); color: var(--zf-green-800); }
[data-theme="dark"] .bpager__n.is-on { background: rgba(47,190,121,.14); color: #7FD7AA; }
.blist > .brow:last-of-type { border-bottom: 0; }

/* r17.5：市场 Key 页——「开通更多市场」移到工具栏，表格底部为分页条 */
.ktable .toolbar__end .zf-btn svg { width: 15px; height: 15px; }
.ktable .bpager { border-top: 1px solid var(--zf-line); }
.ktable .keyrow:nth-last-child(2) { border-bottom: 0; }

/* r17.6：所有列表行悬停统一为订单表的效果——浅绿底 + 左侧 3px 品牌绿竖条 */
.keyrow:not(.keyrow--head):hover, .vrow:not(.vrow--head):hover, .brow:not(.brow--head):hover,
.trow:hover, .mlist__row:hover, .litem:hover, .arow:hover {
  background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600);
}
.brow.is-owned:hover { background: rgba(0,144,74,.025); }
.keyrow, .vrow, .brow, .trow, .mlist__row, .litem, .arow { transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
[data-theme="dark"] .keyrow:not(.keyrow--head):hover, [data-theme="dark"] .vrow:not(.vrow--head):hover, [data-theme="dark"] .brow:not(.brow--head):hover,
[data-theme="dark"] .trow:hover, [data-theme="dark"] .mlist__row:hover, [data-theme="dark"] .litem:hover, [data-theme="dark"] .arow:hover { background: rgba(47,190,121,.06); }
.arow:hover { border-radius: 0 12px 12px 0; }


/* r17.13：恢复两行布局（r17.7 单行已撤回）；Key 列保留最小宽度，避免掩码截断 */
.ktable .keyrow { grid-template-columns: 20px 36px minmax(0, 1.2fr) minmax(150px, .9fr) 64px 180px 92px 112px; gap: 12px; }
@media (max-width: 1320px) { .ktable .keyrow { grid-template-columns: 20px 34px minmax(0, 1fr) minmax(146px, .9fr) 56px 150px 88px 108px; gap: 10px; } }

/* r17.8：选中的行与悬停一样有左侧品牌绿竖条（开通市场勾选、市场 Key 批量选择） */
.brow.is-on, .keyrow.is-picked { background: rgba(0,144,74,.06); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.brow.is-on:hover, .keyrow.is-picked:hover { background: rgba(0,144,74,.08); }
[data-theme="dark"] .brow.is-on, [data-theme="dark"] .keyrow.is-picked { background: rgba(47,190,121,.09); }

/* r17.9：批量操作条未激活时不占位（之前透明但仍占 60px，把底部提示条推远）；会员页提示条去掉额外上边距，统一用内容区间距 */
.batchbar:not(.is-on) { display: none; }
.pc-body .callout { margin-top: 0; }


/* r17.10：活动记录——日期放进行内「时间」列（今天 / 昨天 / 日期 + 时刻），去掉日期分组条；底部分页 */
.trow__type { flex: none; width: 56px; display: flex; justify-content: center; }
.trow__when { flex: none; width: 128px; text-align: right; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; }
.trow--head { min-height: 0; padding-top: 9px; padding-bottom: 9px; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); }
.trow--head:hover { background: var(--zf-surface-2); box-shadow: none; }
.trow--head .trow__ic { background: none; height: 0; }


/* r17.11：概览去掉与 Key 列表重复的到期提醒条，「一起续费」并入「我的市场 Key」标题行 */
.msec__due { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; color: #A86400; }
.msec__due svg { width: 15px; height: 15px; }
.msec__due + .zf-btn + .zf-link { margin-left: 8px; }
.msec__h .zf-btn { flex: none; }
[data-theme="dark"] .msec__due { color: #F0B354; }

/* r17.12：即将到期 / 已过期的行用渐变底色突出（与原提醒条同一种暖色渐变），左侧竖条用对应状态色；概览列表与市场 Key 表一致 */
.vrow--expiring, .keyrow--expiring { background: linear-gradient(90deg, rgba(224,138,0,.12), rgba(224,138,0,.04) 55%, rgba(224,138,0,0)); box-shadow: inset 3px 0 0 #E08A00; }
.vrow--expired, .keyrow--expired { background: linear-gradient(90deg, rgba(194,65,45,.10), rgba(194,65,45,.03) 55%, rgba(194,65,45,0)); box-shadow: inset 3px 0 0 #D2553F; }
.vrow--expiring:hover, .keyrow--expiring:hover { background: linear-gradient(90deg, rgba(224,138,0,.16), rgba(224,138,0,.06) 55%, rgba(224,138,0,.02)); box-shadow: inset 3px 0 0 #E08A00; }
.vrow--expired:hover, .keyrow--expired:hover { background: linear-gradient(90deg, rgba(194,65,45,.14), rgba(194,65,45,.05) 55%, rgba(194,65,45,.02)); box-shadow: inset 3px 0 0 #D2553F; }
.keyrow--expiring.is-picked, .keyrow--expired.is-picked { box-shadow: inset 3px 0 0 var(--zf-green-600); }
[data-theme="dark"] .vrow--expiring, [data-theme="dark"] .keyrow--expiring { background: linear-gradient(90deg, rgba(240,179,84,.14), rgba(240,179,84,.04) 55%, rgba(240,179,84,0)); }
[data-theme="dark"] .vrow--expired, [data-theme="dark"] .keyrow--expired { background: linear-gradient(90deg, rgba(240,138,120,.13), rgba(240,138,120,.04) 55%, rgba(240,138,120,0)); }

/* r17.14：开通市场页已开通市场沿用状态底色（即将到期琥珀、已过期浅红），状态文字同色 */
.brow--expiring { background: linear-gradient(90deg, rgba(224,138,0,.12), rgba(224,138,0,.04) 55%, rgba(224,138,0,0)); box-shadow: inset 3px 0 0 #E08A00; }
.brow--expired { background: linear-gradient(90deg, rgba(194,65,45,.10), rgba(194,65,45,.03) 55%, rgba(194,65,45,0)); box-shadow: inset 3px 0 0 #D2553F; }
.brow--expiring:hover { background: linear-gradient(90deg, rgba(224,138,0,.16), rgba(224,138,0,.06) 55%, rgba(224,138,0,.02)); box-shadow: inset 3px 0 0 #E08A00; }
.brow--expired:hover { background: linear-gradient(90deg, rgba(194,65,45,.14), rgba(194,65,45,.05) 55%, rgba(194,65,45,.02)); box-shadow: inset 3px 0 0 #D2553F; }
.brow__s small.is-warn { color: #A86400; font-weight: 600; }
[data-theme="dark"] .brow--expiring { background: linear-gradient(90deg, rgba(240,179,84,.14), rgba(240,179,84,.04) 55%, rgba(240,179,84,0)); }
[data-theme="dark"] .brow--expired { background: linear-gradient(90deg, rgba(240,138,120,.13), rgba(240,138,120,.04) 55%, rgba(240,138,120,0)); }
[data-theme="dark"] .brow__s small.is-warn { color: #F0B354; }

/* r17.15：开通市场页里，已开通的市场四种状态都给底色，和可购买的市场区分开：使用中浅绿、已停用浅灰、即将到期琥珀、已过期浅红 */
.brow--active { background: linear-gradient(90deg, rgba(0,144,74,.09), rgba(0,144,74,.03) 55%, rgba(0,144,74,0)); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.brow--disabled { background: linear-gradient(90deg, rgba(16,42,67,.07), rgba(16,42,67,.02) 55%, rgba(16,42,67,0)); box-shadow: inset 3px 0 0 var(--zf-ink-300); }
.brow--active:hover { background: linear-gradient(90deg, rgba(0,144,74,.13), rgba(0,144,74,.05) 55%, rgba(0,144,74,.02)); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.brow--disabled:hover { background: linear-gradient(90deg, rgba(16,42,67,.10), rgba(16,42,67,.03) 55%, rgba(16,42,67,.01)); box-shadow: inset 3px 0 0 var(--zf-ink-300); }
.brow--active .brow__s small { color: var(--zf-green-700); font-weight: 600; }
[data-theme="dark"] .brow--active { background: linear-gradient(90deg, rgba(47,190,121,.13), rgba(47,190,121,.04) 55%, rgba(47,190,121,0)); }
[data-theme="dark"] .brow--disabled { background: linear-gradient(90deg, rgba(220,232,244,.07), rgba(220,232,244,.02) 55%, rgba(220,232,244,0)); box-shadow: inset 3px 0 0 #3A4D63; }
[data-theme="dark"] .brow--active .brow__s small { color: #7FD7AA; }

/* r17.18：WS 控制台不显示滚动条（内容多时仍可滚轮滚动）；空状态改为居中，不再用上内边距撑高导致出现滚动条 */
.term--wide .term__body { overflow-y: auto; overflow-x: hidden; scrollbar-width: none; -ms-overflow-style: none; }
.term--wide .term__body::-webkit-scrollbar { display: none; width: 0; height: 0; }
.term--wide .term__body[data-empty] { display: grid; place-items: center; }
.term--wide .term__empty { padding: 0; }
.term--wide .term__empty { min-height: 0; height: auto; } /* 原 min-height 400px + 上下内边距超过 420px 高度，导致出现滚动条 */


/* r17.19：账户设置——一个面板 + 标签切换 + 三列行列表（名称 | 内容 | 操作），不用图标 */
.sset { overflow: hidden; }
.srow2 { display: grid; grid-template-columns: 180px minmax(0, 1fr) auto; align-items: center; gap: 20px; min-height: 60px; padding: 10px 24px; border-bottom: 1px solid var(--zf-line); font-size: 14px; transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.srow2:last-child { border-bottom: 0; }
.srow2:not(.srow2--head):hover { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.srow2__l { display: flex; align-items: center; gap: 8px; color: var(--zf-text-2); font-weight: 500; }
.srow2__l .zf-tag { height: 20px; font-size: 11px; }
.srow2__v { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 12px; min-width: 0; color: var(--zf-text); }
.srow2__v b { font-weight: 600; }
.srow2__v small { font-size: 12.5px; color: var(--zf-text-3); }
.srow2__a { justify-self: end; display: flex; align-items: center; }
.slogo2 { display: inline-grid; place-items: center; min-width: 24px; height: 24px; padding: 0 5px; border-radius: 6px; background: var(--zf-ink-50); font: 700 10.5px/1 var(--zf-sans); color: var(--zf-text); }
.srow2--head { min-height: 0; padding-top: 9px; padding-bottom: 9px; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); }
.srow2--head > span:last-child { justify-self: end; }
.srow2--log { min-height: 48px; }
.srow2--log .srow2__a { font-size: 13px; color: var(--zf-text-3); }
.srow2--danger .srow2__l { color: #B23A26; }
[data-theme="dark"] .srow2:not(.srow2--head):hover { background: rgba(47,190,121,.06); }
[data-theme="dark"] .srow2--danger .srow2__l { color: #F08A78; }


/* =====================================================================
   r18（2026-11-05）：开发文档按会员中心的偏好细调
   两栏（左目录 + 正文）；各节放进一个正文面板，不再一节一卡；接口信息并入页头；
   去掉英文小标签与重复说明；首页用紧凑列表替代图标卡；WS 标签不用紫色；代码区不显示滚动条。
   ===================================================================== */
.dlay, .dlay--wide { grid-template-columns: 236px minmax(0, 1fr); gap: 28px; padding: 28px 0 96px; }

/* 侧栏：与会员中心菜单一致 */
.dside nav { padding: 10px; border-radius: 18px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); }
.dside nav a.is-on { background: var(--zf-green-50); box-shadow: none; }
.dside nav a.is-on::before { left: -10px; border-radius: 0 3px 3px 0; }
.dside__foot { display: grid; gap: 2px; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--zf-line); }
.dside nav .dside__foot a { font-size: 13.5px; }
[data-theme="dark"] .dside nav a.is-on { background: rgba(47,190,121,.12); color: #7FD7AA; }

/* 方法标签：GET 品牌绿，WS 墨蓝（不用紫色） */
.method--ws { background: rgba(16,42,67,.08); color: var(--zf-ink-800); }
.method--doc { background: rgba(16,42,67,.06); color: var(--zf-text-2); }
[data-theme="dark"] .method--ws { background: rgba(220,232,244,.1); color: #DCE6EF; }

/* 页头：标题 + 介绍 + 接口地址与操作 + 一行元信息 */
.dhead { padding: 0 0 4px; }
.dhead h1 { font-size: 30px; }
.dhead p { margin-top: 8px; font-size: 15px; line-height: 1.75; }
.dapi { display: flex; align-items: center; gap: 10px; margin-top: 18px; }
.dapi .endpoint { flex: 1; min-width: 0; margin: 0; height: 44px; padding: 0 6px 0 12px; border-radius: 12px; background: var(--zf-surface); border: 1px solid var(--zf-line); color: var(--zf-text); font-size: 13.5px; }
.dapi .endpoint .zf-mono { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dapi .endpoint .method { background: rgba(0,144,74,.12); color: var(--zf-green-800); }
.dapi .endpoint .method--ws { background: rgba(16,42,67,.08); color: var(--zf-ink-800); }
.dapi .endpoint .code__btn { color: var(--zf-text-3); background: none; }
.dapi .endpoint .code__btn:hover { color: var(--zf-text); background: var(--zf-ink-50); }
.dapi .zf-btn { flex: none; }
.dapi .zf-btn svg { width: 15px; height: 15px; }
.dmeta { display: flex; flex-wrap: wrap; gap: 8px 28px; margin: 14px 0 0; font-size: 13px; }
.dmeta div { display: flex; align-items: baseline; gap: 8px; }
.dmeta dt { color: var(--zf-text-3); }
.dmeta dd { margin: 0; color: var(--zf-text); font-weight: 600; }
.dmeta code { padding: 1px 6px; border-radius: 6px; background: var(--zf-ink-50); font: 500 12.5px var(--zf-mono); color: var(--zf-ink-800); }
[data-theme="dark"] .dapi .endpoint { background: var(--zf-surface); }
[data-theme="dark"] .dapi .endpoint .method--ws { background: rgba(220,232,244,.1); color: #DCE6EF; }
[data-theme="dark"] .dmeta code { background: rgba(220,232,244,.08); color: #DCE6EF; }

/* 页内标签：贴在正文面板上方 */
.dtabs { margin: 20px 0 0; }

/* 正文面板：各节之间用分隔线，不再一节一卡 */
.ddoc { margin-top: 14px; padding: 4px 32px; }
.ddoc .dsec { margin: 0; padding: 28px 0; background: none; border: 0; border-radius: 0; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; scroll-margin-top: 132px; }
.ddoc .dsec + .dsec { border-top: 1px solid var(--zf-line); }
.ddoc .dsec h2 { font-size: 21px; }
.ddoc .dsec h2 + * { margin-top: 12px; }
.ddoc .dsec h3 { margin: 24px 0 8px; font-size: 16px; }
.ddoc .dsec p, .ddoc .dsec li { font-size: 14.5px; line-height: 1.8; }
.ddoc .ptable { margin-top: 12px; }
.ddoc .cblock { margin-top: 12px; }
.dnote { margin-top: 12px !important; font-size: 13px !important; color: var(--zf-text-3) !important; }
.dnext { margin-top: 16px; }
.dnext a { padding: 14px 18px; border-radius: 14px; }
.dnext a:hover { transform: none; box-shadow: inset 3px 0 0 var(--zf-green-600); background: rgba(0,144,74,.03); }
.dnext a:last-child:hover { box-shadow: inset -3px 0 0 var(--zf-green-600); }

/* 首页与指南：紧凑列表行（悬停效果与会员中心一致） */
.dlist { padding: 0; }
.dlist .mpanel__h { padding: 16px 20px 12px; }
.drow { display: flex; align-items: center; gap: 14px; min-height: 60px; padding: 10px 20px; border-top: 1px solid var(--zf-line); color: var(--zf-text); transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
a.drow:hover { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.drow .method { flex: none; margin: 0; min-width: 40px; }
.drow__t { flex: 1; min-width: 0; }
.drow__t b { display: block; font-size: 14.5px; font-weight: 600; }
.drow__t small { display: block; margin-top: 2px; font-size: 12.5px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.drow__path { flex: none; padding: 2px 8px; border-radius: 6px; background: var(--zf-ink-50); font: 500 12.5px var(--zf-mono); color: var(--zf-ink-800); }
.drow__link { flex: none; font-size: 13px; font-weight: 600; color: var(--zf-green-700); }
.drow__go { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; color: var(--zf-text-3); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.drow__go svg { width: 15px; height: 15px; }
a.drow:hover .drow__go { background: var(--zf-green-600); color: #fff; }
.drow__n { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 8px; background: var(--zf-ink-50); font: 700 12.5px var(--zf-sans); color: var(--zf-text-2); }
.dlist--flat { margin-top: 12px; border: 1px solid var(--zf-line); border-radius: 14px; overflow: hidden; }
.dlist--flat .drow:first-child { border-top: 0; }
.dgrid2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; margin-top: 16px; align-items: start; }
.dmain > .dlist:first-of-type { margin-top: 22px; }
[data-theme="dark"] .drow__path { background: rgba(220,232,244,.08); color: #DCE6EF; }
[data-theme="dark"] a.drow:hover { background: rgba(47,190,121,.06); }

/* 表格分页（市场列表） */
.ptable-wrap { margin-top: 12px; border: 1px solid var(--zf-line); border-radius: 14px; overflow: hidden; }
.ptable-wrap .ptable { margin: 0; border: 0; border-radius: 0; }
.ptable-wrap .bpager { border-top: 1px solid var(--zf-line); }
.ptable tbody tr { transition: background-color var(--zf-dur-hover); }
.ptable tbody tr:hover td { background: rgba(0,144,74,.03); }
.ptable tbody tr:hover td:first-child { box-shadow: inset 3px 0 0 var(--zf-green-600); }

/* 代码区与 Explorer 输出：可滚动但不显示滚动条 */
.cblock pre, .exp__out, .exp__preview { scrollbar-width: none; -ms-overflow-style: none; }
.cblock pre::-webkit-scrollbar, .exp__out::-webkit-scrollbar, .exp__preview::-webkit-scrollbar { display: none; width: 0; height: 0; }

/* r18：API Explorer——接口选择改为一行切换；去掉输入框长说明 */
.exp__ep { display: inline-flex; grid-template-columns: none; gap: 2px; padding: 3px; border-radius: 999px; background: var(--zf-ink-50); justify-self: start; }
.exp__ep button { height: 32px; padding: 0 14px; border: 0; border-radius: 999px; background: none; font-size: 13px; font-weight: 600; color: var(--zf-text-2); white-space: nowrap; }
.exp__ep button:hover { border: 0; color: var(--zf-text); }
.exp__ep button.is-on { background: var(--zf-surface); color: var(--zf-text); box-shadow: 0 1px 2px rgba(16,42,67,.12); border: 0; }
[data-theme="dark"] .exp__ep button.is-on { box-shadow: 0 1px 2px rgba(0,0,0,.4); }
.exp + .dnote { margin-top: 14px !important; }

/* r18.1：代码高亮改为品牌配色——关键字 / JSON 键为浅品牌绿，字符串为亮白，数字与布尔为浅墨蓝，注释为暗墨蓝；不再用粉红、黄、亮蓝 */
.cblock pre { color: #B9C8D6; }
.cblock pre .k, .exp__out .k { color: #7FD7AA; }
.cblock pre .s, .exp__out .s { color: #EEF3F8; }
.cblock pre .n, .exp__out .n, .cblock pre .b, .exp__out .b { color: #9DB9D3; }
.cblock pre .f { color: #7FD7AA; }
.cblock pre .c, .exp__out .c { color: #5F7A94; font-style: italic; }
.exp__key .zf-iconbtn { top: auto; bottom: 4px; color: var(--zf-text-3); } /* 原 top:4px 相对整个字段（含标签），按钮浮在输入框上方 */
.exp__key .zf-iconbtn svg { width: 17px; height: 17px; }
.exp__key .zf-input { padding-right: 44px; }
.exp__key .zf-iconbtn { bottom: 6px; }

/* r18.2：文档正文面板里的表格 / 规则表 / 清单 / 步骤列表去掉自己的外框与圆角，只留行分隔线，避免「框里套框」；代码块保留 */
.ddoc .ptable, .ddoc .ptable-wrap { border: 0; border-radius: 0; overflow: visible; }
.ddoc .ptable { border-top: 1px solid var(--zf-line); }
.ddoc .ptable th { background: none; height: 38px; padding: 0 14px 0 0; }
.ddoc .ptable td { padding-left: 0; }
.ddoc .ptable tr:last-child td { border-bottom: 1px solid var(--zf-line); }
.ddoc .ptable tbody tr:hover td { background: rgba(0,144,74,.03); }
.ddoc .ptable tbody tr:hover td:first-child { box-shadow: inset 3px 0 0 var(--zf-green-600); padding-left: 12px; }
.ddoc .ptable td:first-child { transition: padding-left var(--zf-dur-hover); }
.ddoc .ptable-wrap .ptable tr:last-child td { border-bottom: 0; }
.ddoc .ptable-wrap .bpager { padding-left: 0; padding-right: 0; }
.ddoc .kv { gap: 0 32px; background: none; border: 0; border-radius: 0; border-top: 1px solid var(--zf-line); }
.ddoc .kv div { padding: 12px 0; background: none; border-bottom: 1px solid var(--zf-line); }
.ddoc .dlist--flat { border: 0; border-radius: 0; border-top: 1px solid var(--zf-line); border-bottom: 1px solid var(--zf-line); }
.ddoc .dlist--flat .drow { padding-left: 4px; padding-right: 4px; }
.ddoc .dlist--flat a.drow:hover { padding-left: 14px; }
.ddoc .check { padding: 0; border: 0; border-radius: 0; background: none; }
.ddoc .check__list { gap: 0 32px; border-top: 1px solid var(--zf-line); }
.ddoc .check__item { height: 48px; padding: 0 4px; border: 0; border-radius: 0; background: none; border-bottom: 1px solid var(--zf-line); transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover), padding-left var(--zf-dur-hover); }
.ddoc .check__item:hover { border-color: var(--zf-line); background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); padding-left: 14px; }
.ddoc .check__item.is-on { background: none; border-color: var(--zf-line); }


/* r18.3：文档正文面板与会员中心列表一致——
   页内标签移入面板顶部（吸顶工具栏）；表格 / 步骤列表行贯通到面板边缘，悬停时内容不再位移；
   检查清单固定内边距；首页两列等高；正文里的提示改为无外框的左侧色条 */
.ddoc { padding: 0; overflow: visible; }
.ddoc .dsec { padding: 28px 32px; }
.ddoc > .dtabs { position: sticky; top: 64px; z-index: 6; margin: 0; padding: 8px 24px; border: 0; border-bottom: 1px solid var(--zf-line); border-radius: 20px 20px 0 0; background: rgb(var(--zf-surface-rgb) / .92); box-shadow: none; -webkit-backdrop-filter: blur(16px) saturate(1.4); backdrop-filter: blur(16px) saturate(1.4); }
.ddoc > .dtabs + .dsec { border-top: 0; }
.ddoc .dsec { scroll-margin-top: 124px; }

/* 表格：行贯通面板，首尾单元格内边距 32px；悬停只加底色与左侧绿条，不改内边距 */
.ddoc .ptable, .ddoc .ptable-wrap { width: calc(100% + 64px); margin-left: -32px; margin-right: -32px; }
.ddoc .ptable-wrap .ptable { width: 100%; margin: 0; }
.ddoc .ptable th:first-child, .ddoc .ptable td:first-child { padding-left: 32px; }
.ddoc .ptable th:last-child, .ddoc .ptable td:last-child { padding-right: 32px; }
.ddoc .ptable tbody tr:hover td:first-child { padding-left: 32px; box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ddoc .ptable td:first-child { transition: none; }
.ddoc .ptable-wrap .bpager { padding: 10px 32px; }
.ddoc .ptable-wrap .ptable tr:last-child td { border-bottom: 1px solid var(--zf-line); }
.ddoc .ptable-wrap .bpager { border-top: 0; border-bottom: 1px solid var(--zf-line); }

/* 步骤 / 策略列表：同样贯通，固定内边距 */
.ddoc .dlist--flat { width: calc(100% + 64px); margin-left: -32px; margin-right: -32px; }
.ddoc .dlist--flat .drow, .ddoc .dlist--flat a.drow:hover { padding-left: 32px; padding-right: 32px; }

/* 检查清单：固定内边距，悬停不位移 */
.ddoc .check__item, .ddoc .check__item:hover { padding-left: 12px; padding-right: 12px; }

/* 正文提示：无外框，只用左侧色条 */
.ddoc .callout { margin-top: 12px; padding: 10px 14px; border: 0; border-radius: 0; background: rgba(0,144,74,.05); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ddoc .callout--warn { background: rgba(224,138,0,.07); box-shadow: inset 3px 0 0 #E08A00; }
[data-theme="dark"] .ddoc .callout--warn { background: rgba(240,179,84,.08); }

/* 首页两列等高 */
.dgrid2 { align-items: stretch; }
.dgrid2 > .mpanel { display: flex; flex-direction: column; }
.ddoc > .dtabs { border-radius: 23px 23px 0 0; } /* 与 panel2 的 24px 圆角对齐（减去 1px 边框） */

/* r18.4：文档页头不再显示介绍段落，标题与下方内容间距随之收紧 */
.dhead h1 + .dapi, .dhead h1 + .dtabs { margin-top: 14px; }
.dhead > .crumb + h1 { margin-top: 0; }

/* r19：市场覆盖页去掉价格列，每行末尾为「开通」（跳到价格页并预选该市场）；价格页页头链接回市场覆盖 */
.dtable td .mk-open { white-space: nowrap; }
.ph__aside { display: flex; align-items: center; gap: 14px; }
.ph__aside .zf-link { font-size: 13.5px; }


/* =====================================================================
   r20（2026-11-05）：「市场覆盖」并入「市场与价格」（pricing.html）
   列表沿用会员中心开通页（.blist/.brow/.bterm/.bbar/.bpager），多一列「今日状态」与「详情」
   ===================================================================== */
.mklist { margin-top: 8px; }
.mklist .btool { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 0; padding: 12px 16px; border: 0; border-bottom: 1px solid var(--zf-line); border-radius: 0; background: none; box-shadow: none; }
.mklist .btool .mk__search { flex: 1; min-width: 220px; width: auto; height: 36px; box-shadow: none; }
.mklist .btool .zf-seg { flex: none; }
.mklist .btool .zf-seg button { white-space: nowrap; }
.brow--mk { grid-template-columns: 20px 34px minmax(0, 1fr) 150px 110px 170px 56px; }
.brow--mk.brow--head > span:nth-child(5), .brow--mk.brow--head > span:nth-child(6) { text-align: right; }
.brow__st { display: grid; gap: 3px; justify-items: start; }
.brow__st small { font-size: 12px; color: var(--zf-text-3); white-space: nowrap; }
.brow__d { display: flex; justify-content: flex-end; }
.brow__d .zf-link { font-size: 13px; font-weight: 600; }
.mklist .keyadd { width: 100%; border-top: 1px solid var(--zf-line); border-bottom: 0; text-align: left; }
.mklist .bpager { border-top: 1px solid var(--zf-line); }
.mklist + .bbar { margin-top: 16px; }
.ph__live { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--zf-text-3); }
@media (max-width: 1320px) {
  .brow--mk { grid-template-columns: 20px 34px minmax(0, 1fr) 132px 92px 150px 48px; gap: 12px; }
}
.brow--mk.brow--head > span:nth-child(4) { text-align: left; } /* 覆盖开通页表头第 4 列右对齐 */


/* r20.1：价格规则从四张带图标、角光的卡片，合成一条玻璃摘要（与会员中心账户横幅同一做法） */
.rules--strip { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 0; margin-top: 28px; border-radius: 20px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); overflow: hidden; }
.rules--strip .rule { display: grid; gap: 4px; padding: 18px 24px; border: 0; border-radius: 0; background: none; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
.rules--strip .rule + .rule { border-left: 1px solid var(--zf-line); }
.rules--strip .rule::before { display: none; }
.rules--strip .rule span { font-size: 13px; color: var(--zf-text-3); }
.rules--strip .rule b { margin: 0; font-size: 26px; font-weight: 700; line-height: 1.2; letter-spacing: -.02em; color: var(--zf-text); }
.rules--strip .rule b small { margin-left: 2px; font-size: 14px; font-weight: 600; letter-spacing: 0; color: var(--zf-text-3); }
.rules--strip .rule:not(:first-child) b { color: var(--zf-green-700); }
.rules--strip .rule em { font-style: normal; font-size: 12.5px; color: var(--zf-text-3); }
[data-theme="dark"] .rules--strip .rule:not(:first-child) b { color: #7FD7AA; }

/* r20.2：恢复原价格页的地区分组列表与右侧「已选市场」；地区分组可通过 #ap 等定位 */
.pgrp { scroll-margin-top: 96px; }


/* r20.3：价格页列表——地区作为顶部切换（带数量），列表连续排列并分页；每行「详情」打开市场资料 */
.pgrp--flat { overflow: hidden; }
.pgrp--flat .pgrp__head { padding: 10px 14px; }
.pgrp--flat .pgrp__head .zf-seg button { white-space: nowrap; }
.pgrp--flat .pgrp__head h3::before { display: none; }
.plist .prow { grid-template-columns: 36px minmax(0, 1fr) 120px 170px 44px 40px; }
.prow__info { justify-self: end; font-size: 13px; font-weight: 600; }
.pgrp--flat .bpager { padding: 10px 16px 10px 20px; border-top: 1px solid var(--zf-line); }
.pgrp--flat .pgrp__rows .prow:last-child { border-bottom: 0; }


/* r20.4：价格页细节——「详情」平时为浅灰、悬停行时变绿；列表头部加搜索；「Key 都包含」改为一条玻璃摘要；右侧卡片两个操作 */
.plist .prow__info { color: var(--zf-text-3); font-weight: 500; }
.plist .prow:hover .prow__info, .plist .prow__info:focus-visible { color: var(--zf-green-700); font-weight: 600; }
.pgrp--flat .pgrp__head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.pgrp--flat .pgrp__head .mk__search { flex: 1; min-width: 180px; width: auto; height: 36px; box-shadow: none; }
.pgrp--flat .pgrp__head .zf-seg { flex: none; }
.pgrp--flat .tempty { padding: 32px 20px; text-align: center; font-size: 13.5px; color: var(--zf-text-3); }
.pgrp--flat .tempty .zf-link { margin-left: 4px; font-size: 13.5px; }
.incl--strip { gap: 0; border-radius: 20px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); overflow: hidden; }
.incl--strip .incl__i { padding: 20px 24px; border: 0; border-radius: 0; background: none; box-shadow: none; }
.incl--strip .incl__i:hover { transform: none; box-shadow: none; }
.incl--strip .incl__i + .incl__i { border-left: 1px solid var(--zf-line); }
.incl--strip .incl__i .tile__ico { display: none; }
.incl--strip .incl__i b { margin-top: 0; font-size: 15.5px; }
.cta-card__acts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.cta-card__acts .zf-btn svg { width: 15px; height: 15px; }

/* r20.5：「已选市场」加入新市场时，原入场动效从右侧 14px 滑入，列表 overflow:auto 会瞬间出现横向滚动条；
   改为向下淡入（不横向位移），并隐藏列表滚动条（超过 5 个时仍可滚轮滚动） */
.sum__list { overflow-x: hidden; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; }
.sum__list::-webkit-scrollbar { display: none; width: 0; height: 0; }
.sum__item { animation-name: sumin2; }
@keyframes sumin2 { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; transform: none; } }

/* =====================================================================
   r21（2026-11-05）：交易日历交易所详情页 calendar-<代码>.html（tools/build_calendar_pages.py 生成）
   ===================================================================== */
.cal-lead { max-width: 820px; }
.cal-acts { display: flex; gap: 8px; align-items: center; }
.cal-acts .zf-btn svg { width: 15px; height: 15px; }
.cal-facts .rule b { font-size: 22px; }
.cal-next { display: grid; gap: 4px; }
.cal-next b { font-size: 22px; font-weight: 700; color: var(--zf-text); line-height: 1.2; }
.cal-next em { font-style: normal; font-size: 12.5px; color: var(--zf-text-3); }
.cal-st { display: inline-flex; align-items: center; gap: 8px; }
.cal-st i { width: 9px; height: 9px; border-radius: 50%; background: var(--zf-ink-300); }
.cal-st.is-open i { background: var(--zf-green-500); box-shadow: 0 0 0 3px rgba(16,168,98,.16); }
.cal-st.is-open { color: var(--zf-green-700); }
.cal-body { display: grid; gap: 20px; }
.cal-panel { overflow: hidden; }
.cal-h2 { font-size: 17px; }
.cal-table td { height: 52px; }
.cal-table tbody tr { cursor: default; }
.cal-table tr.is-past td { color: var(--zf-text-3); }
.cal-table tr.is-past td b { color: var(--zf-text-3); font-weight: 500; }
.cal-table tr.is-past .pill { opacity: .55; }
.cal-table tr.is-next td { background: rgba(0,144,74,.05); }
.cal-table tr.is-next td:first-child { box-shadow: inset 3px 0 0 var(--zf-green-600); }
.cal-table tr.is-today td { background: rgba(224,138,0,.07); }
.cal-src { padding: 12px 20px; border-top: 1px solid var(--zf-line); font-size: 12.5px; color: var(--zf-text-3); }
.cal-qa { margin: 0; border-top: 1px solid var(--zf-line); }
.cal-qa > div { padding: 14px 20px; border-bottom: 1px solid var(--zf-line); }
.cal-qa > div:last-child { border-bottom: 0; }
.cal-qa dt { font-size: 14.5px; font-weight: 600; color: var(--zf-text); }
.cal-qa dd { margin: 4px 0 0; font-size: 14px; line-height: 1.75; color: var(--zf-text-2); }
[data-theme="dark"] .cal-st.is-open { color: #7FD7AA; }

/* r21：交易日历主页的交易所名称为指向详情页的链接 */
.cal-link { color: inherit; }
.cal-link:hover b { color: var(--zf-green-700); text-decoration: underline; text-underline-offset: 3px; }
a.tl__it { color: inherit; }

/* =====================================================================
   r23（2026-11-05）：公告与动态 news.html / news-<id>.html（tools/build_news_pages.py 生成）
   配色：只用墨蓝与品牌绿；琥珀色只用于「即将进行 / 进行中」的维护（需要用户留意的状态）
   ===================================================================== */
/* 类型标签 */
.nw-tag { flex: none; display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 6px; background: var(--zf-ink-50); font-size: 12px; font-weight: 600; color: var(--zf-ink-700); white-space: nowrap; }
.nw-tag--product { background: var(--zf-green-50); color: var(--zf-green-800); }
.nw-mst { flex: none; display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 8px; border-radius: 999px; font-size: 12px; font-weight: 600; color: var(--zf-text-3); white-space: nowrap; }
.nw-mst::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.nw-mst.is-soon, .nw-mst.is-live { background: rgba(224,138,0,.12); color: #A86400; }
.nw-mst.is-live::before { animation: zfPulse 1.6s ease-in-out infinite; }
.nw-mst--lg { height: auto; padding: 0; background: none !important; font-size: 22px !important; }
.nw-mst--lg::before { width: 9px; height: 9px; }
.nw-mst--lg.is-done { color: var(--zf-text) !important; }
.nw-new { flex: none; display: inline-grid; place-items: center; height: 18px; padding: 0 6px; border-radius: 999px; background: var(--zf-green-600); font: 700 11px var(--zf-sans); font-style: normal; color: #fff; }

/* 置顶维护 */
.nw-pin { display: flex; align-items: center; gap: 16px; margin-top: 28px; padding: 16px 20px; border-radius: 20px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); color: var(--zf-text); transition: box-shadow var(--zf-dur-hover), transform var(--zf-dur-pop) var(--zf-ease-out); }
.nw-pin.is-soon, .nw-pin.is-live { background: linear-gradient(90deg, rgba(224,138,0,.13), rgba(224,138,0,.04) 55%, rgba(224,138,0,0)), var(--zf-card-bg); box-shadow: inset 3px 0 0 #E08A00, var(--zf-card-sh); }
.nw-pin:hover { transform: translateY(-1px); }
.nw-pin__ic { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border-radius: 12px; background: rgba(224,138,0,.14); color: #A86400; }
.nw-pin__ic svg { width: 20px; height: 20px; }
.nw-pin.is-done .nw-pin__ic { background: var(--zf-ink-50); color: var(--zf-text-3); }
.nw-pin__t { flex: 1; min-width: 0; display: grid; gap: 3px; }
.nw-pin__k { display: flex; align-items: center; gap: 8px; }
.nw-pin__st { font-size: 12.5px; font-weight: 600; color: #A86400; }
.nw-pin__t b { font-size: 15.5px; font-weight: 700; }
.nw-pin__t small { font-size: 13px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nw-pin__cd { flex: none; display: grid; justify-items: end; gap: 2px; padding-right: 6px; }
.nw-pin__cd em { font-style: normal; font-size: 12px; color: var(--zf-text-3); }
.nw-pin__cd b { font-size: 18px; font-weight: 700; color: var(--zf-text); }
.nw-pin:hover .drow__go { background: var(--zf-green-600); color: #fff; }

/* 列表 */
.nw-list { overflow: hidden; }
.nw-list .toolbar .mk__search { flex: 1; min-width: 200px; width: auto; }
.nw-list .toolbar .mk__search .zf-kbd { flex: none; height: 20px; }
.nw-readall { font-size: 13px; white-space: nowrap; }
.nw-filter { display: flex; align-items: center; gap: 12px; padding: 10px 20px; border-top: 1px solid var(--zf-line); background: var(--zf-green-50); font-size: 13px; color: var(--zf-green-800); }
.nw-filter .zf-link { font-size: 13px; }
.nw-row { display: flex; align-items: center; gap: 16px; min-height: 76px; padding: 14px 20px; border-top: 1px solid var(--zf-line); color: var(--zf-text); transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.nw-row[hidden] { display: none; }
.nw-row:hover { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.nw-row:hover .drow__go { background: var(--zf-green-600); color: #fff; }
.nw-row__t { flex: 1; min-width: 0; display: grid; gap: 5px; }
.nw-row__top { display: flex; align-items: center; gap: 10px; min-width: 0; }
.nw-row__top b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 15px; font-weight: 600; }
.nw-row:not(.is-unread) .nw-row__top b { font-weight: 500; }
.nw-row__t small { font-size: 13px; color: var(--zf-text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nw-row__d { flex: none; font-size: 13px; color: var(--zf-text-3); }
.nw-list .tempty { padding: 48px 20px; border-top: 1px solid var(--zf-line); }
.nw-list .bpager[hidden] { display: none; }
a.bpager__n { display: inline-grid; place-items: center; }

/* 侧栏：订阅与归档 */
.nw-subcard__p { font-size: 13.5px; line-height: 1.7; color: var(--zf-text-2); }
.nw-sub { display: flex; gap: 8px; margin-top: 14px; }
.nw-sub .zf-input { flex: 1; min-width: 0; height: 36px; font-size: 13.5px; }
.nw-sub .zf-input.is-error { border-color: #D2553F; box-shadow: 0 0 0 3px rgba(210,85,63,.12); }
.nw-sub__done { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 14px; padding: 9px 12px; border-radius: 10px; background: var(--zf-green-50); font-size: 13px; }
.nw-sub__done[hidden], .nw-sub[hidden] { display: none; }
.nw-sub__ok { display: inline-flex; align-items: center; gap: 6px; min-width: 0; color: var(--zf-green-800); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.nw-sub__ok svg { flex: none; width: 15px; height: 15px; }
.nw-sub__done .zf-link { flex: none; font-size: 12.5px; }
/* 待确认时文字较长：换行显示，不撑宽侧栏 */
.nw-subcard { min-width: 0; }
.nw-sub__done { align-items: flex-start; }
.nw-sub__ok { align-items: flex-start; white-space: normal; overflow-wrap: anywhere; line-height: 1.55; }
.nw-sub__ok svg { margin-top: 2px; }
.nw-rss { display: inline-flex; align-items: center; gap: 6px; margin-top: 14px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); }
.nw-rss svg { width: 15px; height: 15px; color: var(--zf-green-600); }
.nw-rss:hover { color: var(--zf-green-700); }
.nw-archcard { padding-bottom: 12px; }
.nw-arch { display: grid; margin: 0 -20px; }
.nw-arch button { display: flex; align-items: center; justify-content: space-between; height: 40px; padding: 0 20px; font-size: 13.5px; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover), color var(--zf-dur-hover); }
.nw-arch button i { font-style: normal; font-size: 12.5px; color: var(--zf-text-3); }
.nw-arch button:hover { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); color: var(--zf-text); }
.nw-arch button[aria-pressed="true"] { background: var(--zf-green-50); box-shadow: inset 3px 0 0 var(--zf-green-600); color: var(--zf-green-800); font-weight: 600; }

/* 详情页 */
.nw-meta { display: flex; align-items: center; gap: 12px; margin-top: 18px; font-size: 13px; color: var(--zf-text-3); }
.nw-meta time { color: var(--zf-text-2); }
.nw-h1 { max-width: 900px; margin-top: 12px; font-size: 38px; line-height: 1.25; }
.nw-lead { max-width: 820px; }
.nw-facts .rule b { font-size: 20px; }
.nw-facts .nw-facts__s { font-size: 15px !important; line-height: 1.5 !important; color: var(--zf-text) !important; }
.nw-art { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 24px; align-items: start; }
.nw-main { display: grid; gap: 16px; min-width: 0; }
.nw-body { padding: 32px 40px 36px; font-size: 15.5px; line-height: 1.85; color: var(--zf-text-2); }
.nw-body > * + * { margin-top: 14px; }
.nw-body h2 { margin-top: 28px; font-size: 19px; line-height: 1.4; color: var(--zf-text); }
.nw-body ul { display: grid; gap: 8px; padding: 0; list-style: none; }
.nw-body li { position: relative; padding-left: 18px; }
.nw-body li::before { content: ""; position: absolute; left: 2px; top: .8em; width: 6px; height: 6px; border-radius: 50%; background: var(--zf-green-500); }
/* 文章代码块（Markdown 文章，2026-11-07）：与开发文档代码块同色；长地址在代码块内横向滚动，不撑宽页面 */
.nw-body { min-width: 0; }
.nw-body pre { overflow-x: auto; margin-left: 0; margin-right: 0; padding: 14px 18px; border-radius: 10px; background: var(--zf-ink-900); font: 13px/1.8 var(--zf-mono); color: #B9C8D6; white-space: pre; scrollbar-width: thin; }
.nw-body pre code { padding: 0; background: none; color: inherit; font: inherit; border: 0; }
.nw-more { margin-top: 20px !important; }
.nw-more .zf-link { font-size: 14.5px; }
.nw-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 28px !important; padding-top: 20px; border-top: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-text-3); }
.nw-chip { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--zf-line); font-size: 13px; font-weight: 600; color: var(--zf-text); transition: border-color var(--zf-dur-hover), background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.nw-chip svg { width: 14px; height: 14px; color: var(--zf-green-600); }
.nw-chip:hover { border-color: var(--zf-green-300); background: var(--zf-green-50); color: var(--zf-green-800); }
.nw-pn { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.nw-pn__i { display: grid; gap: 4px; padding: 16px 20px; border-radius: 16px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); color: var(--zf-text); transition: box-shadow var(--zf-dur-hover), background-color var(--zf-dur-hover); }
.nw-pn__i.is-empty { visibility: hidden; }
.nw-pn__next { text-align: right; }
.nw-pn__i em { font-style: normal; font-size: 12.5px; color: var(--zf-text-3); }
.nw-pn__i b { font-size: 14.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
a.nw-pn__i:hover { box-shadow: inset 0 0 0 1px var(--zf-green-300), var(--zf-card-sh); }
a.nw-pn__i:hover b { color: var(--zf-green-800); }
.nw-share__btns { display: flex; gap: 8px; }
.nw-share__btns .zf-btn svg { width: 15px; height: 15px; }
.nw-rel { padding: 0; }
.nw-rel .drow__t small { white-space: nowrap; }
.nw-rel .drow__t b { font-size: 13.5px; line-height: 1.5; }

[data-theme="dark"] .nw-mst.is-soon, [data-theme="dark"] .nw-mst.is-live, [data-theme="dark"] .nw-pin__st { color: #F2B54A; }
[data-theme="dark"] .nw-pin__ic { color: #F2B54A; }
[data-theme="dark"] .nw-mst.is-soon:not(.nw-mst--lg), [data-theme="dark"] .nw-mst.is-live:not(.nw-mst--lg) { background: rgba(242,181,74,.14); }
[data-theme="dark"] .nw-filter, [data-theme="dark"] .nw-sub__done { background: rgba(47,190,121,.10); }
@keyframes nwPulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.nw-mst.is-live::before { animation: nwPulse 1.6s ease-in-out infinite; }
/* r23：会员中心通知面板底部两个入口并排 */
.app__notes-f2 { display: grid; grid-template-columns: 1fr auto; margin-top: 4px; border-top: 1px solid var(--zf-line); }
.app__notes-f2 .app__notes-f { margin-top: 0; border-top: 0; }
.app__notes-f2 .app__notes-f + .app__notes-f { padding: 0 16px; border-left: 1px solid var(--zf-line); color: var(--zf-text-2); }
/* r23.1：维护详情信息条——影响范围列更宽；状态文字在信息条内保持琥珀色（覆盖 .rules--strip 的绿色数字） */
.nw-facts { grid-template-columns: 1fr .8fr 1.4fr 1fr; }
.rules--strip .rule .nw-mst--lg.is-soon, .rules--strip .rule .nw-mst--lg.is-live { color: #A86400; }
[data-theme="dark"] .rules--strip .rule .nw-mst--lg.is-soon, [data-theme="dark"] .rules--strip .rule .nw-mst--lg.is-live { color: #F2B54A; }
[data-theme="dark"] .nw-tag { background: rgba(255,255,255,.08); color: var(--zf-text-2); }
[data-theme="dark"] .nw-tag--product { background: rgba(47,190,121,.16); color: #7FD7AA; }
[data-theme="dark"] .nw-chip:hover { background: rgba(47,190,121,.10); color: #7FD7AA; }
[data-theme="dark"] .nw-arch button[aria-pressed="true"] { background: rgba(47,190,121,.10); color: #7FD7AA; }
/* r25：置顶维护卡参与入场动画（自身的 transition 会覆盖 [data-reveal] 的淡入，这里合并） */
.nw-pin[data-reveal] { transition: opacity var(--zf-dur-reveal) var(--zf-ease-out) calc(var(--i, 0) * 70ms), transform var(--zf-dur-reveal) var(--zf-ease-out) calc(var(--i, 0) * 70ms), box-shadow var(--zf-dur-hover); }
.nw-pin[data-reveal].is-in:hover { transform: translateY(-1px); transition-delay: 0s; }

/* =====================================================================
   r26（2026-11-05）：登录 / 注册 / 找回密码 login.html（login.js）
   登录为主视图；注册从「还没有账号？注册」进入；找回密码从「忘记密码？」进入，分两步，完成后显示结果页
   ===================================================================== */
.au { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 48px; align-items: center; width: min(1200px, calc(100% - 64px)); min-height: calc(100vh - 76px); margin: 0 auto; padding: 48px 0 72px; }
.au__side h1 { margin-top: 18px; font-size: 46px; line-height: 1.2; letter-spacing: -.02em; }
.au__desc { margin-top: 16px; max-width: 460px; font-size: 16.5px; line-height: 1.75; color: var(--zf-text-2); }
.au__list { max-width: 460px; margin: 32px 0 0; padding: 0; list-style: none; border-radius: 20px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); -webkit-backdrop-filter: blur(20px) saturate(1.5); backdrop-filter: blur(20px) saturate(1.5); overflow: hidden; }
.au__list li { display: flex; align-items: center; gap: 14px; padding: 16px 20px; }
.au__list li + li { border-top: 1px solid var(--zf-line); }
.au__ico { flex: none; display: grid; place-items: center; width: 38px; height: 38px; border-radius: 11px; background: var(--zf-green-50); color: var(--zf-green-700); }
.au__ico svg { width: 18px; height: 18px; }
.au__list b { display: block; font-size: 14.5px; font-weight: 600; color: var(--zf-text); }
.au__list small { display: block; margin-top: 2px; font-size: 13px; color: var(--zf-text-3); }

.au__main { display: grid; justify-items: center; }
.au__card { width: 100%; max-width: 440px; padding: 36px 36px 30px; border-radius: 24px; background: var(--zf-surface); border: 1px solid var(--zf-line); box-shadow: 0 1px 2px rgba(16,42,67,.04), 0 30px 60px -30px rgba(16,42,67,.28); overflow: hidden; }
.au__view { display: grid; gap: 18px; }
.au__view[hidden] { display: none; }
.au__head h2 { font-size: 26px; line-height: 1.3; letter-spacing: -.01em; }
.au__head p { margin-top: 6px; font-size: 14px; color: var(--zf-text-3); }
.au__head a { margin-left: 2px; font-weight: 600; color: var(--zf-green-700); }
.au__head a:hover { text-decoration: underline; text-underline-offset: 3px; }

.au__sso { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.au__ssob { display: inline-flex; align-items: center; justify-content: center; gap: 10px; height: 46px; border-radius: 12px; border: 1px solid var(--zf-line); background: var(--zf-surface); font-size: 14.5px; font-weight: 600; color: var(--zf-text); transition: border-color var(--zf-dur-hover), background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover), transform var(--zf-dur-pop) var(--zf-ease-out); }
.au__ssob svg { flex: none; width: 19px; height: 19px; }
.au__ssob .ic-github { color: #181717; }
.au__ssob:hover { border-color: var(--zf-ink-200); background: var(--zf-ink-50); box-shadow: 0 6px 16px -10px rgba(16,42,67,.3); }
.au__ssob:active { transform: scale(.98); }
.au__view .or { margin: 2px 0; }

.au__form { display: grid; gap: 16px; }
.au__form[hidden] { display: none; }
.au__lrow { display: flex; align-items: center; justify-content: space-between; }
.au__forgot { font-size: 13px; font-weight: 500; }
.au__pw, .au__code { position: relative; }
.au__pw .zf-input { padding-right: 46px; }
.au__code .zf-input { padding-right: 120px; }
.au__eye { position: absolute; right: 6px; top: 50%; display: grid; place-items: center; width: 34px; height: 34px; margin-top: -17px; border-radius: 9px; color: var(--zf-text-3); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.au__eye svg { width: 17px; height: 17px; }
.au__eye:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.au__code .codebtn { top: 50%; margin-top: -17px; }
.au__meter { display: grid; gap: 6px; margin-top: 2px; }
.au__meter span { font-size: 12.5px; color: var(--zf-text-3); }
.au__rem { display: inline-flex; align-items: center; gap: 8px; justify-self: start; font-size: 13.5px; color: var(--zf-text-2); cursor: pointer; }
.au__agree { display: flex; align-items: flex-start; gap: 8px; padding: 2px; border-radius: 8px; font-size: 13px; line-height: 1.6; color: var(--zf-text-2); cursor: pointer; }
.au__agree input { flex: none; width: 16px; height: 16px; margin: 2px 0 0; accent-color: var(--zf-green-600); }
.au__agree a { color: var(--zf-green-700); font-weight: 600; }
.au__agree.is-error { box-shadow: 0 0 0 2px rgba(210,85,63,.35); }
.au__submit { width: 100%; margin-top: 2px; }
.au__legal { margin-top: -2px; }

.au__back { display: inline-flex; align-items: center; gap: 6px; justify-self: start; height: 30px; margin: -8px 0 -6px -8px; padding: 0 10px 0 8px; border-radius: 8px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.au__back svg { width: 15px; height: 15px; transform: rotate(180deg); }
.au__back:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.au__steps { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin: 0; padding: 0; list-style: none; }
.au__steps li { display: flex; align-items: center; gap: 8px; padding-top: 10px; border-top: 3px solid var(--zf-ink-100); font-size: 13px; font-weight: 600; color: var(--zf-text-3); transition: border-color var(--zf-dur-pop), color var(--zf-dur-pop); }
.au__steps i { display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--zf-ink-100); font: 700 11.5px var(--zf-sans); font-style: normal; color: var(--zf-text-2); }
.au__steps li.is-on, .au__steps li.is-done { border-top-color: var(--zf-green-600); color: var(--zf-text); }
.au__steps li.is-on i, .au__steps li.is-done i { background: var(--zf-green-600); color: #fff; }
.au__for { font-size: 13.5px; color: var(--zf-text-2); }
.au__for b { color: var(--zf-text); }

.au__done { justify-items: center; padding: 12px 0 4px; text-align: center; }
.au__ok { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 50%; background: var(--zf-green-50); color: var(--zf-green-600); box-shadow: 0 0 0 8px rgba(0,144,74,.06); }
.au__ok svg { width: 30px; height: 30px; }
.au__done h2 { font-size: 24px; }
.au__done p { max-width: 300px; margin-top: -8px; font-size: 14px; line-height: 1.7; color: var(--zf-text-3); }

[data-theme="dark"] .au__card { background: var(--zf-surface); box-shadow: 0 30px 60px -30px rgba(0,0,0,.6); }
[data-theme="dark"] .au__ico { background: rgba(47,190,121,.12); color: #7FD7AA; }
[data-theme="dark"] .au__ssob .ic-github { color: #F0F4F8; }
[data-theme="dark"] .au__ssob:hover { background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.16); }
[data-theme="dark"] .au__head a, [data-theme="dark"] .au__agree a { color: #7FD7AA; }
[data-theme="dark"] .au__ok { background: rgba(47,190,121,.14); color: #7FD7AA; }

/* r26.1：登录页整体改为「一个分栏面板」——左侧品牌区（绿色调背景 + 与首页一致的市场 Key 卡片叠放 + 三条要点），右侧表单直接放在面板内（不再是独立卡片，避免框中框） */
.au--split { display: grid; place-items: center; grid-template-columns: 1fr; width: 100%; max-width: none; min-height: calc(100vh - 76px); margin: 0; padding: 40px 32px 56px; }
.au__panel { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, 1fr); width: min(1120px, 100%); min-height: 640px; border-radius: 28px; background: var(--zf-surface); border: 1px solid var(--zf-line); box-shadow: 0 1px 2px rgba(16,42,67,.05), 0 40px 80px -40px rgba(16,42,67,.32); overflow: hidden; }
.au__brand { position: relative; display: flex; flex-direction: column; padding: 44px 48px 36px; overflow: hidden; background: radial-gradient(520px 360px at 85% 55%, rgba(47,190,121,.20), transparent 70%), linear-gradient(160deg, #EEF8F2 0%, #E3F3EA 55%, #D6EEDF 100%); border-right: 1px solid var(--zf-line); }
.au__brand .zf-eyebrow { color: var(--zf-green-700); }
.au__brand h1 { margin-top: 16px; font-size: 38px; line-height: 1.22; letter-spacing: -.02em; color: var(--zf-text); }
.au__stage { position: relative; flex: 1; min-height: 280px; margin: 20px -8px 8px; }
.au__glow { position: absolute; left: 50%; top: 55%; width: 360px; height: 220px; margin: -110px 0 0 -180px; border-radius: 50%; background: radial-gradient(closest-side, rgba(47,190,121,.35), transparent); filter: blur(10px); }
.au__kc { position: absolute; left: 16px; width: min(420px, calc(100% - 40px)); padding: 18px 20px; border-radius: 20px; box-shadow: var(--zf-sh-inset), 0 24px 48px -24px rgba(16,42,67,.35); }
.au__kc--3 { top: 6%; transform: translate(56px, 0) rotate(5deg) scale(.9); opacity: .8; }
.au__kc--2 { top: 20%; transform: translate(28px, 0) rotate(2.5deg) scale(.95); opacity: .92; }
.au__kc--1 { top: 38%; }
.au__kc .kc-name { font-size: 15.5px; }
.au__kc .kc-flag { width: 40px; height: 40px; border-radius: 11px; font-size: 13px; }
.au__kc--2 .kc-flag { background: var(--zf-green-700); }
.au__kc--3 .kc-flag { background: var(--zf-ink-600); }
.au__kc .kc-label { margin-top: 16px; }
.au__kc .kc-keyrow { height: 46px; padding-right: 12px; }
.au__kc .kc-key { font-size: 14.5px; }
.au__kcopy { color: var(--zf-text-3); }
.au__kcopy svg { width: 16px; height: 16px; }
.au__facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; padding: 16px 0 0; list-style: none; border-top: 1px solid rgba(0,144,74,.14); }
.au__facts li { display: grid; gap: 2px; padding-right: 12px; }
.au__facts li + li { padding-left: 16px; border-left: 1px solid rgba(0,144,74,.14); }
.au__facts b { font-size: 13.5px; font-weight: 700; color: var(--zf-text); }
.au__facts span { font-size: 12.5px; color: var(--zf-text-3); }
.au--split .au__main { display: grid; place-items: center; padding: 40px 56px; }
.au--split .au__card { max-width: 400px; padding: 0; border: 0; border-radius: 0; background: none; box-shadow: none; overflow: visible; }
[data-theme="dark"] .au__brand { background: radial-gradient(520px 360px at 85% 55%, rgba(47,190,121,.16), transparent 70%), linear-gradient(160deg, #0F2A3A 0%, #0D2433 55%, #0B1F2C 100%); }
[data-theme="dark"] .au__brand .zf-eyebrow { color: #7FD7AA; }
[data-theme="dark"] .au__facts, [data-theme="dark"] .au__facts li + li { border-color: rgba(127,215,170,.14); }
[data-theme="dark"] .au--split .au__card { background: none; box-shadow: none; }
[data-theme="dark"] .au__panel { box-shadow: 0 40px 80px -40px rgba(0,0,0,.7); }

@media (max-width: 1000px) {
  body[data-page="login"] { min-width: 0; --zf-gutter: 16px; }
  body[data-page="login"] .nav { height: 100px; background: var(--zf-surface); }
  body[data-page="login"] .nav .zf-container { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-rows: 60px 40px; gap: 0 8px; }
  body[data-page="login"] .nav__brand img { height: 30px; }
  body[data-page="login"] .nav__right { grid-area: 1 / 2; justify-content: flex-end; gap: 4px; }
  body[data-page="login"] .nav__right > .zf-btn--primary { display: none; }
  body[data-page="login"] .nav__search { width: 36px; padding: 0; justify-content: center; font-size: 0; }
  body[data-page="login"] .nav__search .zf-kbd { display: none; }
  body[data-page="login"] .nav__links { grid-area: 2 / 1 / auto / -1; width: 100%; overflow-x: auto; }
  body[data-page="login"] .nav__link { flex-shrink: 0; padding-inline: 8px; }
  body[data-page="login"] .nav__link[data-mega] svg { display: none; }
  body[data-page="login"] .mega, body[data-page="login"] .mega__arrow { display: none; }
  body[data-page="login"] .au--split { min-height: calc(100vh - 100px); padding: 24px 16px 40px; }
  body[data-page="login"] .au__panel { width: min(520px, 100%); grid-template-columns: minmax(0, 1fr); min-height: 0; }
  body[data-page="login"] .au__brand { display: none; }
  body[data-page="login"] .au--split .au__main { padding: 28px clamp(16px, 5vw, 40px); }
  body[data-page="login"] .au__form .zf-input { min-width: 0; font-size: 16px; }
  body[data-page="login"] .foot__top { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px; }
  body[data-page="login"] .foot__brand { grid-column: 1 / -1; }
  body[data-page="login"] .foot__bottom, body[data-page="login"] .foot__bottom nav { flex-wrap: wrap; gap: 12px; }
  body[data-page="login"] .zf-cmd { max-width: calc(100vw - 24px); }
  body[data-page="login"] .zf-dock { display: none; }
  body[data-page="login"] .zf-chat { right: 12px; max-width: calc(100vw - 24px); }
}

/* =====================================================================
   r28（2026-11-05）：运营管理后台 admin*.html（admin-shell.js）
   复用控制台外壳 .app（侧栏 + 顶栏）；表格为通栏行（div 网格，列宽由 --cols 指定），两行文字，悬停绿底 + 左侧绿条；
   琥珀 / 红只用于需要处理的状态（即将到期、已到期、金额不符、即将维护）
   ===================================================================== */
.ad__body { display: grid; gap: 20px; align-content: start; width: 100%; max-width: 1440px; margin: 0 auto; padding: 28px 32px 96px; }
.ad-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px; }
.ad-head h1 { font-size: 26px; line-height: 1.3; letter-spacing: -.01em; }
.ad-head p { margin-top: 4px; font-size: 13.5px; color: var(--zf-text-3); }
.ad-head__act { display: flex; gap: 8px; }
.ad-head__act .zf-btn svg, .ad-panel .zf-btn svg { width: 15px; height: 15px; }
.ad-kpi { margin-top: 0; }
.ad-kpi .rule b { font-size: 24px; }
.ad-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; align-items: start; }
.ad-muted { font-size: 12.5px; color: var(--zf-text-3); }
.ad-panel { overflow: hidden; }
.ad-panel .toolbar { padding: 12px 16px; }
.ad-q { flex: 1; min-width: 220px; max-width: 360px; height: 36px; box-shadow: none; }
.ad-q svg { width: 16px; height: 16px; }

/* 状态标签：中性为默认；只有需要处理的状态用琥珀 / 红 */
.pill--ok { background: rgba(16,168,98,.10); color: var(--zf-green-700); }
.pill--warn { background: rgba(224,138,0,.13); color: #A86400; }
.pill--bad { background: rgba(210,85,63,.12); color: #B23A26; }
.pill--mute { background: var(--zf-ink-50); color: var(--zf-text-3); }

/* 表格（通栏行） */
.ad-table { display: grid; }
.ad-row { display: grid; grid-template-columns: var(--cols); align-items: center; gap: 16px; min-height: 64px; padding: 10px 20px; border-top: 1px solid var(--zf-line); font-size: 13.5px; color: var(--zf-text); cursor: pointer; transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.ad-row:first-child { border-top: 0; }
.ad-row--head { min-height: 40px; padding-top: 0; padding-bottom: 0; background: var(--zf-surface-2); font-size: 12px; font-weight: 600; color: var(--zf-text-3); cursor: default; }
.ad-row--static { cursor: default; }
.ad-row:not(.ad-row--head):hover, .ad-row:focus-visible { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); outline: 0; }
.ad-row:not(.ad-row--head):hover .drow__go { background: var(--zf-green-600); color: #fff; }
.ad-row .r { text-align: right; justify-items: end; }
.ad-row--expiring { background: linear-gradient(90deg, rgba(224,138,0,.11), rgba(224,138,0,.03) 55%, rgba(224,138,0,0)); box-shadow: inset 3px 0 0 #E08A00; }
.ad-row--expired, .ad-row--bad { background: linear-gradient(90deg, rgba(194,65,45,.09), rgba(194,65,45,.03) 55%, rgba(194,65,45,0)); box-shadow: inset 3px 0 0 #D2553F; }
.ad-row--expiring:hover { background: linear-gradient(90deg, rgba(224,138,0,.15), rgba(224,138,0,.05) 55%, rgba(224,138,0,.02)) !important; box-shadow: inset 3px 0 0 #E08A00 !important; }
.ad-row--expired:hover, .ad-row--bad:hover { background: linear-gradient(90deg, rgba(194,65,45,.13), rgba(194,65,45,.05) 55%, rgba(194,65,45,.02)) !important; box-shadow: inset 3px 0 0 #D2553F !important; }
.ad-row--disabled .ad-c2 b, .ad-row.is-off .ad-c2 b { color: var(--zf-text-3); }
.ad-row.is-dirty { background: rgba(0,144,74,.05); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ad-c2 { display: grid; gap: 2px; min-width: 0; }
.ad-c2 b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.ad-c2 small { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12.5px; color: var(--zf-text-3); }
.ad-c2 small.ad-wrap { white-space: normal; line-height: 1.5; }
.ad-who { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ad-flag { width: 30px !important; height: 30px !important; border-radius: 9px !important; font-size: 10.5px !important; }
.ad-items { display: flex !important; align-items: center; gap: 4px; }
.ad-items .ad-flag { width: 22px !important; height: 22px !important; border-radius: 6px !important; font-size: 9px !important; }
.ad-items > span:not(.ad-flag) { min-width: 0; overflow: hidden; text-overflow: ellipsis; margin-left: 4px; font-weight: 500; }
.ad-av { width: 34px !important; height: 34px !important; border-radius: 10px !important; font-size: 13.5px !important; flex: none; }
.ad-av.is-off { background: var(--zf-ink-200); }
.ad-av--sm { width: 22px !important; height: 22px !important; border-radius: 7px !important; font-size: 11px !important; }
.ad-ck { width: 16px; height: 16px; margin: 0; accent-color: var(--zf-green-600); cursor: pointer; }
.ad-empty { padding: 48px 20px; border-top: 1px solid var(--zf-line); }
.ad-me { margin-left: 6px; padding: 1px 6px; border-radius: 5px; background: var(--zf-green-50); font-size: 11px; color: var(--zf-green-800); }

/* 下拉选择（原生 select，统一外观） */
.ad-sel { position: relative; display: inline-flex; align-items: center; }
.ad-sel select { appearance: none; -webkit-appearance: none; height: 36px; min-width: 150px; padding: 0 34px 0 12px; font-size: 13.5px; cursor: pointer; }
.ad-sel svg { position: absolute; right: 10px; width: 15px; height: 15px; color: var(--zf-text-3); pointer-events: none; }
.ad-sel--sm select { height: 32px; min-width: 110px; font-size: 13px; }

/* 概览 */
.ad-todo { border-top: 1px solid var(--zf-line); }
.ad-todo .drow:first-child { border-top: 0; }
.ad-todo__ic { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; background: rgba(224,138,0,.12); color: #A86400; }
.ad-todo__ic svg { width: 17px; height: 17px; }
.ad-chart { margin-top: 8px; }
.ad-grid .tlist .trow { min-height: 56px; }
.ad-grid .trow .ad-av { width: 30px !important; height: 30px !important; }

/* 抽屉 */
.ad-dr { width: 560px; }
.ad-dr--wide { width: 680px; }
.ad-dr__h h3 { font-size: 19px; }
.ad-dr__h p { display: flex; align-items: center; gap: 8px; margin-top: 4px; font-size: 13px; color: var(--zf-text-3); }
.ad-dr .zf-drawer__body { display: grid; gap: 22px; align-content: start; }
.ad-sec__h { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.ad-sec__h h4 { font-size: 13px; font-weight: 700; letter-spacing: .02em; color: var(--zf-text-2); }
.ad-dl { margin: 0; border-top: 1px solid var(--zf-line); }
.ad-dl > div { display: grid; grid-template-columns: 110px minmax(0, 1fr); align-items: center; gap: 12px; min-height: 42px; padding: 6px 0; border-bottom: 1px solid var(--zf-line); font-size: 13.5px; }
.ad-dl dt { color: var(--zf-text-3); }
.ad-dl dd { display: flex; align-items: center; flex-wrap: wrap; gap: 6px 10px; min-width: 0; margin: 0; color: var(--zf-text); }
.ad-dl .zf-link { font-size: 13px; }
.ad-code { font: 500 12.5px var(--zf-mono); color: var(--zf-text); word-break: break-all; }
.ad-copy { width: 28px; height: 28px; }
.ad-copy svg { width: 14px; height: 14px; }
.ad-lines { border-top: 1px solid var(--zf-line); }
.ad-lines > div { display: flex; align-items: center; gap: 10px; min-height: 46px; border-bottom: 1px solid var(--zf-line); font-size: 13.5px; }
.ad-lines > div span:not(.ad-flag) { flex: 1; }
.ad-lines__t { font-weight: 600; }
.ad-lines__t b { font-size: 15px; }
.ad-tl { display: grid; margin: 0; padding: 0 0 0 4px; list-style: none; }
.ad-tl li { position: relative; display: flex; justify-content: space-between; gap: 12px; padding: 0 0 14px 22px; font-size: 13.5px; color: var(--zf-text-3); }
.ad-tl li::before { content: ""; position: absolute; left: 0; top: 4px; width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--zf-ink-200); background: var(--zf-surface); }
.ad-tl li:not(:last-child)::after { content: ""; position: absolute; left: 5px; top: 16px; bottom: 0; width: 1px; background: var(--zf-line); }
.ad-tl li.is-done { color: var(--zf-text); }
.ad-tl li.is-done::before { border-color: var(--zf-green-600); background: var(--zf-green-600); }
.ad-tl b { font-weight: 500; }
.ad-tl small { font-size: 12.5px; color: var(--zf-text-3); }
.ad-alert { display: flex; gap: 12px; padding: 14px 16px; border-radius: 14px; background: var(--zf-ink-50); font-size: 13.5px; }
.ad-alert > svg { flex: none; width: 18px; height: 18px; margin-top: 1px; color: var(--zf-text-3); }
.ad-alert b { display: block; color: var(--zf-text); }
.ad-alert small { display: block; margin-top: 2px; font-size: 12.5px; line-height: 1.6; color: var(--zf-text-2); }
.ad-alert--warn { background: linear-gradient(90deg, rgba(224,138,0,.13), rgba(224,138,0,.05)); box-shadow: inset 3px 0 0 #E08A00; }
.ad-alert--warn > svg { color: #A86400; }
.ad-alert--bad { background: linear-gradient(90deg, rgba(194,65,45,.11), rgba(194,65,45,.04)); box-shadow: inset 3px 0 0 #D2553F; }
.ad-alert--bad > svg { color: #B23A26; }
.ad-mini { margin-top: 0; }
.ad-mini .rule { padding: 14px 18px; }
.ad-mini .rule b { font-size: 20px; }
.ad-mlist { border-top: 1px solid var(--zf-line); }
.ad-mrow { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; align-items: center; gap: 12px; min-height: 56px; padding: 6px 10px; margin: 0 -10px; border-bottom: 1px solid var(--zf-line); color: var(--zf-text); font-size: 13.5px; transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
a.ad-mrow:not([class*="ad-mrow--"]) { grid-template-columns: minmax(0, 1fr) auto auto; }
a.ad-mrow:hover { background: rgba(0,144,74,.04); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ad-mrow--expiring { background: linear-gradient(90deg, rgba(224,138,0,.10), rgba(224,138,0,0)); }
.ad-mrow--expired { background: linear-gradient(90deg, rgba(194,65,45,.08), rgba(194,65,45,0)); }
.ad-mrow--active, .ad-mrow--disabled { grid-template-columns: auto minmax(0, 1fr) auto auto; }
.ad-ta { min-height: 0; padding: 10px 12px; line-height: 1.6; resize: vertical; }
.ad-ta--code { font: 13px/1.7 var(--zf-mono); }
.ad-note-act { display: flex; justify-content: flex-end; margin-top: 8px; }
.ad-dr .zf-drawer__foot { flex-wrap: wrap; }
.ad-dr .zf-drawer__foot .zf-btn svg { width: 15px; height: 15px; }
.ad-del { margin-right: auto; color: #B23A26; }
.ad-cf__extra { display: grid; gap: 14px; margin-top: 18px; }
.ad-cf__extra:empty { display: none; }
.zf-modal__icon.is-info { background: var(--zf-green-50); color: var(--zf-green-700); }

/* 市场与价格 */
.ad-disc { margin-top: 0; }
.ad-disc .rule b { font-size: 22px; color: var(--zf-text) !important; }
.ad-pct, .ad-price, .ad-unit { display: inline-flex; align-items: center; gap: 6px; }
.ad-pct input { width: 84px; height: 38px; font-size: 18px; font-weight: 700; }
.ad-pct span, .ad-unit span { font-size: 13px; color: var(--zf-text-3); }
.ad-price span { font-size: 13px; color: var(--zf-text-3); }
.ad-price input { width: 96px; height: 34px; font-size: 14px; font-weight: 600; }
.ad-unit input { width: 90px; height: 34px; }
.ad-savebar { position: sticky; bottom: 20px; }
.ad-bclear { color: #A9BCCD !important; font-size: 13px; }
.ad-bsec { margin-left: auto; background: rgba(255,255,255,.08) !important; border-color: rgba(255,255,255,.16) !important; color: #E6EEF5 !important; }
.ad-bsec + .zf-btn { margin-left: 0 !important; }
.batchbar .zf-btn svg { width: 15px; height: 15px; }

/* 公告编辑 */
.ad-form { display: grid; gap: 18px; }
.ad-form .zf-field { position: relative; }
.ad-count { position: absolute; right: 0; top: 2px; font-size: 12px; color: var(--zf-text-3); }
.ad-hint { font-size: 12.5px; color: var(--zf-text-3); }
.ad-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ad-maint { display: grid; gap: 16px; padding: 16px; border-radius: 14px; background: var(--zf-ink-50); }
.ad-maint[hidden] { display: none; }
.ad-preview { display: grid; gap: 6px; }
.ad-preview__k { font-size: 12px; font-weight: 600; color: var(--zf-text-3); }
.ad-znote { border-radius: 10px; overflow: hidden; }
.ad-znote .znote__row { height: 38px; padding: 0 12px; }
.ad-switchrow { display: flex; align-items: center; gap: 12px; cursor: pointer; }
.ad-switchrow b { display: block; font-size: 14px; color: var(--zf-text); }
.ad-switchrow small { font-size: 12.5px; color: var(--zf-text-3); }
.ad-ntitle { display: flex !important; align-items: center; gap: 8px; }

/* 系统设置 */
.ad-tabs { padding: 12px 16px; border-bottom: 1px solid var(--zf-line); }
.ad-roles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); border-bottom: 1px solid var(--zf-line); }
.ad-roles > div { display: grid; gap: 2px; padding: 14px 20px; }
.ad-roles > div + div { border-left: 1px solid var(--zf-line); }
.ad-roles b { font-size: 14px; }
.ad-roles small { font-size: 12.5px; line-height: 1.5; color: var(--zf-text-3); }
.ad-roles em { font-style: normal; font-size: 12.5px; font-weight: 600; color: var(--zf-green-700); }
.ad-srows .srow2__l svg { width: 16px; height: 16px; color: var(--zf-text-3); }
.ad-srows .zf-input { height: 36px; max-width: 320px; }
.ad-srows .ad-in-lg { max-width: 460px; width: 100%; }
.ad-formfoot { display: flex; align-items: center; justify-content: flex-end; gap: 16px; padding: 14px 24px; background: var(--zf-surface-2); }
.ad-formfoot small { margin-right: auto; font-size: 12.5px; color: var(--zf-text-3); }

[data-theme="dark"] .pill--warn, [data-theme="dark"] .ad-todo__ic { color: #F2B54A; background: rgba(242,181,74,.14); }
[data-theme="dark"] .pill--bad { color: #F08A78; background: rgba(240,138,120,.14); }
[data-theme="dark"] .pill--ok { color: #7FD7AA; }
[data-theme="dark"] .ad-me, [data-theme="dark"] .zf-modal__icon.is-info { background: rgba(47,190,121,.14); color: #7FD7AA; }
[data-theme="dark"] .ad-maint, [data-theme="dark"] .ad-alert { background: rgba(255,255,255,.04); }
[data-theme="dark"] .ad-alert--warn { background: linear-gradient(90deg, rgba(242,181,74,.14), rgba(242,181,74,.04)); }
[data-theme="dark"] .ad-alert--bad { background: linear-gradient(90deg, rgba(240,138,120,.12), rgba(240,138,120,.03)); }
[data-theme="dark"] .ad-roles em { color: #7FD7AA; }
.ad .app__crumb { white-space: nowrap; }
.ad .app__crumb svg { flex: none; width: 14px; height: 14px; transform: rotate(-90deg); color: var(--zf-text-3); }
.ad-dr .zf-drawer__body { grid-auto-rows: max-content; } /* 固定高度的网格会把 overflow:hidden 的子项压缩，这里固定为内容高度 */
.ad-mini { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ad-dr .ad-empty { padding: 22px 12px; font-size: 13px; }
body[data-page="admin"] .proto-flag { display: none; } /* 后台面包屑已标「演示数据」，避免遮挡底部批量操作条 */
.ad-row.is-picked:not(.ad-row--expiring):not(.ad-row--expired) { background: rgba(0,144,74,.06); box-shadow: inset 3px 0 0 var(--zf-green-600); }
body[data-page="admin"] .proto-flag { display: none !important; }
.ad-cf__extra { padding: 0 28px; }
[data-theme="dark"] .ad-row--head { background: rgba(255,255,255,.035); }
[data-theme="dark"] .ad-sel select { background-color: rgba(255,255,255,.04); color: var(--zf-text); border-color: rgba(220,232,244,.12); }
[data-theme="dark"] .ad-sel select option { background: #0F1E2E; color: #E6EEF5; }

/* =====================================================================
   r29（2026-11-05）：运营后台补齐——登录与两步验证、角色只读、排序与导出、详情页、
   接口用量 / 实时连接 / 行情源 / 风控 / 财务报表 / 链上对账 / 客服工单 / 邮件模板 / 标的与日历
   ===================================================================== */
/* 侧栏变长：隐藏滚动条 */
.ad .app__side { scrollbar-width: none; }
.ad .app__side::-webkit-scrollbar { display: none; }
.ad .app__grp { padding-top: 14px; }

/* 后台登录 */
.adl__brand h1 { margin-top: 28px; font-size: 32px; line-height: 1.3; }
.adl__logo { display: inline-flex; align-items: center; gap: 10px; }
.adl__logo img { height: 30px; width: auto; }
.adl__list { display: grid; gap: 0; margin: auto 0 0; padding: 0; list-style: none; border-radius: 18px; background: var(--zf-card-bg); border: 1px solid var(--zf-card-line); box-shadow: var(--zf-card-sh); overflow: hidden; }
.adl__list li { display: flex; align-items: center; gap: 14px; padding: 14px 18px; }
.adl__list li + li { border-top: 1px solid var(--zf-line); }
.adl__list b { display: block; font-size: 14px; color: var(--zf-text); }
.adl__list small { display: block; margin-top: 2px; font-size: 12.5px; color: var(--zf-text-3); }
.adl__msg { margin-bottom: 18px; }
.adl__msg[hidden] { display: none; }
.adl__demo { margin-top: 6px; padding-top: 18px; border-top: 1px solid var(--zf-line); }
.adl__demo-h { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 8px; font-size: 13px; }
.adl__demo-h span { font-size: 12px; color: var(--zf-text-3); }
.adl__demo-l { display: grid; }
.adl__acc { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 8px 10px; margin: 0 -10px; border-radius: 12px; text-align: left; transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.adl__acc:hover { background: rgba(0,144,74,.05); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.adl__setup { display: flex; gap: 14px; align-items: center; padding: 14px; border-radius: 14px; background: var(--zf-ink-50); }
.adl__setup[hidden] { display: none; }
.adl__setup b { display: block; font-size: 13.5px; }
.adl__setup small { display: block; margin-top: 2px; font-size: 12.5px; line-height: 1.6; color: var(--zf-text-3); }
.adl__qr { flex: none; width: 76px; height: 76px; border-radius: 10px; background: conic-gradient(from 90deg, #0B1F33 25%, transparent 0 50%, #0B1F33 0 75%, transparent 0) 0 0 / 12px 12px, #fff; border: 6px solid #fff; box-shadow: 0 0 0 1px var(--zf-line); }
.otp { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; }
.otp__i { height: 54px; padding: 0; text-align: center; font-size: 22px; font-weight: 700; }
.otp.is-error .otp__i { border-color: #D2553F; }

/* 只读与排序 */
.is-ro [data-act]:not([data-ro-ok]), .is-ro [data-cact], .is-ro [data-fact], .is-ro [data-ract], .is-ro [data-tact], .is-ro [data-tplact="save"], .is-ro [data-calact], .is-ro [data-tkst] { display: none !important; }
.ad-ro { margin-left: 4px; }
.ad-sort { display: inline-flex; align-items: center; gap: 4px; font: inherit; color: inherit; }
.ad-sort svg { width: 12px; height: 12px; opacity: .35; transition: transform var(--zf-dur-hover), opacity var(--zf-dur-hover); }
.ad-sort:hover { color: var(--zf-text); }
.ad-sort.is-on { color: var(--zf-text); }
.ad-sort.is-on svg { opacity: 1; color: var(--zf-green-600); }
.ad-row .r .ad-sort { justify-content: flex-end; }
.ad-unitnote { font-size: 12.5px; color: var(--zf-text-3); }

/* 占比条 */
.ad-bar { display: block; height: 6px; margin-top: 6px; border-radius: 99px; background: var(--zf-ink-50); overflow: hidden; }
.ad-bar i { display: block; height: 100%; border-radius: inherit; background: var(--zf-green-500); }
.ad-bar--ink i { background: var(--zf-ink-400, #6B7F93); }

/* 实时标记 */
.ad-livechip { display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 12px; border-radius: 99px; background: rgba(0,144,74,.08); font-size: 12.5px; font-weight: 600; color: var(--zf-green-800); }
.ad-livechip.is-off { background: var(--zf-ink-50); color: var(--zf-text-3); }
.ad-livechip.is-off .zf-live { opacity: .3; }

/* 详情页 */
.ad-uhead h1 { font-size: 24px; }
.ad-av--lg { width: 52px !important; height: 52px !important; border-radius: 16px !important; font-size: 20px !important; }
.ad-split { display: grid; grid-template-columns: 1fr 1fr; }
.ad-split > .ad-pad + .ad-pad { border-left: 1px solid var(--zf-line); }
.ad-split--line { border-top: 1px solid var(--zf-line); }
.ad-pad { display: grid; gap: 20px; align-content: start; padding: 20px 24px; }
.ad-quick { display: flex; flex-wrap: wrap; gap: 8px; }
.ad-quick .zf-btn svg { width: 15px; height: 15px; }
.ad-side2 { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 20px; align-items: start; }
.ad-col { display: grid; gap: 20px; min-width: 0; }
.ad-card { padding: 20px 24px; }
.ad-ucard { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px; margin: 0 -10px; border-radius: 12px; color: var(--zf-text); transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.ad-ucard:hover { background: rgba(0,144,74,.05); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ad-ucard > svg { width: 16px; height: 16px; color: var(--zf-text-3); }
.ad-head h1 .zf-mono { font-size: .82em; }
.ad-head__act .pill { align-self: center; }
.ad-mrow--plain { grid-template-columns: minmax(0, 1fr) auto auto auto !important; }
.ad-more { padding: 12px 20px; border-top: 1px solid var(--zf-line); font-size: 12.5px; color: var(--zf-text-3); }
.ad-big { display: block; margin-top: 4px; font-size: 22px; font-weight: 700; color: var(--zf-text); }

/* 行内表单 */
.ad-inline { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--zf-line); }
.ad-dr .ad-inline { padding: 0; border: 0; }
.ad-inline .zf-input { height: 36px; flex: 1; min-width: 160px; }
.ad-inline .zf-input[type="date"] { flex: none; width: 160px; }
.ad-inline .zf-btn svg { width: 15px; height: 15px; }

/* 客服工单：左列表 + 右对话（两栏） */
.ad-tk { display: grid; grid-template-columns: 400px minmax(0, 1fr); gap: 20px; align-items: start; }
.ad-tk__list .toolbar { flex-direction: column; align-items: stretch; }
.ad-tk__list .ad-q { max-width: none; }
.ad-tkrow { display: grid; gap: 6px; padding: 12px 16px; border-top: 1px solid var(--zf-line); cursor: pointer; transition: background-color var(--zf-dur-hover), box-shadow var(--zf-dur-hover); }
.ad-tkrow:first-child { border-top: 0; }
.ad-tkrow:hover, .ad-tkrow.is-on { background: rgba(0,144,74,.05); box-shadow: inset 3px 0 0 var(--zf-green-600); }
.ad-tkrow.is-urgent:not(.is-on) { background: linear-gradient(90deg, rgba(194,65,45,.08), rgba(194,65,45,0)); box-shadow: inset 3px 0 0 #D2553F; }
.ad-tkrow__top { display: flex; justify-content: space-between; gap: 10px; }
.ad-tkrow__top b { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; }
.ad-tkrow__top small { flex: none; font-size: 12px; color: var(--zf-text-3); }
.ad-tkrow__sub { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--zf-text-3); }
.ad-tkrow__sub span:first-child { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ad-tk__conv { display: flex; flex-direction: column; min-height: 600px; }
.ad-tk__h { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 20px; border-bottom: 1px solid var(--zf-line); }
.ad-tk__h .ad-c2 b { font-size: 15px; }
.ad-tk__act { display: flex; align-items: center; gap: 8px; flex: none; }
.ad-tk__act .zf-btn svg { width: 15px; height: 15px; }
.ad-tk__msgs { flex: 1; display: grid; align-content: start; gap: 14px; max-height: 460px; overflow-y: auto; padding: 20px; scrollbar-width: none; }
.ad-tk__msgs::-webkit-scrollbar { display: none; }
.ad-msg { display: grid; gap: 4px; max-width: 72%; }
.ad-msg small { font-size: 12px; color: var(--zf-text-3); }
.ad-msg__b { padding: 10px 14px; border-radius: 14px; font-size: 13.5px; line-height: 1.7; }
.ad-msg--user .ad-msg__b { background: var(--zf-ink-50); color: var(--zf-text); border-top-left-radius: 4px; }
.ad-msg--admin { justify-self: end; justify-items: end; }
.ad-msg--admin .ad-msg__b { background: var(--zf-green-600); color: #fff; border-top-right-radius: 4px; }
.ad-tk__reply { display: grid; gap: 8px; padding: 14px 20px 16px; border-top: 1px solid var(--zf-line); }
.ad-tk__reply .ad-note-act { margin-top: 0; }
.ad-tk__quick { display: flex; flex-wrap: wrap; gap: 6px; }
.ad-chip { height: 28px; padding: 0 10px; border-radius: 99px; border: 1px solid var(--zf-line); font-size: 12.5px; color: var(--zf-text-2); transition: border-color var(--zf-dur-hover), background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.ad-chip:hover { border-color: var(--zf-green-300); background: var(--zf-green-50); color: var(--zf-green-800); }
.ad-tk__done { display: flex; align-items: center; gap: 8px; padding: 16px 20px; border-top: 1px solid var(--zf-line); font-size: 13px; color: var(--zf-text-3); }
.ad-tk__done svg { width: 16px; height: 16px; color: var(--zf-green-600); }

/* 邮件模板 */
.ad-remind { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 28px; padding: 16px 20px; border-top: 1px solid var(--zf-line); }
.ad-remind > .zf-btn { margin-left: auto; }
.ad-vars { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 4px; }
.ad-vars .ad-chip { font-family: var(--zf-mono); font-size: 12px; }
.ad-mail { border: 1px solid var(--zf-line); border-radius: 14px; overflow: hidden; background: var(--zf-surface); }
.ad-mail__h { display: grid; gap: 4px; padding: 12px 16px; border-bottom: 1px solid var(--zf-line); background: var(--zf-surface-2); }
.ad-mail__h small { font-size: 12px; color: var(--zf-text-3); }
.ad-mail__h b { font-size: 15px; }
.ad-mail__b { padding: 16px; font-size: 14px; line-height: 1.8; color: var(--zf-text-2); }
.ad-mail mark { padding: 0 3px; border-radius: 4px; background: rgba(0,144,74,.12); color: var(--zf-green-800); }

[data-theme="dark"] .ad-livechip { background: rgba(47,190,121,.12); color: #7FD7AA; }
[data-theme="dark"] .ad-msg--user .ad-msg__b, [data-theme="dark"] .adl__setup, [data-theme="dark"] .ad-bar { background: rgba(255,255,255,.06); }
[data-theme="dark"] .ad-msg--admin .ad-msg__b { background: #0E7A45; }
[data-theme="dark"] .ad-mail mark { background: rgba(47,190,121,.16); color: #7FD7AA; }
[data-theme="dark"] .ad-mail__h { background: rgba(255,255,255,.03); }

/* =====================================================================
   r30（2026-11-05）：对照旧版后台补齐——会员操作、手动开通、关联关系、产品管理、
   操作日志（三种来源）、系统设置 / 接入与服务、系统状态、站点与 SEO、会员通知
   ===================================================================== */
.is-ro [data-xact]:not([data-ro-ok]), .is-ro [data-sact], .is-ro [data-nact], .is-ro [data-yact], .is-ro [data-gen], .is-ro [data-mltest], .is-ro [data-pop="#uMore"] { display: none !important; }
.ad-delta { font-weight: 600; color: var(--zf-text-3); }
.ad-delta.is-up { color: var(--zf-green-700); }
.ad-alertrow--bad .ad-todo__ic { background: rgba(194,65,45,.10); color: #B23A26; }
.ad-todo__i > small { flex: none; }
.ad-secret { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 8px; padding: 10px 12px; border-radius: 12px; background: var(--zf-ink-50); }
.ad-secret[hidden] { display: none; }
.ad-secret code { font-size: 15px; font-weight: 600; letter-spacing: .04em; color: var(--zf-text); }
.ad-secret small { flex-basis: 100%; font-size: 12px; color: var(--zf-text-3); }
.ad-venues { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.ad-venues .ad-chip { height: 24px; font-family: var(--zf-mono); font-size: 12px; cursor: default; }
.ad-preview-line { padding: 10px 14px; border-radius: 12px; background: var(--zf-green-50); font-size: 13.5px; color: var(--zf-green-800); }
.ad-preview-line b { font-weight: 700; }
.ad-mt { margin-top: 10px; }
.ad-inline--flat { padding: 0; border: 0; }
.ad-inline--flat .zf-seg { flex: none; }
.ad-oa + .ad-oa { border-top: 6px solid var(--zf-surface-2); }
.ad-oa__h { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 24px; border-bottom: 1px solid var(--zf-line); }
.ad-oa__h b { font-size: 15px; }
.zf-menu__item--danger { color: #B23A26; }
.ad-dr .zf-drawer__body .ad-alert + .ad-form, .ad-form > .ad-alert { margin-bottom: 2px; }
[data-theme="dark"] .ad-delta.is-up { color: #7FD7AA; }
[data-theme="dark"] .ad-secret { background: rgba(255,255,255,.05); }
[data-theme="dark"] .ad-preview-line { background: rgba(47,190,121,.10); color: #7FD7AA; }

/* r31（2026-11-05）：流程闭环——审批、退款中、补差额、日对账单、三级确认、脱敏 */
.is-ro [data-apact], .is-ro [data-xact="addr-cancel"] { display: none !important; }
.ad-dr .ad-alert + .ad-alert, .ad-col > .ad-alert + .ad-alert { margin-top: 10px; }
.ad-alert small .zf-link { font-size: 12.5px; margin-left: 4px; }
.zf-toast__action .zf-link { font-weight: 700; }

/* r32：高危操作两步验证码输入 */
.ad-otp1 { letter-spacing: .32em; font-size: 16px; }
.ad-otp1:placeholder-shown { letter-spacing: normal; font-size: inherit; }

/* V1 真实数据（web/ops/）：后端还不支持的操作先隐藏，不显示演示标记 */
.zfa-live .zf-demo-chip,
.zfa-live [data-act="o-close"], .zfa-live [data-act="o-confirm"],
.zfa-live [data-act="k-disable"], .zfa-live [data-act="k-enable"], .zfa-live [data-act="k-bdisable"],
.zfa-live [data-xact="o-reopen"], .zfa-live [data-xact="u-reveal"], .zfa-live [data-xact="o-copy"],
.zfa-live [data-sact="a-name"], .zfa-live [data-sact="a-remove"], .zfa-live [data-sact="me-out"], .zfa-live [data-sact="csp"], .zfa-live [data-sact="a-mfa"],
.zfa-live #acForm .ad-formfoot, .zfa-live #lcForm .ad-formfoot { display: none !important; }
.zf-live-err { position: fixed; left: 50%; top: 24px; transform: translateX(-50%); z-index: 9999; display: flex; gap: 12px; align-items: center; padding: 12px 16px; border-radius: 12px; background: var(--zf-surface, #fff); box-shadow: 0 12px 40px rgba(11,31,51,.18); font-size: 14px; }
.zf-live-err button { border: 0; background: var(--zf-green-600, #00904A); color: #fff; border-radius: 8px; padding: 6px 12px; cursor: pointer; }
.zfa-live #payForm > *:has(#pTol), .zfa-live #payForm > *:has(#pConf), .zfa-live #payForm > *:has(#pTail) { display: none !important; }
.zfa-live [data-disc] { pointer-events: none; opacity: .6; } /* 季 9 折、半年 85 折、年 8 折由服务端固定 */

/* V1 第 2 批：会员中心 · 工单 */
.tk-row { cursor: pointer; }
.tk-row:hover { background: color-mix(in srgb, var(--zf-green-600, #00904A) 6%, transparent); box-shadow: inset 3px 0 0 var(--zf-green-600, #00904A); }
.tk-form { display: grid; gap: 16px; }
.tk-ta { min-height: 96px; resize: vertical; font: inherit; line-height: 1.6; }
.tk-thread { display: grid; gap: 12px; margin-bottom: 18px; }
.tk-msg { max-width: 88%; padding: 10px 14px; border-radius: 12px; background: var(--zf-surface-2, #f3f6f5); }
.tk-msg p { margin: 4px 0 0; font-size: 14px; line-height: 1.65; color: var(--zf-text); word-break: break-word; }
.tk-msg small { font-size: 12px; color: var(--zf-text-3); }
.tk-msg--me { justify-self: end; background: color-mix(in srgb, var(--zf-green-600, #00904A) 10%, transparent); }
.tk-closed { font-size: 13px; color: var(--zf-text-3); }
.zfa-live [data-ract="disable"] { display: none !important; }

/* V1 第 3 批：首页示例行情标注 */
.zf-sample-host { position: relative; }
.zf-sample { position: absolute; top: 8px; right: 10px; z-index: 3; padding: 2px 8px; border-radius: 99px; font-size: 11px; line-height: 18px; color: var(--zf-text-3); background: color-mix(in srgb, var(--zf-surface, #fff) 82%, transparent); border: 1px solid var(--zf-border, rgba(11,31,51,.12)); pointer-events: none; }
.zfa-live [data-yact="drain"], .zfa-live [data-fact="backup"], .zfa-live [data-fact="ok"] { display: none !important; } /* 需要行情服务配合的操作，V1 不提供 */

/* r33 新后台 V2（admin-live.js 给 <html> 加 .zfa-v2）：V2 支持的操作重新显示 */
.zfa-v2 [data-act="o-close"], .zfa-v2 [data-xact="o-copy"], .zfa-v2 [data-sact="a-remove"], .zfa-v2 [data-sact="a-mfa"],
.zfa-v2 [data-act="k-disable"], .zfa-v2 [data-act="k-enable"], .zfa-v2 [data-act="k-bdisable"] { display: inline-flex !important; }
/* r33 第 4 步：V2 保存安全与入口（入口、限频、IP 白名单，2026-11-08）与本地化（后台、官网语言）；
   V2 不保存的项目（登录路径、会话时长、邮件语言、时区）由 admin-extensions.js 改为说明文字；万一出现输入框也不显示 */
.zfa-v2 #acForm .ad-formfoot, .zfa-v2 #lcForm .ad-formfoot { display: flex !important; }
.zfa-v2 #acForm > *:has(#acLogin), .zfa-v2 #acForm > *:has(#acIdle),
.zfa-v2 #lcForm > *:has(#lcMail), .zfa-v2 #lcForm > *:has(#lcTz) { display: none !important; }
.zfa-v2 [data-ract="disable"] { display: inline-flex !important; }

/* =====================================================================
   r34 后台样板（2026-11-07，待用户确认）：只作用于带 .ad-ui2 的页面（概览、订单与支付）
   目标：像一套管理系统——内容铺满工作区、平面面板（8px 圆角、1px 边框、无阴影）、紧凑密度、同一排等高、
   空状态一行文字、数字统一墨蓝（绿色只表示状态）、顶栏左侧搜索。配色仍是墨蓝 + 品牌绿；不用三栏、不做框套框。
   ===================================================================== */
body[data-shell="app"] .ad-ui2 { --app-side: 232px; --ui2-r: 8px; }
.ad-ui2 { grid-template-columns: var(--app-side) minmax(0, 1fr); }

/* 侧栏：更紧凑，选中条贴在选中块内 */
.ad-ui2 .app__side { padding: 14px 10px 12px; }
.ad-ui2 .app__brand { height: 36px; padding: 0 8px; margin-bottom: 8px; }
.ad-ui2 .app__grp { padding: 14px 10px 4px; font-size: 11px; letter-spacing: .08em; }
.ad-ui2 .app__nav { gap: 1px; }
.ad-ui2 .app__nav a { height: 34px; gap: 10px; padding: 0 10px; border-radius: 6px; font-size: 13.5px; }
.ad-ui2 .app__nav a svg { width: 16px; height: 16px; }
.ad-ui2 .app__nav a.is-on::before { left: 0; top: 8px; bottom: 8px; width: 3px; border-radius: 0 2px 2px 0; }
.ad-ui2 .app__nav .badge { height: 18px; min-width: 18px; line-height: 18px; font-size: 11px; }

/* 顶栏：实色、56px；一级页面不重复面包屑，搜索放左侧 */
.ad-ui2 .app__top { height: 56px; padding: 0 24px; background: var(--zf-surface); -webkit-backdrop-filter: none; backdrop-filter: none; }
.ad-ui2 .app__crumb { display: none; }
.ad-ui2 .app__tools { flex: 1; margin-left: 0; }
.ad-ui2 .app__search { width: 360px; height: 34px; margin-right: auto; border-radius: var(--ui2-r); background: var(--zf-surface-2); }
.ad-ui2 .app__tools .zf-iconbtn { width: 34px; height: 34px; border-radius: var(--ui2-r); }
.ad-ui2 .app__tools .zf-iconbtn svg { width: 17px; height: 17px; }

/* 内容区：不限宽、不居中，固定边距贴着侧栏 */
.ad-ui2 .ad__body { max-width: none; margin: 0; padding: 20px 24px 64px; gap: 16px; }
.ad-ui2 .ad-head { align-items: center; min-height: 40px; }
.ad-ui2 .ad-head h1 { font-size: 20px; font-weight: 700; letter-spacing: 0; }
.ad-ui2 .ad-head p { margin-top: 2px; font-size: 12.5px; }

/* 面板：平面、8px 圆角、无阴影；标题栏固定高度、带分隔线 */
.ad-ui2 .panel2 { border-radius: var(--ui2-r); box-shadow: none; }
.ad-ui2 .mpanel__h { align-items: center; min-height: 46px; padding: 0 16px; border-bottom: 1px solid var(--zf-line); }
.ad-ui2 .mpanel__h h3 { font-size: 14px; font-weight: 600; }
.ad-ui2 .mpanel__h .zf-link, .ad-ui2 .mpanel__h .ad-muted { font-size: 12.5px; }
.ad-ui2 .tlist, .ad-ui2 .ad-todo { border-top: 0; }

/* 数字条：与面板同一种外观；数字统一墨蓝 */
.ad-ui2 .rules--strip { margin-top: 0; border-radius: var(--ui2-r); background: var(--zf-surface); border: 1px solid var(--zf-line); box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
.ad-ui2 .rules--strip .rule { gap: 2px; padding: 14px 18px; }
.ad-ui2 .rules--strip .rule span { font-size: 12.5px; }
.ad-ui2 .rules--strip .rule b, .ad-ui2 .rules--strip .rule:not(:first-child) b, [data-theme="dark"] .ad-ui2 .rules--strip .rule:not(:first-child) b { font-size: 22px; color: var(--zf-text); }
.ad-ui2 .rules--strip .rule em { font-size: 12px; font-style: normal; }

/* 两列网格：同一排等高，内容区填满 */
.ad-ui2 .ad-grid { gap: 16px; align-items: stretch; }
.ad-ui2 .ad-grid > .panel2 { display: flex; flex-direction: column; }
.ad-ui2 .ad-grid > .panel2 > :last-child { flex: 1 0 auto; }
.ad-ui2 .ad-grid .tlist .trow, .ad-ui2 .ad-todo .drow { min-height: 48px; padding: 6px 16px; }
.ad-ui2 .ad-todo__ic { width: 28px; height: 28px; border-radius: 6px; }
.ad-ui2 .ad-todo__ic svg { width: 15px; height: 15px; }

/* 空状态：一行文字，不再用像加载动画的三个点 */
.ad-ui2 .ad-empty { display: flex; align-items: center; justify-content: center; min-height: 96px; padding: 16px; border-top: 0; font-size: 13px; }
.ad-ui2 .ad-empty .zf-nodes { display: none; }

/* 收入图：矮一些 */
.ad-ui2 .ad-chart { height: 168px; margin: 14px 16px 12px 48px; }

/* 列表页：工具栏、表格、分页更紧凑；表头吸顶对齐 56px 顶栏 */
.ad-ui2 .ad-panel .toolbar { padding: 10px 12px; gap: 8px; }
.ad-ui2 .ad-q { height: 32px; border-radius: var(--ui2-r); }
.ad-ui2 .dtable th { top: 56px; height: 36px; padding: 0 12px; font-size: 12px; }
.ad-ui2 .dtable td { height: 48px; padding: 0 12px; font-size: 13.5px; }
.ad-ui2 .bpager { padding: 8px 12px 8px 16px; }
.ad-ui2 .ad-row { gap: 14px; min-height: 52px; padding: 6px 16px; }
.ad-ui2 .ad-row--head { min-height: 36px; padding-top: 0; padding-bottom: 0; }
.ad-ui2 .ad-row:not(.ad-row--head):hover, .ad-ui2 .ad-row:focus-visible { box-shadow: inset 2px 0 0 var(--zf-green-600); }
.ad-ui2 .ad-c2 small { font-size: 12px; }
.ad-ui2 .ad-flag { border-radius: 6px !important; }
.ad-ui2 .ad-av { width: 28px !important; height: 28px !important; border-radius: 6px !important; font-size: 12px !important; }
.ad-ui2 .pill { border-radius: 4px; }

/* r34 样板第 2 版：面板内分节、空行、收入图填满、订单列宽、顶栏 */
.ad-ui2 .ad-subh { display: flex; align-items: center; gap: 8px; height: 32px; padding: 0 16px; background: var(--zf-surface-2); border-top: 1px solid var(--zf-line); border-bottom: 1px solid var(--zf-line); font-size: 12px; color: var(--zf-text-3); }
.ad-ui2 .ad-subh b { font-weight: 600; color: var(--zf-text-2); }
.ad-ui2 .ad-subh .zf-link { margin-left: auto; font-size: 12px; }
.ad-ui2 .mpanel__h + .ad-subh { border-top: 0; }
.ad-ui2 .ad-empty--sm { justify-content: flex-start; min-height: 48px; padding: 0 16px; font-size: 12.5px; color: var(--zf-text-3); }
.ad-ui2 .ad-grid > .panel2 > .ad-empty--sm, .ad-ui2 .ad-grid > .panel2 > div:not(:last-child) { flex: none; }
/* 收入图随面板高度伸展（与左边「需要处理」等高时不留空白） */
.ad-ui2 .ad-chartpanel > .ad-chart { flex: 1 1 auto; height: auto; min-height: 168px; }
/* 订单表：订单号、用户、金额、状态固定宽度，「内容」有上限；多出来的宽度放在最后的箭头列 */
body[data-admin="orders"] .ad-ui2 .ad-table { --cols: 180px minmax(190px, 250px) minmax(200px, 400px) 112px 100px minmax(28px, 1fr) !important; }
body[data-admin="orders"] .ad-ui2 .ad-row > .drow__go { justify-self: end; }
/* 顶栏「帮助与客服」是给会员联系客服用的，后台不需要 */
.ad-ui2 .app__tools [data-pop="#helpMenu"] { display: none; }
/* r34：详情页（有上一级）保留面包屑，放在搜索左侧 */
.ad-ui2 .app__crumb.is-deep { display: flex; flex: none; font-size: 13px; }
.ad-ui2 .app__crumb.is-deep + .app__tools .app__search { width: 280px; }
/* r34：同一排等高时，被拉高的面板内容从顶部排列（不把行撑开） */
.ad-ui2 .ad-grid > .panel2 > :last-child { align-content: start; }
/* r34：抽屉、弹窗、下拉挂在 body 上（不在 .ad-ui2 里），用 :has 判断后台页面 */
body:has(.ad-ui2) .zf-drawer__panel { top: 0; right: 0; bottom: 0; border-radius: 0; box-shadow: -1px 0 0 var(--zf-line), -24px 0 48px -32px rgba(11, 31, 51, .35); }
body:has(.ad-ui2) .zf-drawer__head { padding: 14px 20px; min-height: 56px; }
body:has(.ad-ui2) .zf-drawer__head h3 { font-size: 16px !important; }
body:has(.ad-ui2) .zf-drawer__body { padding: 16px 20px; }
body:has(.ad-ui2) .zf-drawer__foot { padding: 12px 20px; border-radius: 0; }
body:has(.ad-ui2) .zf-modal__dialog { border-radius: 10px; }
body:has(.ad-ui2) .zf-pop { border-radius: var(--ui2-r, 8px); background: var(--zf-surface); -webkit-backdrop-filter: none; backdrop-filter: none; border-color: var(--zf-line); }
/* r34：客服工单左右两栏等高（列表的分页贴底） */
.ad-ui2 .ad-tk { gap: 16px; align-items: stretch; grid-template-columns: 380px minmax(0, 1fr); }
.ad-ui2 .ad-tk > .panel2 { display: flex; flex-direction: column; min-height: calc(100vh - 156px); }
.ad-ui2 .ad-tk > .panel2 > .bpager { margin-top: auto; }
.ad-ui2 .ad-tk__conv { min-height: calc(100vh - 156px); }
.ad-ui2 .ad-tk__h { padding: 12px 16px; }

/* =====================================================================
   r35 后台侧栏（2026-11-07）：品牌区与底部账户固定、中间菜单单独滚动（细滚动条），
   按业务领域分组；支持收起为 64px 图标栏（记在本机 zf_admin_side，⌘/Ctrl + \ 切换）
   ===================================================================== */
.ad-ui2.app { transition: grid-template-columns 200ms var(--zf-ease-out); }
.ad-ui2.app.no-anim, .ad-ui2.app.no-anim * { transition: none !important; }
.ad-ui2 .app__side { overflow: hidden; padding: 0; }
.ad-ui2 .app__head { display: flex; align-items: center; justify-content: space-between; gap: 6px; height: 56px; padding: 0 10px 0 12px; border-bottom: 1px solid var(--zf-line); flex: none; }
.ad-ui2 .app__brand { height: 32px; padding: 0 6px; margin: 0; min-width: 0; }
.ad-ui2 .app__brand img { height: 22px; }
.ad-ui2 .app__mark { display: none; }
[data-theme="dark"] .ad-ui2 .app__brand .app__mark { display: none; }
.ad-ui2 .app__tag { height: 20px; line-height: 20px; padding: 0 6px; font-size: 11px; border-radius: 4px; }
.ad-ui2 .app__fold { flex: none; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 6px; color: var(--zf-text-3); }
.ad-ui2 .app__fold:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.ad-ui2 .app__fold svg { width: 18px; height: 18px; transition: transform 200ms var(--zf-ease-out); }
.ad-ui2 .app__nav { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 6px 10px 12px; scrollbar-width: thin; scrollbar-color: transparent transparent; }
.ad-ui2 .app__nav:hover { scrollbar-color: var(--zf-line-2) transparent; }
.ad-ui2 .app__grp { padding: 14px 10px 4px; }
.ad-ui2 .app__grp:first-child { padding-top: 6px; }
.ad-ui2 .app__lbl { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ad-ui2 .app__sidefoot { flex: none; margin-top: 0; gap: 2px; padding: 8px 10px 10px; border-top: 1px solid var(--zf-line); }
.ad-ui2 .app__home { height: 34px; padding: 0 10px; border-radius: 6px; font-size: 13px; }
.ad-ui2 .app__me { padding: 6px; border-radius: 8px; }
.ad-ui2 .app__me .mem__avatar { width: 30px; height: 30px; border-radius: 8px; font-size: 13px; }

/* 收起：64px 图标栏 */
.ad-ui2.app.is-rail { --app-side: 64px; }
.ad-ui2.is-rail .app__head { flex-direction: column; justify-content: center; gap: 4px; height: auto; padding: 12px 0 8px; }
.ad-ui2.is-rail .app__brand { padding: 0; }
.ad-ui2.is-rail .app__brand .logo-light, .ad-ui2.is-rail .app__brand .logo-dark, .ad-ui2.is-rail .app__tag { display: none !important; }
.ad-ui2.is-rail .app__brand .app__mark { display: block !important; height: 26px; width: 26px; }
.ad-ui2.is-rail .app__fold svg { transform: scaleX(-1); }
.ad-ui2.is-rail .app__nav { padding: 6px 8px 12px; scrollbar-width: none; }
.ad-ui2.is-rail .app__grp { height: 1px; margin: 8px 8px; padding: 0; overflow: hidden; font-size: 0; background: var(--zf-line); }
.ad-ui2.is-rail .app__grp:first-child { display: none; }
.ad-ui2.is-rail .app__nav a { justify-content: center; gap: 0; padding: 0; height: 38px; }
.ad-ui2.is-rail .app__nav a svg { width: 18px; height: 18px; }
.ad-ui2.is-rail .app__lbl { display: none; }
.ad-ui2.is-rail .app__nav a.is-on::before { top: 10px; bottom: 10px; }
.ad-ui2.is-rail .app__nav .badge { position: absolute; top: 5px; right: 7px; min-width: 8px; width: 8px; height: 8px; padding: 0; font-size: 0; border-radius: 50%; background: var(--zf-text-3); }
.ad-ui2.is-rail .app__nav .badge--warn { background: #E08A00; }
.ad-ui2.is-rail .app__sidefoot { padding: 8px; }
.ad-ui2.is-rail .app__home { justify-content: center; padding: 0; gap: 0; }
.ad-ui2.is-rail .app__home svg:last-child { display: none; }
.ad-ui2.is-rail .app__me { justify-content: center; }
.ad-ui2.is-rail .app__me-id, .ad-ui2.is-rail .app__me > svg { display: none; }

/* 收起时悬停显示的名称 */
.ad-fly { position: fixed; z-index: var(--zf-z-dropdown, 60); display: flex; align-items: center; gap: 8px; height: 30px; padding: 0 10px; border-radius: 6px; background: var(--zf-ink-900, #0B1F33); color: #fff; font-size: 12.5px; font-weight: 500; white-space: nowrap; pointer-events: none; transform: translate(-4px, -50%); opacity: 0; transition: opacity 120ms, transform 120ms; }
.ad-fly.is-open { opacity: 1; transform: translate(0, -50%); }
.ad-fly .badge { min-width: 18px; height: 18px; padding: 0 5px; border-radius: 99px; background: rgba(255,255,255,.16); color: #fff; font-size: 11px; font-weight: 700; line-height: 18px; text-align: center; }
.ad-fly .badge--warn { background: #E08A00; }
[data-theme="dark"] .ad-fly { background: #E6EDF3; color: #0B1F33; }

/* 服务条款、隐私政策、数据使用协议、关于我们（2026-11-08）：正文链接、右侧目录当前页 */
.legal-body a { color: var(--zf-green-700, #00904A); text-decoration: underline; text-underline-offset: 3px; }
.legal-body h2 { scroll-margin-top: 96px; }
.legal-body strong { color: var(--zf-text); }
.pside .drow.is-on { background: var(--zf-green-50); }
.pside .drow.is-on b { color: var(--zf-green-800, #0B5F3A); }
[data-theme="dark"] .legal-body a { color: #4FD49A; }
[data-theme="dark"] .pside .drow.is-on { background: rgba(47,190,121,.10); }
[data-theme="dark"] .pside .drow.is-on b { color: #7FE3B4; }

/* ---------- 2026-11-11 侧栏：分组是带图标的一级菜单，子页面缩进在下面（admin-shell.js navHTML）---------- */
.ad-ui2 .app__nav { align-content: start; }
.ad-ui2 .app__sec--top { display: grid; gap: 1px; padding-bottom: 6px; margin-bottom: 6px; border-bottom: 1px solid var(--zf-line); }
.ad-ui2 .app__sec { display: grid; }
.ad-ui2 .app__sec + .app__sec { margin-top: 1px; }
/* 一级菜单（分组） */
.ad-ui2 .app__sec > .app__grp { position: relative; display: flex; align-items: center; gap: 10px; width: 100%; height: 36px; padding: 0 10px; border-radius: 6px; font: inherit; font-size: 13.5px; font-weight: 500; letter-spacing: 0; color: var(--zf-text-2); text-align: left; cursor: pointer; transition: background-color var(--zf-dur-hover), color var(--zf-dur-hover); }
.ad-ui2 .app__sec > .app__grp > svg { width: 16px; height: 16px; flex: none; color: var(--zf-text-3); transition: color var(--zf-dur-hover); }
.ad-ui2 .app__sec > .app__grp .app__lbl { flex: 1; min-width: 0; }
.ad-ui2 .app__sec > .app__grp:hover { background: var(--zf-ink-50); color: var(--zf-text); }
.ad-ui2 .app__sec > .app__grp:hover > svg { color: var(--zf-text-2); }
.ad-ui2 .app__sec > .app__grp:focus-visible { outline: 2px solid var(--zf-green-600); outline-offset: -2px; }
.ad-ui2 .app__chev { display: grid; place-items: center; width: 16px; height: 16px; flex: none; color: var(--zf-text-3); }
.ad-ui2 .app__chev svg { width: 14px; height: 14px; transform: rotate(-90deg); transition: transform .22s var(--zf-ease, ease); }
.ad-ui2 .app__sec.is-open > .app__grp .app__chev svg { transform: rotate(0deg); }
/* 当前页面所在的分组：文字加深、图标品牌绿 */
.ad-ui2 .app__sec.is-here > .app__grp { color: var(--zf-text); font-weight: 600; }
.ad-ui2 .app__sec.is-here > .app__grp > svg { color: var(--zf-green-600); }
.ad-ui2 .app__sec.is-here:not(.is-open) > .app__grp { background: var(--zf-green-50); color: var(--zf-green-800); }
.ad-ui2 .app__grpn { height: 18px; min-width: 18px; padding: 0 6px; border-radius: 99px; background: var(--zf-ink-100); color: var(--zf-text-2); font-size: 11px; font-weight: 600; line-height: 18px; text-align: center; }
.ad-ui2 .app__grpn.badge--warn { background: rgba(224,138,0,.14); color: #A86400; }
.ad-ui2 .app__sec.is-open .app__grpn { display: none; }
/* 二级菜单（页面）：缩进、左侧引导线，不重复图标 */
.ad-ui2 .app__items { display: none; }
.ad-ui2 .app__sec.is-open > .app__items { display: block; animation: zfNavIn .2s ease both; }
.ad-ui2 .app__items > div { position: relative; display: grid; gap: 1px; padding: 2px 0 4px; }
.ad-ui2 .app__items > div::before { content: ""; position: absolute; left: 18px; top: 4px; bottom: 6px; width: 1px; background: var(--zf-line); }
.ad-ui2 .app__items a { height: 32px; padding-left: 36px; font-size: 13.5px; }
.ad-ui2 .app__items a > svg { display: none; }
.ad-ui2 .app__items a.is-on::before { left: 17px; top: 8px; bottom: 8px; width: 3px; border-radius: 2px; }
@keyframes zfNavIn { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .ad-ui2 .app__sec.is-open > .app__items { animation: none; } .ad-ui2 .app__chev svg { transition: none; } }
.no-anim .app__sec > .app__items { animation: none !important; }
[data-theme="dark"] .ad-ui2 .app__grpn.badge--warn { color: #F5B544; }
[data-theme="dark"] .ad-ui2 .app__sec.is-here:not(.is-open) > .app__grp { background: rgba(47,190,121,.10); color: #7FE0B0; }
/* 收起成图标栏：分组标题只作分隔线，页面全部显示并带图标 */
.ad-ui2.is-rail .app__sec--top { border-bottom: 0; margin-bottom: 0; }
.ad-ui2.is-rail .app__sec > .app__grp { display: block; height: 1px; min-height: 1px; margin: 8px 10px; padding: 0; overflow: hidden; background: var(--zf-line); border-radius: 0; pointer-events: none; }
.ad-ui2.is-rail .app__sec > .app__grp > * { display: none; }
.ad-ui2.is-rail .app__items { display: block; animation: none; }
.ad-ui2.is-rail .app__items > div::before { display: none; }
.ad-ui2.is-rail .app__items a { height: 38px; padding-left: 0; }
.ad-ui2.is-rail .app__items a > svg { display: block; }
.ad-ui2.is-rail .app__items a.is-on::before { left: 0; top: 10px; bottom: 10px; }

.ad-market-sources {
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}
.ad-market-sources .srow2 {
  display: grid;
  grid-template-columns: auto minmax(4rem, 1fr) auto;
  align-items: center;
  gap: 12px;
  padding: 8px 0;
}
.ad-market-sources input { accent-color: var(--zf-green-600); }

.ad-kpi--five { grid-template-columns: repeat(5, minmax(0, 1fr)); }
#bellItems .bpager { gap: 6px; flex-wrap: wrap; }

/* =====================================================================
   后台版面修订（2026-11-13）：只作用于运营后台（.ad），会员中心不受影响
   - ad-srows--2  设置表单两列排（原来一行一项，表单越加越长）
   - ad-subtabs   面板内的二级切换：同一张表单分成几部分，只显示当前部分
   - ad-facts     只读信息排成三列小格
   - ad-picks     多选项排成多列
   - ad-scroll    行数不定的内容限高，在面板里滚动
   ===================================================================== */
.ad .ad-srows--2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ad .ad-srows--2 > .srow2, .ad .ad-srows--2 > [data-auth] > .srow2 { grid-template-columns: 116px minmax(0, 1fr) auto; gap: 14px; padding: 10px 20px; min-height: 60px; border-bottom: 1px solid var(--zf-line); }
.ad .ad-srows--2 > [data-auth] { display: grid; }
.ad .ad-srows--2 > [data-auth][hidden] { display: none; }
.ad .ad-srows--2 > .srow2--head, .ad .ad-srows--2 > .srow2--wide, .ad .ad-srows--2 > .ad-formfoot, .ad .ad-srows--2 > .pf-state, .ad .ad-srows--2 > .ad-picks { grid-column: 1 / -1; }
.ad .ad-srows--2 > .srow2--head { min-height: 0; padding-top: 8px; padding-bottom: 8px; }
.ad .ad-srows--2 .srow2__v > .zf-input, .ad .ad-srows--2 .srow2__v > .ad-in-lg { flex: 1 1 180px; min-width: 0; max-width: none; }
.ad .ad-srows--2 .srow2__v > .ad-sel { flex: 0 1 220px; }
.ad .ad-srows--2 .srow2__v > .ad-sel select { width: 100%; }
.ad .ad-srows--2 .srow2__v > small { flex: 1 1 100%; line-height: 1.45; }
.ad .ad-srows--2 .srow2__a:empty { display: none; }
.ad .ad-srows--2 > .srow2--wide { grid-template-columns: 116px minmax(0, 1fr) auto; }

.ad .ad-subtabs { display: flex; align-items: center; flex-wrap: wrap; gap: 10px 16px; padding: 10px 16px; border-bottom: 1px solid var(--zf-line); background: var(--zf-surface-2); }
.ad .ad-subtabs > small { margin-left: auto; font-size: 12.5px; color: var(--zf-text-3); }
.ad .ad-fsec[hidden] { display: none; }

.ad .ad-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--zf-line); border-top: 1px solid var(--zf-line); border-bottom: 1px solid var(--zf-line); }
.ad .ad-facts--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ad .ad-facts--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ad .ad-facts > div { display: grid; align-content: start; gap: 4px; min-width: 0; padding: 12px 20px; background: var(--zf-surface); font-size: 14px; }
.ad .ad-facts > div > span { font-size: 12.5px; color: var(--zf-text-3); }
.ad .ad-facts > div > b { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 8px; min-width: 0; font-weight: 500; color: var(--zf-text); overflow-wrap: anywhere; }
.ad .ad-facts > div > small { font-size: 12.5px; color: var(--zf-text-3); line-height: 1.45; }
.ad .ad-facts:last-child { border-bottom: 0; }

.ad .ad-picks { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 1px; background: var(--zf-line); border-bottom: 1px solid var(--zf-line); }
.ad .ad-pick { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 56px; padding: 8px 20px; background: var(--zf-surface); cursor: pointer; }
.ad .ad-pick:hover { background: var(--zf-surface-2); }
.ad .ad-pick input { accent-color: var(--zf-green-600); width: 16px; height: 16px; }
.ad .ad-pick > span { display: grid; gap: 2px; min-width: 0; }
.ad .ad-pick > span > b { font-size: 14px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ad .ad-pick > span > small { font-size: 12px; color: var(--zf-text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ad .ad-picks__fill { background: var(--zf-surface); }

.ad .ad-scroll { max-height: min(56vh, 520px); overflow: auto; overscroll-behavior: contain; }
.ad .ad-tabs--split { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ad .ad-more { display: flex; align-items: center; gap: 6px; padding: 10px 16px 2px; font-size: 13px; font-weight: 600; color: var(--zf-text-2); text-decoration: none; }
.ad .ad-more:hover { color: var(--zf-brand-700, var(--zf-text)); }
.ad .ad-more svg { width: 14px; height: 14px; }
.ad .ad-panel > .ad-todo--pad { padding: 4px 8px 8px; }
.ad .ad-card > .ad-sec + .ad-sec { margin-top: 18px; padding-top: 16px; border-top: 1px solid var(--zf-line); }
/* 两列表单里一段的行数是单数时，最后一行右边是空的：把分隔线补成整行 */
.ad .pf-clamp2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
.ad .pf-chip--more { border: 0; cursor: pointer; font: inherit; font-size: 11.5px; font-weight: 600; color: var(--zf-green-700); background: var(--zf-green-50); }
[data-theme="dark"] .ad .pf-chip--more { color: #7FD7AA; background: rgba(47,190,121,.14); }
/* 接入步骤横排：一行看完，不再竖着占半屏 */
.ad .pf-stagewrap .pf-steps { grid-template-columns: repeat(auto-fit, minmax(132px, 1fr)); margin-bottom: 12px; }
.ad .pf-stagewrap .pf-step { grid-template-columns: 1fr; gap: 6px; padding: 0 12px 0 0; }
.ad .pf-stagewrap .pf-step i { margin-top: 0; }
.ad .pf-stagewrap .pf-step:not(:last-child)::after { left: 18px; right: 6px; top: 5px; bottom: auto; width: auto; height: 1.5px; }
.ad .ad-srows--2::after { content: ""; grid-column: 1 / -1; margin-top: -1px; border-top: 1px solid var(--zf-line); }
.ad .ad-srows--2 > .srow2--head, .ad .ad-srows--2 > .ad-formfoot { box-shadow: 0 -1px 0 var(--zf-line); }
