/* 越生活 · 越南华人生活服务平台 H5（测试版） */
:root{
  --primary:#2f6bff;--primary-deep:#1e4fd6;--accent:#ff7a1a;
  --bg:#f4f6fb;--card:#fff;--text:#1c2333;--muted:#8a93a6;
  --line:#eef0f6;--green:#12b76a;--red:#e5484d;--gold:#b7791f;
  --radius:14px;
  /* 中越双语安全字体栈：iOS → 鸿蒙/小米 → 安卓原生 → Windows → Linux 逐级兜底。
     缺任何一级都会自动降级到下一种中文字体，杜绝「方块字 / 豆腐块」；
     末尾 Roboto+Arial 保证越南语扩展拉丁字符（ă â đ ê ô ơ ư）正常显示。 */
  --font:-apple-system,BlinkMacSystemFont,"PingFang SC","HarmonyOS Sans SC","Miui","Hiragino Sans GB","Noto Sans CJK SC","Noto Sans SC","Source Han Sans SC","Source Han Sans CN","Microsoft YaHei","WenQuanYi Micro Hei",Roboto,"Helvetica Neue",Helvetica,Arial,"Segoe UI",sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
body{font-family:var(--font);background:#e9edf5;color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%}
/* 表单控件不继承父级字体 Family，需显式指定，否则 iOS/Android 上输入框内中文
   会用系统默认字体，与页面正文字体不一致（视觉上「字体乱」的典型来源） */
input,textarea,select,button{font-family:inherit;font-size:100%;line-height:1.5}
#app{max-width:520px;margin:0 auto;min-height:100vh;background:var(--bg);position:relative;padding-bottom:80px;box-shadow:0 0 24px rgba(20,40,90,.08);overflow-wrap:break-word;display:flex;flex-direction:column}
/* 内容不足一屏时（娱乐 / 外卖 / 失物等板块）把余量交给内容区，
   避免底部露出一大片空白，让背景色一直铺到底 */
#view{flex:1 0 auto;display:flex;flex-direction:column}
#view>.pagehead{flex:none}
#view>.sec:last-child,#view>div:last-child{flex:1 0 auto}
a{text-decoration:none;color:inherit}
ul{list-style:none}
button{font-family:inherit;border:0;background:none;cursor:pointer}

/* ===== 图标与越南语排版补强 ===== */
/* 卡片左侧缩略图：改为内联 SVG 后需撑满容器；letter-spacing 是给旧版「汉字占位」用的，此处归零 */
.thumb.tb-ic{padding:10px;letter-spacing:0;font-size:0}
.thumb.tb-ic .ic-svg{width:100%;height:100%;color:#fff;opacity:.96}
.thumb.ht.tb-ic{padding:9px}
/* 单字语义标签（如「求」/「供」）：字号放大即可，绝不能加 letter-spacing——
   CSS 会在末字符右侧也补一个字距，导致单字整体视觉左偏、看起来没居中 */
.thumb.tb-one{font-size:19px;letter-spacing:0}
/* 宫格内的圆形/圆角色块：同样改为 SVG */
.gi .ico.ic-wrap{padding:11px;font-size:inherit;font-weight:inherit}
.gi .ico .ic-svg{width:100%;height:100%;color:#fff}
/* 越南语副标题：必须独立成行。放在 h3 内会被 nowrap+ellipsis 直接吞掉，
   导致双语模式形同虚设（原 bug：招聘 / 酒店 / 便利店三页越南语完全不可见） */
.vnl{display:block;font-size:12.5px;color:#0f766e;font-style:italic;font-weight:400;line-height:1.45;margin-top:3px}
.hd-info .vnl{margin:3px 0 5px;font-size:12px}
@media (prefers-color-scheme:dark){.vnl{color:#0e8f80}}
/* 二维码 / 快捷入口的老版方块保持兼容 */
.qgrid a i{font-style:normal}
.qgrid a i .ic-svg{width:100%;height:100%;color:#fff}
/* ===== 顶栏 ===== */
.topbar{position:sticky;top:0;z-index:40;display:flex;align-items:center;justify-content:space-between;gap:10px;height:52px;padding:0 12px;background:linear-gradient(135deg,#2f6bff,#1e4fd6);color:#fff}
.tb-city{display:flex;align-items:center;gap:4px;font-size:14px;flex:none}
.tb-city .pin{width:8px;height:8px;border-radius:50% 50% 50% 0;background:#ffd66e;transform:rotate(-45deg);display:inline-block}
.tb-city .caret{width:0;height:0;border:4px solid transparent;border-top-color:#fff;margin-top:6px}
/* 顶栏标题：首页「越生活」，其余页面显示栏目名 */
.tb-title{flex:1;min-width:0;text-align:center;font-size:17px;font-weight:700;letter-spacing:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tb-right{display:flex;align-items:center;gap:8px;flex:none}
.tb-back{display:none;align-items:center;justify-content:center;width:52px;height:44px;border-radius:22px;font-size:24px;line-height:1;font-weight:400;opacity:.92;cursor:pointer;-webkit-tap-highlight-color:transparent;padding-bottom:3px}
.tb-back:active{background:rgba(255,255,255,.2)}
.tb-lang{font-size:12px;line-height:1;padding:5px 9px;border:1px solid rgba(255,255,255,.45);border-radius:20px;cursor:pointer;font-weight:600;min-width:16px;text-align:center;-webkit-tap-highlight-color:transparent}
.tb-lang:active{background:rgba(255,255,255,.22)}
.tb-act{font-size:13px;padding:5px 10px;border:1px solid rgba(255,255,255,.45);border-radius:20px}
/* 简繁切换开关 */
.langsw{display:inline-flex;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.langsw b{font-size:12px;font-weight:500;padding:4px 14px;color:var(--muted);background:#fff;cursor:pointer}
.langsw b+b{border-left:1px solid var(--line)}
.langsw b.on{background:var(--primary);color:#fff;font-weight:600}
/* 语言设置里的补充说明（跟随系统 · zh-TW / 已手动锁定）。
   限定在 .kv .v 内定义，避免 .sub 变成全局类名污染其它模块。 */
.kv .v .sub{font-size:12px;color:#9aa3b4;margin-left:2px;white-space:nowrap}
/* 板块内语言条（签证板块：简 / 繁 / 越南语） */
.langbar{display:flex;gap:8px;padding:0 14px;margin-top:-4px}
.langbar span{flex:1;text-align:center;font-size:12.5px;padding:8px 0;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--muted);cursor:pointer}
.langbar span.on{border-color:var(--primary);background:#eef3ff;color:var(--primary);font-weight:700}

/* ===== 首页 Banner ===== */
.banner{background:linear-gradient(135deg,#2f6bff,#1e4fd6);padding:14px 16px 42px;color:#fff}
.banner h1{font-size:22px;letter-spacing:1px}
.banner p{font-size:12px;opacity:.9;margin-top:6px}
.banner .tag{display:inline-block;margin-top:10px;font-size:12px;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.35);padding:3px 10px;border-radius:20px}
/* 风险滚动条 */
.ticker{margin:-30px 14px 0;background:#fff;border-radius:12px;box-shadow:0 4px 14px rgba(20,40,90,.08);display:flex;align-items:center;padding:11px 10px;font-size:13px;overflow:hidden}
.ticker .tk-tag{flex-shrink:0;background:#fdecec;color:var(--red);font-size:12px;padding:2px 7px;border-radius:6px;margin-right:8px;font-weight:600}
.ticker .tk-txt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#5a6272}

/* ===== 首页 · 紧急求助条 =====
   为什么常驻首页：见 app.js 里 sosStrip() 的注释 —— 真出事时人不会去援助站翻菜单。
   整体上走「浅红底 + 描边 + 左侧红条」而不是大面积实心红：
   实心红块第一眼像促销 banner，反而削弱警示性，也压过上面的宫格导航。 */
.sos-strip{position:relative;margin:10px 12px 0;padding:11px 12px 12px 14px;
  background:#fff;border:1px solid #fbd5d5;border-radius:var(--radius)}
.sos-strip::before{content:"";position:absolute;left:0;top:9px;bottom:9px;width:3px;
  border-radius:0 3px 3px 0;background:var(--red)}
.sos-hd{display:flex;align-items:center;gap:6px;margin-bottom:9px}
.sos-hd .ic-svg{width:16px;height:16px;color:var(--red);flex:none}
.sos-hd b{font-size:13.5px;color:#1f2430}
.sos-more{margin-left:auto;font-size:12px;color:var(--muted);text-decoration:none;padding:2px 0 2px 8px}
.sos-row{display:flex;gap:8px}
/* 三个本地号码做成等分大按钮：单手能点到，是这块唯一需要「盲操作」的元素 */
.sos-c{flex:1;min-width:0;display:block;text-align:center;text-decoration:none;
  padding:8px 4px;border-radius:10px;border:1px solid #fadada;
  background:linear-gradient(180deg,#fff6f6,#ffeded);transition:transform .12s,background .12s}
.sos-c b{display:block;font-size:19px;font-weight:700;line-height:1.2;letter-spacing:.5px;color:var(--red)}
.sos-c span{display:block;font-size:12.5px;color:#8a5a5a;margin-top:1px}
.sos-c:active{transform:scale(.97);background:#ffe2e2}
/* 使馆 / 12308 是次要项，压到小字；宽屏并排一行，窄屏自动折成两行 */
.sos-ft{display:flex;flex-wrap:wrap;gap:4px 14px;margin-top:9px}
.sos-ft a{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;
  color:var(--muted);text-decoration:none;min-width:0}
.sos-ft a .ic-svg{width:13px;height:13px;flex:none;color:var(--primary)}
.sos-ft a span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sos-ft a b{flex:none;color:#1f2430;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}

/* ===== 宫格 ===== */
.grid-wrap{background:var(--card);margin:12px 14px;border-radius:var(--radius);padding:14px 6px 6px;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px 0}
.gi{display:flex;flex-direction:column;align-items:center;gap:6px;font-size:12px;color:#3c4457}
.gi .ico{width:44px;height:44px;border-radius:13px;display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:700;color:#fff}
.gi:active{opacity:.7}

/* ===== 通用区块 ===== */
.sec{margin:12px 14px;background:var(--card);border-radius:var(--radius);padding:14px;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.sec-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.sec-h h2{font-size:16px;font-weight:700}
.sec-h h2::before{content:"";display:inline-block;width:4px;height:14px;background:var(--primary);border-radius:2px;margin-right:7px;vertical-align:-2px}
.sec-h .more{font-size:12px;color:var(--muted)}
.note-bar{margin:12px 14px;font-size:12px;color:var(--muted);text-align:center;line-height:1.7}

/* ===== 徽章 ===== */
.bdg{display:inline-block;font-size:11px;padding:2px 7px;border-radius:5px;margin-right:5px;vertical-align:1px;font-weight:600}
.b-official{background:#e8efff;color:var(--primary-deep)}
.b-verify{background:#e6f8ef;color:#0e9355}
.b-wait{background:#f1f3f8;color:#7c8496}
.b-partner{background:#fff4e8;color:#c96a10}
.b-risk{background:#fdecec;color:var(--red)}
.b-demo{background:#f1f3f8;color:#7c8496;border:1px dashed #c6cddc}

/* ===== 卡片列表 ===== */
.cell{display:flex;gap:12px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--line)}
.cell:last-child{border-bottom:0;padding-bottom:2px}
/* 缩略图对齐卡片顶部；不再让 66px 固定高度「钉死」整行高度——
   原 bug：.cell 高度由 .thumb 撑定，正文换行超过 66px 时，第三行标签会被
   卡片底边裁掉（招聘页「执照已核验」、援助站「酒店身份」只剩半截） */
.thumb{width:86px;height:66px;align-self:flex-start;border-radius:10px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:12px;color:#fff;font-weight:600}
.cell-bd{flex:1;min-width:0}
.cell-bd h3{font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cell-bd h3 .vn{font-size:12px;color:var(--muted);font-weight:400;margin-left:6px}
.cell-bd p{font-size:12px;color:var(--muted);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cell-ft{display:flex;gap:6px;row-gap:5px;margin-top:6px;flex-wrap:wrap;align-items:center}
.mini{font-size:11px;color:#7c8496;background:#f1f3f8;border-radius:4px;padding:1px 6px;white-space:nowrap}
.cell-act{display:flex;flex-direction:column;justify-content:center;align-items:flex-end;gap:6px;flex-shrink:0}

/* ===== 按钮 ===== */
.btn{display:inline-flex;align-items:center;justify-content:center;font-size:13px;border-radius:9px;padding:7px 14px;font-weight:600}
.btn-p{background:var(--primary);color:#fff}
.btn-o{border:1px solid var(--primary);color:var(--primary);background:#fff}
.btn-g{background:#f1f3f8;color:#5a6272}
.btn-a{background:var(--accent);color:#fff}
.btn-block{width:100%;padding:12px;font-size:15px;border-radius:12px}
.btn-sm{font-size:12px;padding:5px 10px;border-radius:7px}

/* ===== chips ===== */
.chips{display:flex;gap:8px;overflow-x:auto;padding:2px 14px 12px;scrollbar-width:none}
.chips::-webkit-scrollbar{display:none}
.chip{flex-shrink:0;font-size:12px;padding:6px 13px;border-radius:18px;background:#fff;color:#5a6272;border:1px solid var(--line)}
.chip.on{background:var(--primary);color:#fff;border-color:var(--primary)}

/* ===== tabs ===== */
.tabs{display:flex;background:var(--card);padding:0 14px;border-radius:var(--radius) var(--radius) 0 0;position:relative}
.tabs::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--line)}
.tab-it{flex:1;text-align:center;font-size:14px;padding:13px 0;color:var(--muted);position:relative;cursor:pointer;white-space:nowrap}
.tab-it.on{color:var(--primary);font-weight:700}
.tab-it.on::after{content:"";position:absolute;left:50%;transform:translateX(-50%);bottom:0;width:26px;height:3px;background:var(--primary);border-radius:3px}
/* tab 上的命中条数角标。简繁转换会把它拆成独立标签，
   故必须显式设成行内块，否则整个 tab 文字会被撑成两行（求购 / 5 上下错位） */
.tab-it .tabn{display:inline-block;min-width:16px;margin-left:4px;padding:0 5px;border-radius:8px;background:#eef1f7;color:#7c8496;font-size:10.5px;font-weight:700;line-height:15px;text-align:center;vertical-align:1px}
.tab-it.on .tabn{background:#e8efff;color:var(--primary)}

/* ===== 页头 ===== */
.pagehead{background:linear-gradient(135deg,#2f6bff,#1e4fd6);padding:16px 16px 18px;color:#fff}
.pagehead h1{font-size:19px}
.pagehead p{font-size:12px;opacity:.9;margin-top:5px;line-height:1.6}

/* ===== 签证 ===== */
.visa-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.visa-card{background:var(--card);border-radius:12px;padding:14px;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.visa-card h3{font-size:15px}
.visa-card .vn{font-size:12px;color:var(--muted);margin-top:3px}
.visa-card .pr{font-size:17px;color:var(--accent);font-weight:800;margin-top:8px}
.visa-card .pr small{font-size:11px;font-weight:400;color:var(--muted)}
.visa-card .btn{margin-top:10px;width:100%}
.steps{counter-reset:s}
.steps li{position:relative;padding:0 0 16px 34px;font-size:13px}
.steps li::before{counter-increment:s;content:counter(s);position:absolute;left:0;top:-2px;width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center}
.steps li::after{content:"";position:absolute;left:10.5px;top:22px;bottom:2px;width:1px;background:var(--line)}
.steps li:last-child::after{display:none}
.steps li b{display:block;font-size:14px}
.steps li span{color:var(--muted);font-size:12px}

/* ===== 状态/统计 ===== */
.stat-row{display:flex;gap:10px;margin:12px 14px}
.stat{flex:1;background:var(--card);border-radius:12px;padding:12px;text-align:center;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.stat b{font-size:20px;color:var(--primary)}
.stat span{display:block;font-size:12px;color:var(--muted);margin-top:3px}
.kv{display:flex;justify-content:space-between;font-size:13px;padding:7px 0;border-bottom:1px dashed var(--line)}
.kv:last-child{border:0}
.kv .k{color:var(--muted)}
.kv .v{font-weight:600}
.kv .v.price{color:var(--accent)}

/* ===== 升级权益 ===== */
.tier{border-radius:12px;padding:14px;margin-bottom:10px;border:1px solid var(--line);background:#fff}
.tier.now{border-color:var(--primary);background:#f5f8ff}
.tier h4{font-size:15px;display:flex;align-items:center;gap:8px}
.tier ul{margin-top:8px}
.tier li{font-size:12px;color:#5a6272;padding:3px 0 3px 16px;position:relative}
.tier li::before{content:"";position:absolute;left:2px;top:9px;width:6px;height:6px;border-radius:50%;background:var(--primary)}
.tier .btn{margin-top:10px}

/* ===== 信息流（风险提醒） ===== */
.feed{padding:12px 14px}
.feed-card{background:var(--card);border-radius:12px;padding:13px;margin-bottom:10px;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.feed-card h3{font-size:14.5px;line-height:1.5}
.feed-card p{font-size:12.5px;color:#5a6272;margin-top:6px;line-height:1.65}
.feed-meta{display:flex;align-items:center;flex-wrap:wrap;gap:4px 6px;margin-top:9px;font-size:12px;color:var(--muted);line-height:1.5}
/* 元信息里「日期 · 来源 · 范围」三段并排，范围长时会挤成竖排叠字。
   给每段允许收缩并省略，同时把「查看详情」固定住不参与收缩。 */
.feed-meta>span:not([style]){min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.feed-meta .nd-go{flex:none;margin-left:auto}

/* ===== 紧急联系 ===== */
/* ===== 援助站 · 紧急电话 =====
   原样式只是一个红底小卡片、号码是纯文本。现在内容变多（本地 / 使领馆 / 国内热线 / 协助范围），
   红底会显得压抑且不利于阅读，改为白底红边，把红色留给「最紧急」的 113/114/115 三张大卡。 */
.sos{background:#fff;border:1px solid #ffd9d9;border-radius:12px;padding:13px;margin:12px 14px}
.sos h3{font-size:14px;color:var(--red);margin-bottom:10px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sos .sos-tag{font-size:11px;font-weight:400;color:#8792a6;background:#f4f6fb;border-radius:4px;padding:2px 6px}
.sos-g{margin-top:13px}
.sos-g:first-of-type{margin-top:0}
.sos-gh{display:flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;color:#1c2333}
.sos-gh .dot{width:7px;height:7px;border-radius:50%;flex:none}
.sos-gtip{font-size:12px;color:#8792a6;line-height:1.5;margin:4px 0 8px}
/* 113/114/115：最紧急，做成三张大号色块，点击整块即拨 */
.sos-fast{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.sos-fast a{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;
  background:linear-gradient(145deg,#e5484d,#ff7a1a);border-radius:11px;padding:11px 4px;text-decoration:none;color:#fff;
  box-shadow:0 2px 6px rgba(229,72,77,.2);transition:transform .12s}
.sos-fast a:active{transform:scale(.96)}
.sos-fast .num{font-size:23px;font-weight:800;letter-spacing:.5px;line-height:1.15;font-variant-numeric:tabular-nums}
.sos-fast .lb{font-size:12.5px;opacity:.96}
/* 使领馆 / 热线：一行一条，右侧号码按钮点击即拨 */
.sos-row{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:9px 10px;margin-bottom:7px}
.sos-row .sb{flex:1;min-width:0}
.sos-row .sb b{display:block;font-size:13px;font-weight:600;line-height:1.35}
.sos-row .sb .sub{display:block;font-size:12px;color:#8792a6;margin-top:3px;line-height:1.4}
.sos-hot{display:inline-block;font-size:11px;font-weight:600;color:var(--primary);background:#eaf0ff;border-radius:4px;padding:1px 5px;margin-left:3px;vertical-align:1px}
.sos-row .tel{display:inline-flex;align-items:center;gap:5px;flex:none;background:#eaf0ff;color:var(--primary);
  border-radius:8px;padding:7px 11px;font-size:14px;font-weight:700;text-decoration:none;font-variant-numeric:tabular-nums;transition:background .12s}
.sos-row .tel:active{background:#d7e3ff}
.sos-row .tel .ic-svg{width:14px;height:14px;flex:0 0 14px}
/* 领事协助范围：能做 / 不代办 两栏对照 */
.sos-scope{margin-top:13px;background:#fff;border:1px solid var(--line);border-radius:11px;overflow:hidden}
.sos-scope .sh{font-size:12.5px;font-weight:700;padding:9px 11px;background:#f7f9fd;border-bottom:1px solid var(--line)}
.sos-scope .sb2{padding:10px 11px 4px}
.sos-scope .hd{font-size:12.5px;font-weight:700;margin-bottom:5px}
.sos-scope .hd.ok{color:#0e9355}
.sos-scope .hd.no{color:#e5484d}
.sos-scope ul{margin:0 0 10px;padding-left:17px}
.sos-scope li{font-size:12.5px;color:#5a6272;line-height:1.65}
.sos-note{font-size:10.5px;color:#9aa3b4;line-height:1.55;margin:10px 0 0}

/* ===== 底部tabbar ===== */
.tabbar{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:520px;background:#fff;display:flex;align-items:flex-end;border-top:1px solid var(--line);padding:7px 0 calc(8px + env(safe-area-inset-bottom));z-index:60}
.tabbar a{flex:1;text-align:center;font-size:10.5px;color:var(--muted);display:block}
.tabbar a i{display:block;width:22px;height:22px;line-height:22px;margin:0 auto 3px;border-radius:7px;font-size:12px;font-weight:700;background:#eef1f8;color:#7c8496;font-style:normal}
.tabbar a.on{color:var(--primary);font-weight:700}
.tabbar a.on i{background:#e8efff;color:var(--primary)}
.tabbar a.pub i{background:var(--accent);color:#fff;width:40px;height:40px;line-height:40px;border-radius:50%;margin-top:-16px;font-size:22px;box-shadow:0 6px 14px rgba(255,122,26,.4)}

/* ===== 弹层 ===== */
.mask{position:fixed;inset:0;background:rgba(15,23,42,.55);z-index:80;display:flex;align-items:flex-end;justify-content:center;animation:fade .18s}
@keyframes fade{from{opacity:0}}
.sheet{background:#fff;width:100%;max-width:520px;border-radius:16px 16px 0 0;padding:18px 16px calc(20px + env(safe-area-inset-bottom));max-height:72vh;overflow-y:auto;animation:up .22s}
@keyframes up{from{transform:translateY(40px);opacity:.5}}
.sheet h3{font-size:16px;margin-bottom:12px}
.sheet .close{position:absolute;right:16px;top:14px;font-size:20px;color:var(--muted)}
.city-it{display:flex;align-items:center;justify-content:space-between;padding:12px 4px;border-bottom:1px solid var(--line);font-size:14px}
.city-it.dis{color:#b3bac8}
.city-it .st{font-size:11px}
.city-note{font-size:12px;color:var(--muted);background:#f6f8fc;border-radius:8px;padding:9px 10px;margin-bottom:6px;line-height:1.7}

/* toast */
#toastRoot{position:fixed;left:50%;bottom:120px;transform:translateX(-50%);z-index:99;pointer-events:none}
.toast{background:rgba(23,32,54,.92);color:#fff;font-size:13px;padding:10px 16px;border-radius:9px;max-width:300px;text-align:center;line-height:1.6;animation:fade .2s}

.empty{text-align:center;color:var(--muted);font-size:13px;padding:36px 0}

/* ===== 会员卡片 ===== */
.mcard{background:linear-gradient(135deg,#2f6bff,#1e4fd6);border-radius:14px;padding:16px;color:#fff}
.mcard-hd{display:flex;align-items:center;gap:12px}
.avatar{width:54px;height:54px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700;flex:none}
.avatar.sm{width:42px;height:42px;font-size:17px;background:#eef2fb;color:var(--primary);cursor:pointer}
.mcard-bd{flex:1;min-width:0}
.mcard-bd h3{font-size:17px;margin:0 0 4px;display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.mcard-bd h3 .bdg{background:rgba(255,255,255,.22);color:#fff;border:0;font-size:12px}
.mcard-bd p{font-size:12px;margin:0;opacity:.85}
.mcard .btn-g{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.4);color:#fff}
.mcard-ft{display:flex;margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.2)}
.mi{flex:1;text-align:center}
.mi+.mi{border-left:1px solid rgba(255,255,255,.18)}
.mk{display:block;font-size:12px;opacity:.8;margin-bottom:4px}
.mv{display:block;font-size:12px}
.mv .bdg{background:rgba(255,255,255,.22);color:#fff;border:0;font-size:11px}
.sec-h .sh-act{margin-left:auto;font-size:12px;color:var(--primary);cursor:pointer}

/* ===== 表单 ===== */
.fm{background:#fff}
.fm-row{display:flex;gap:10px;padding:11px 0;border-bottom:1px solid #f0f2f7;align-items:flex-start}
.fm-row.sm{border:0;padding:6px 0}
.fm-l{width:76px;flex:none;font-size:12.5px;color:var(--muted);padding-top:8px}
.fm-row.sm .fm-l{width:82px;padding-top:9px;font-size:12px}
.fm-r{flex:1;min-width:0}
.ipt{width:100%;box-sizing:border-box;border:1px solid #e2e6ee;border-radius:8px;padding:8px 10px;font-size:13.5px;font-family:inherit;color:var(--text);background:#fff}
.ipt:focus{outline:0;border-color:var(--primary)}
.ipt:disabled{background:#f6f8fc;color:var(--muted)}
.fm-tip{display:block;font-size:12px;color:var(--muted);margin-top:5px;line-height:1.6}

/* ===== 上传框 ===== */
.upbox{border:1.5px dashed #c9d2e3;border-radius:10px;padding:16px 12px;text-align:center;cursor:pointer;background:#fafbfd;transition:.15s}
.upbox:active{background:#f0f4fb;border-color:var(--primary)}
.upbox b{display:block;font-size:13.5px;color:var(--primary)}
.upbox span{display:block;font-size:12px;color:var(--muted);margin-top:5px;line-height:1.6}
.upbox.sm{padding:12px 8px}
.upbox.sm b{font-size:12.5px}
.upbox.done{border-style:solid;border-color:#12b76a;background:#f2fbf6}
.upbox.done b{color:#0e9355}
.up2{display:flex;gap:10px}
.up2 .upbox{flex:1}

/* ===== OCR 结果 ===== */
.ocr{background:#f6f9ff;border:1px solid #dde7fb;border-radius:10px;padding:10px 12px}
.ocr-hd{display:flex;align-items:center;gap:8px;margin-bottom:6px;flex-wrap:wrap}
.ocr-hd b{font-size:12.5px;color:var(--primary)}
.ocr-re{margin-left:auto;font-size:12.5px;color:var(--primary);cursor:pointer;text-decoration:underline}
.ocr .fm-row.sm .ipt{background:#fff}

/* ===== 进度条 ===== */
.flow-mini{display:flex;gap:6px;margin:10px 0 14px}
.fm-step{flex:1;text-align:center;font-size:12px;padding:7px 4px;border-radius:8px;background:#f2f4f8;color:var(--muted)}
.fm-step.ok{background:#e9f8f0;color:#0e9355}
.fm-step.now{background:#fff4e5;color:#b8791f;font-weight:600}

/* ===== 发布菜单 ===== */
.pub-it{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid #f0f2f7;cursor:pointer}
.pub-it:last-child{border:0}
.pub-ico{width:38px;height:38px;border-radius:10px;color:#fff;font-size:15px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.pub-it div{flex:1;min-width:0}
.pub-it b{display:block;font-size:14px}
.pub-it span{display:block;font-size:12.5px;color:var(--muted);margin-top:2px}
.pub-it i{color:#c3cad8;font-style:normal;font-size:20px}

/* ===== 帮助与客服（入口收在「我的」内） ===== */
.cs-entry{display:flex;align-items:center;gap:11px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.cs-entry:last-of-type{border-bottom:0}
.cs-ic{width:34px;height:34px;flex:none;border-radius:10px;color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}
.cs-bd{flex:1;min-width:0}
.cs-bd h3{font-size:14px;font-weight:600}
.cs-bd p{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.5}
.cs-entry>i{color:#c4cad6;font-style:normal;font-size:17px}
.cs-time{font-size:12px;color:var(--muted);line-height:1.7;margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
/* 渠道选择 */
.cs-ch{margin:12px 0 4px}
.cs-ch-it{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
.cs-ch-it:last-child{border-bottom:0}
.cs-ico{width:32px;height:32px;flex:none;border-radius:9px;color:#fff;font-size:12.5px;font-weight:700;display:flex;align-items:center;justify-content:center}
.cs-ch-it>div{flex:1;min-width:0}
.cs-ch-it b{display:block;font-size:13.5px;font-weight:600}
.cs-ch-it span{display:block;font-size:12px;color:var(--muted);margin-top:3px;line-height:1.5}
.cs-ch-it>i{color:#c4cad6;font-style:normal}
/* 常见问题 */
.faq{max-height:52vh;overflow-y:auto;margin:10px 0 4px}
.faq-it{padding:11px 0;border-bottom:1px solid var(--line)}
.faq-it:last-child{border-bottom:0}
.faq-it b{font-size:13px;font-weight:600;display:block}
.faq-it p{font-size:12px;color:#5c6577;line-height:1.75;margin-top:5px}
/* 留言工单 */
.tk{padding:11px 0;border-bottom:1px solid var(--line)}
.tk:last-child{border-bottom:0}
.tk-hd{display:flex;align-items:center;gap:8px}
.tk-hd b{flex:1;font-size:13px;font-weight:600;min-width:0}
.tk-tm{font-size:12px;color:var(--muted);margin-top:4px}
.tk-r{margin-top:7px;background:#f4f7ff;border-radius:8px;padding:9px 11px;font-size:12px;color:#46506a;line-height:1.7}
.tk-tag{display:inline-block;font-size:11px;color:var(--primary);border:1px solid #c9d9ff;border-radius:4px;padding:1px 5px;margin-right:6px}
.empty-tip{text-align:center;color:var(--muted);font-size:12.5px;padding:22px 0}
/* 通用 */
.btns2{display:flex;gap:10px;margin-top:14px}
.btns2 .btn{flex:1;text-align:center}
.ta2{width:100%;min-height:84px;border:1px solid var(--line);border-radius:8px;padding:9px;font-size:13px;font-family:inherit;resize:vertical;line-height:1.6}
select.ipt{appearance:none;background:#fff}

/* ===== 流程演示：发布 / 审核 / 消息 / 订单 / 收银台 / 登录 ===== */
.b-rej{background:#fdecec;color:#e5484d}
.b-purple{background:#f3edff;color:#7c3aed}
.b-gray{background:#eef0f6;color:#8a93a6}
/* 二级页返回 */
.pagehead{position:relative}
.pagehead .back{position:absolute;left:10px;top:12px;width:28px;height:28px;line-height:26px;text-align:center;font-size:22px;color:#fff;opacity:.9;cursor:pointer;border-radius:50%}
.pagehead .back:active{background:rgba(255,255,255,.18)}
.pagehead:has(.back) h1{padding-left:26px}
.pagehead:has(.back) p{padding-left:26px}
/* 动态表单 */
.pf{padding:11px 0;border-bottom:1px solid var(--line)}
.pf:last-of-type{border-bottom:0}
.pf>b{display:block;font-size:12.5px;color:var(--muted);margin-bottom:6px;font-weight:500}
.pf-ipt{width:100%;border:1px solid var(--line);border-radius:8px;padding:9px 11px;font-size:13.5px;font-family:inherit;background:#fff}
.pf-ipt:focus{outline:0;border-color:var(--primary)}
.pf-val{font-size:13.5px;padding:2px 0}
.pf-chg{color:var(--primary);font-size:12px;margin-left:6px;cursor:pointer}
.pf-note{background:#f4f7ff;border-radius:8px;padding:9px 11px;font-size:12.5px;color:#5c6577;line-height:1.7;margin-bottom:4px}
.pf-note .bdg{margin-right:6px}
/* 成功页 */
.done-wrap{padding:44px 24px 30px;text-align:center}
.done-ic{width:60px;height:60px;margin:0 auto 16px;border-radius:50%;background:linear-gradient(135deg,#12b76a,#0e9355);color:#fff;font-size:30px;line-height:60px}
.done-wrap h2{font-size:19px}
.done-sub{font-size:12.5px;color:var(--muted);margin-top:6px}
.done-box{background:#fff;border-radius:14px;padding:6px 14px;margin:20px 0 14px;text-align:left}
.done-tip{font-size:12.5px;color:var(--muted);line-height:1.7;background:#f4f6fb;border-radius:8px;padding:10px 12px;margin-bottom:16px}
.donestep{display:flex;gap:11px;padding:12px 0;border-bottom:1px solid var(--line);align-items:flex-start}
.donestep:last-child{border-bottom:0}
.donestep i{width:22px;height:22px;flex:none;border-radius:50%;background:#eef0f6;color:#8a93a6;font-size:12px;line-height:22px;font-style:normal;text-align:center}
.donestep.ok i{background:#e6f7ef;color:#0e9355}
.donestep.now i{background:var(--primary);color:#fff}
.donestep b{display:block;font-size:13px}
.donestep span{font-size:12px;color:var(--muted);margin-top:3px;display:block;line-height:1.5}
/* 我的发布 */
.mp{padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer}
.mp:last-child{border-bottom:0}
.mp-hd{display:flex;align-items:center;gap:8px}
.mp-hd b{flex:1;font-size:13.5px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mp-meta{font-size:12px;color:var(--muted);margin-top:5px}
.mp-reason{margin-top:7px;background:#fdecec;border-radius:7px;padding:7px 10px;font-size:12.5px;color:#c23b3f;line-height:1.6}
.mp-reason.app{background:#f3edff;color:#6d47c8}
.mp-ap{color:var(--primary);font-weight:600}
/* 审核时间线 */
.tl{padding:4px 0 8px}
.tl-it{display:flex;gap:10px;position:relative;padding:8px 0}
.tl-it i{width:8px;height:8px;flex:none;border-radius:50%;background:var(--primary);margin-top:5px}
.tl-it:not(:last-child):before{content:"";position:absolute;left:3.5px;top:19px;bottom:-4px;width:1px;background:var(--line)}
.tl-it b{font-size:12.5px;font-weight:500;display:block}
.tl-it span{font-size:12px;color:var(--muted);margin-top:3px;display:block}
/* 消息 */
.nt{display:flex;gap:11px;padding:12px 0;border-bottom:1px solid var(--line);cursor:pointer;position:relative}
.nt:last-child{border-bottom:0}
.nt-ic{width:32px;height:32px;flex:none;border-radius:9px;color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}
.nt-bd{flex:1;min-width:0}
.nt-bd h3{font-size:13.5px;font-weight:600}
.nt.un .nt-bd h3{font-weight:700}
.nt-bd p{font-size:12.5px;color:var(--muted);margin-top:4px;line-height:1.65}
.nt-tm{font-size:10.5px;color:#a8b0c0;margin-top:5px;display:block}
.nt-dot{width:7px;height:7px;border-radius:50%;background:var(--red);position:absolute;right:2px;top:18px}
/* 订单 */
.od{padding:13px 0;border-bottom:1px solid var(--line)}
.od:last-child{border-bottom:0}
.od-hd{display:flex;align-items:center;gap:8px}
.od-hd b{flex:1;font-size:13.5px;font-weight:600;min-width:0}
.od-amt{font-size:20px;font-weight:700;color:var(--accent);margin-top:8px}
.od-meta{font-size:12px;color:var(--muted);margin-top:5px}
.od-ft{display:flex;justify-content:space-between;font-size:12px;color:var(--muted);margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
/* 收银台 */
.pay-amt{display:flex;justify-content:space-between;align-items:baseline;padding:4px 0 10px}
.pay-amt span{font-size:12.5px;color:var(--muted)}
.pay-amt b{font-size:24px;color:var(--accent)}
.pw{display:flex;align-items:center;gap:11px;padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
.pw:last-child{border-bottom:0}
.pw-ic{width:30px;height:30px;flex:none;border-radius:8px;color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}
.pw b{flex:1;font-size:13.5px;font-weight:500}
.pw-ck{width:17px;height:17px;border:1.5px solid #d3d9e6;border-radius:50%;flex:none}
.pw.on .pw-ck{border-color:var(--primary);background:var(--primary);box-shadow:inset 0 0 0 3px #fff}
.paying{display:flex;justify-content:center;gap:7px;padding:30px 0 18px}
.paying i{width:9px;height:9px;border-radius:50%;background:var(--primary);animation:pb 1s infinite}
.paying i:nth-child(2){animation-delay:.15s}
.paying i:nth-child(3){animation-delay:.3s}
@keyframes pb{0%,60%,100%{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-6px)}}
/* 登录 */
.login-wrap{padding:52px 26px 30px}
.login-logo{width:62px;height:62px;margin:0 auto 16px}
.login-logo img{width:100%;height:100%;display:block;border-radius:16px}
.login-wrap h2{font-size:20px;text-align:center}
.login-wrap>p{font-size:12.5px;color:var(--muted);text-align:center;margin-top:6px;margin-bottom:26px}
.lg-row{display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--line);padding:9px 0;margin-bottom:6px}
.lg-row>span{font-size:13.5px;color:var(--muted);flex:none}
.lg-ipt{flex:1;border:0;font-size:15px;font-family:inherit;padding:6px 0;min-width:0}
.lg-ipt:focus{outline:0}
.lg-send{color:var(--primary);font-size:12.5px;cursor:pointer;flex:none}
.lg-tip{font-size:12.5px;color:var(--muted);text-align:center;margin-top:14px;line-height:1.7}
.lg-tip b{color:var(--accent)}
/* 我的页快捷四宫格 */
.qgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:2px;margin-top:10px;padding-top:12px;border-top:1px solid var(--line)}
.qgrid a{text-align:center;padding:6px 0;position:relative;cursor:pointer}
.qgrid a i{width:38px;height:38px;line-height:38px;border-radius:11px;color:#fff;font-size:12px;font-weight:700;font-style:normal;display:block;margin:0 auto 6px}
.qgrid a b{display:block;font-size:13.5px;font-weight:500}
.qgrid a span{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.qdot{position:absolute;top:2px;right:14px;width:7px;height:7px;border-radius:50%;background:var(--red)}
/* 流程演示导航 */
.dnav a{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--line);cursor:pointer}
.dnav a:last-child{border-bottom:0}
.dnav a b{flex:none;font-size:13.5px;font-weight:600;min-width:96px}
.dnav a span{flex:1;font-size:12px;color:var(--muted);line-height:1.5}
.dnav a i{color:#c4cad6;font-style:normal}

/* ===== 发布类型切换 ===== */
.ptypes{display:flex;gap:8px;overflow-x:auto;padding:2px 0 10px;-webkit-overflow-scrolling:touch}
.ptypes::-webkit-scrollbar{display:none}
.ptype{flex:0 0 auto;padding:7px 13px;border-radius:999px;background:var(--bg2,#f4f5f7);color:#5b6472;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;border:1px solid transparent}
.ptype.on{background:#eaf0ff;color:#2f6bff;border-color:#c7d7ff}

/* ===== 我的页 · 顶部信息区（卡片 + 认证行 + 快捷宫格） ===== */
.prof-sec{margin-top:-16px}
.vfy-hd{display:flex;align-items:baseline;justify-content:space-between;margin:16px 0 9px}
.vfy-hd b{font-size:13.5px;color:var(--text)}
.vfy-hd span{font-size:12px;color:var(--muted)}
/* 三项认证：白底卡片，纵向排布图标+名称+状态，明暗区分清晰 */
.vfy-row{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;border-top:0;margin-top:0;padding-top:0}
.vf{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 6px 10px;border:1px solid var(--line);border-radius:12px;cursor:pointer;text-align:center;transition:.18s;font-family:inherit;background:#fff;position:relative}
.vf-ic{width:32px;height:32px;flex:0 0 32px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-style:normal}
.vf-ic .ic-svg{width:18px;height:18px}
.vf-tx{flex:1;min-width:0;line-height:1.3;width:100%}
.vf-tx b{display:block;font-size:12px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3}
.vf-tx em{display:block;font-size:10.5px;font-style:normal;line-height:1.3;margin-top:2px;white-space:nowrap}
/* 右上角状态角标 */
.vf-ic2{position:absolute;right:6px;top:6px;width:16px;height:16px;flex:0 0 16px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;font-style:normal}
.vf-ic2 .ic-svg{width:10px;height:10px}
/* 未提交：暗（灰底 + 灰图标 + 灰角标） */
.vf.off{background:#f7f8fa;border-color:#e6e9ef;color:#98a1b0}
.vf.off .vf-ic{background:#e9ecf2;color:#a3abb9}
.vf.off .vf-ic2{background:#dfe3ea;color:#98a1b0}
/* 审核中：半亮（琥珀）+ 呼吸 */
.vf.ing{background:#fffaf0;border-color:#ffe0a3;color:#b87500}
.vf.ing .vf-ic{background:#fdf0d5;color:#c98a0a}
.vf.ing .vf-ic2{background:#f5b301;color:#fff;animation:pulse 1.4s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
/* 已提交：亮（绿底 + 白图标 + 绿角标） */
.vf.on{background:#f2fbf6;border-color:#bfe8d0;color:#0e7a4a;box-shadow:0 2px 10px rgba(18,183,106,.1)}
.vf.on .vf-ic{background:linear-gradient(135deg,#12b76a,#0e9355);color:#fff}
.vf.on .vf-ic2{background:#12b76a;color:#fff}
.vf:active{transform:scale(.97)}
.b-dim{background:rgba(255,255,255,.2)!important;color:rgba(255,255,255,.85)!important}

/* ===== 签证页 · 微信咨询条 ===== */
.wechat-cta{display:flex;align-items:center;gap:12px;margin:0 14px 4px;padding:14px;border-radius:14px;background:linear-gradient(135deg,#e8f7ee,#dff5e8);border:1px solid #bfe8d0}
.wc-l{flex:1;min-width:0;line-height:1.5}
.wc-l b{display:block;font-size:14px;color:#0e7a4a}
.wc-l span{display:block;font-size:12px;color:#3d8a68;margin-top:2px}
.visa-d{margin:6px 0 0;font-size:12.5px;color:var(--muted);line-height:1.65}
.visa-d.vn-d{color:#0f766e;font-style:italic;margin-top:3px}
.visa-t{margin:5px 0 0;font-size:12.5px;color:var(--accent);font-weight:600}
.visa-t .vn-d{color:#0f766e;font-weight:400;font-style:italic}
.pub-it{position:relative}
.pub-no{position:absolute;left:8px;top:8px;width:15px;height:15px;border-radius:50%;background:rgba(0,0,0,.06);color:#8a93a6;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;z-index:1}
.od-left{color:var(--accent);font-weight:700;margin-left:4px}

/* ===== SVG 图标系统 ===== */
.ic-svg{width:100%;height:100%;display:block}
/* 底部菜单 */
.tabbar a i.ti{width:23px;height:23px;margin:0 auto 3px;border-radius:0;background:none!important;color:#8e97a8;font-style:normal;display:block}
.tabbar a.on i.ti{color:var(--primary)}
.tabbar a i.ti .ic-svg{stroke-width:1.8}
.tabbar a.pub i.ti{width:40px;height:40px;background:var(--accent)!important;color:#fff;border-radius:50%;margin-top:-16px;box-shadow:0 6px 14px rgba(255,122,26,.4);display:flex;align-items:center;justify-content:center;padding:9px}
.tabbar a.pub i.ti .ic-svg{stroke-width:2.4}
/* 首页宫格 */
.gi-ic{width:52px;height:52px;border-radius:13px;display:flex;align-items:center;justify-content:center;padding:13px;margin-bottom:2px;color:#fff;background:var(--gc,#2f6bff);box-shadow:0 3px 8px -2px var(--gc,#2f6bff)}
.gi-ic .ic-svg{stroke-width:1.9}
.gi span{font-size:13.5px;line-height:1.3;text-align:center}
/* 板块页标题图标 */
.ph-ic{width:30px;height:30px;border-radius:9px;background:var(--primary);color:#fff;display:inline-flex;align-items:center;justify-content:center;padding:6px;vertical-align:-7px;margin-right:5px}
/* 列表项图标 */
.row-ic{width:32px;height:32px;flex:0 0 32px;border-radius:9px;display:flex;align-items:center;justify-content:center;padding:7px;color:#fff}
.cell .thumb .ic-svg{color:#fff;opacity:.95}
.qgrid a i{display:flex;align-items:center;justify-content:center;padding:7px;border-radius:10px;background:var(--qc,#2f6bff);color:#fff;margin-bottom:4px}
.empty{padding:26px 10px;text-align:center;color:var(--muted);font-size:13px}
.empty .ic-svg{width:34px;height:34px;color:#c4cbd8;display:block;margin:0 auto 8px}
.empty b{display:block;color:var(--text);font-size:14px;margin-bottom:5px}
.empty span{display:block;font-size:12.5px;line-height:1.6;margin-bottom:12px}
.empty .btn{display:inline-flex;width:auto}

/* ===== 搜索栏 ===== */
.srchbar{display:flex;align-items:center;gap:8px;padding:10px 14px 8px}
.srch{flex:1;display:flex;align-items:center;gap:7px;background:#fff;border:1px solid var(--line);border-radius:10px;padding:0 10px;height:36px;min-width:0}
.srch .ic-svg{width:16px;height:16px;color:#9aa3b4;flex:0 0 16px}
.srch input{flex:1;border:0;outline:0;font-size:13.5px;background:none;min-width:0;font-family:inherit}
.srch-act{display:flex;gap:6px}
/* 结果计数条 */
.srch-res{display:flex;align-items:center;justify-content:space-between;padding:0 14px 8px;font-size:12px;color:var(--muted)}
.srch-res b{color:var(--primary)}
.srch-res .lnk{background:none;border:0;color:var(--primary);font-size:12px;font-family:inherit;cursor:pointer;padding:2px 0}

/* ===== 资源库 · 企业卡片（重排：房源/地址单独占行，避免挤压） ===== */
/* ===== 资源库 · 卡片 =====
   越南语副标题的处理：与中文名「同一行排布，只有过长才折到下一行」。
   做法：h3 变成 flex-wrap 容器，中文名可收缩省略，越南语名作为可伸缩项——
   两段的自然宽度之和放得下就并排，放不下就让越南语整段换行（换行后最多 2 行再省略）。
   这样既不会像「固定独占一行」那样每张卡都空出一行、列表拉长，
   也不会像早期「并排 + nowrap 省略」那样长名被吃掉看不见。 */
.dcell{align-items:flex-start}
.dcell .thumb{background:var(--dcat,#8792a6);background:linear-gradient(145deg,var(--dcat,#8792a6),color-mix(in srgb,var(--dcat,#8792a6) 62%,#fff))}
.dcell .dtb{position:relative;flex-direction:column;gap:1px;letter-spacing:0;font-size:0}
.dcell .dtb .ic-svg{width:24px;height:24px;color:#fff;opacity:.98}
.dcell .dtb em{font-style:normal;font-size:10.5px;color:#fff;opacity:.9;font-weight:600;letter-spacing:.2px}
/* 标题排版：列表里只留中文名，越南语全称挪到「企业详情」弹窗里展示。
   取舍理由写在 app.js 的 openDir() 注释里——列表要卡高整齐，详情页要完整可读，
   两处的排版目标本来就不一样，硬塞在同一个宽度里两头不讨好。 */
.dcell .cell-bd h3 .nm{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.4}
.dcell .ddsc{white-space:normal;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  min-height:3em}
.dcell .cell-ft{margin-top:7px}
.dcell .mcat{display:inline-flex;align-items:center;gap:3px;background:var(--dcat,#8792a6);background:color-mix(in srgb,var(--dcat,#8792a6) 12%,#fff);color:var(--dcat,#5a6272);font-weight:600}
.dcell .mcat .ic-svg{width:11px;height:11px}
.dcell .cell-ft .mini:not(.mcat){background:#f1f3f8;color:#7c8496}
.dcell .mmore{background:#eef1f6;color:#9aa3b4;font-weight:600;padding:1px 6px;line-height:inherit;cursor:default}
.dcell .daddr{display:flex;align-items:center;gap:4px;margin-top:6px;font-size:12px;color:#8792a6;line-height:1.4}
.dcell .daddr .ic-svg{width:12px;height:12px;flex:0 0 12px;opacity:.8}
/* 分类 chips：带图标 + 条目数 */
/* 分类数多于屏宽时可横向滑动：右侧渐隐暗示还有内容，滑到底自动撤掉渐隐 */
.chips.dchip-bar{scroll-behavior:smooth;-webkit-overflow-scrolling:touch}
.chips.dchip-bar.fade-r{mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 30px),transparent 100%);
  -webkit-mask-image:linear-gradient(90deg,#000 0,#000 calc(100% - 30px),transparent 100%)}
.dchip{display:inline-flex;align-items:center;gap:4px;padding:5px 11px}
.dchip .ic-svg{width:13px;height:13px}
.dchip em{font-style:normal;font-size:11px;opacity:.62;margin-left:1px}
.dchip.on em{opacity:.85}
.home-dir .dcell{padding:11px 0}
.dact{gap:7px;align-self:center}
.dact .btn{min-width:52px;text-align:center}
.btn-g.on{background:#e8efff;color:var(--primary);border-color:#c7d7ff}

.mini.mcat{display:inline-flex;align-items:center;gap:3px;background:var(--dcat,#8792a6);
  background:color-mix(in srgb,var(--dcat,#8792a6) 12%,#fff);color:var(--dcat,#5a6272);font-weight:600}
/* 图标尺寸必须跟着 .mcat 走，不能只挂在 .dcell 下：
   .mcat 在详情弹窗（.dir-cats）里也用，脱离 .dcell 后失去约束，
   SVG 会撑到 300×315px —— 整块标签被顶成一大片灰。 */
.mcat .ic-svg{width:11px;height:11px;flex:0 0 11px}
.dir-cats .mini:not(.mcat){background:#f1f3f8;color:#7c8496}

/* ===== 资源库 · 企业详情弹窗 =====
   越南语全称在这里**允许任意折行**（不设 nowrap、不设 ellipsis、不设行数上限）：
   详情页一次只看一家，屏幕宽度就是给它的，35 个字符的越南语名换行两次也完全读得下去。
   列表 prefer 整齐，这里 prefer 完整——两边各取所需。 */
.dir-sheet{position:relative}
.dir-sheet .sheet-x{position:absolute;right:12px;top:10px;background:none;border:0;font-size:22px;line-height:1;
  color:var(--muted);cursor:pointer;padding:2px 6px;font-family:inherit}
.dir-hd{display:flex;align-items:flex-start;gap:11px;margin-bottom:12px}
.dir-hd .dhi{width:44px;height:44px;flex:none;border-radius:11px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,var(--dcat,#8792a6),color-mix(in srgb,var(--dcat,#8792a6) 62%,#fff))}
.dir-hd .dhi .ic-svg{width:24px;height:24px;color:#fff;opacity:.98}
.dir-hd .dht{flex:1;min-width:0;padding-right:26px}
.dir-hd .dht b{display:block;font-size:16px;line-height:1.35}
/* 核心：越南语全称自然换行，一行放不下就继续往下排，不做任何截断 */
.dir-vn{display:block;margin-top:4px;font-size:12.5px;color:#0f766e;font-weight:400;font-style:italic;
  line-height:1.55;white-space:normal;overflow-wrap:break-word;word-break:break-word}
.dir-cats{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.dir-intro{font-size:13px;line-height:1.75;color:#4a5265;margin:0 0 4px}

/* ===== 首页 · 落地工具三入口 ===== */
.toolbox3{display:flex;gap:8px}
.tb3{flex:1;min-width:0;display:block;text-align:center;text-decoration:none;
  padding:11px 4px 10px;border-radius:10px;border:1px solid var(--line);
  background:linear-gradient(180deg,#fff,#fbfcff);transition:background .12s}
.tb3 i{display:block;color:var(--tc,#2f6bff);line-height:0;margin-bottom:7px}
.tb3 i .ic-svg{width:24px;height:24px}
.tb3 b{display:block;font-size:14px;color:var(--text)}
.tb3 span{display:block;font-size:12px;color:var(--muted);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tb3:active{background:#f2f5ff}

/* ===== 工具箱 ===== */
/* 汇率换算：两个输入框双向联动，任一改动即换算出另一侧。
   用 text + inputmode 而非 number —— type=number 拿到的是无法带千分位的裸值，
   而越南盾不带千分位根本看不出是十万还是一百万。 */
.fx-row{display:flex;align-items:flex-end;gap:10px}
.fx-cell{flex:1;min-width:0}
.fx-cell label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:5px}
.fx-f{display:flex;align-items:center;gap:5px;border:1px solid var(--line);border-radius:10px;
  padding:9px 10px;background:#fafbfe;transition:border-color .15s,background .15s}
.fx-f b{flex:none;font-size:15px;color:var(--muted)}
.fx-f input{flex:1;min-width:0;width:100%;border:0;background:none;outline:none;
  font:inherit;font-size:16px;color:var(--text);font-variant-numeric:tabular-nums}
.fx-f:focus-within{border-color:var(--primary);background:#fff}
.fx-fx{flex:none;align-self:center;margin-bottom:22px;color:var(--muted);font-size:16px}
.fx-quick{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:10px}
.fx-quick em{font-style:normal;font-size:12.5px;color:var(--muted);margin-right:2px}
.fxq{padding:4px 10px;border-radius:20px;background:#f1f4fb;color:#4a5265;font-size:12px;cursor:pointer}
.fxq:active{background:#e2e8f7;color:var(--primary)}
.fxq-c{background:#fff;color:var(--muted);border:1px solid var(--line)}
.fx-rate{margin:10px 0 0;font-size:12px;color:var(--muted)}
.fx-rate b{color:var(--primary);font-variant-numeric:tabular-nums}
/* 汇率更新日期：让用户知道这个数字有多"新鲜"。字号压小、颜色压淡，
   既避免抢主汇率的视觉重心，又能在汇率过期时让人一眼看到依据。 */
.fx-asof{display:inline-block;margin-top:2px;font-size:11px;color:var(--muted);opacity:.75}
.fx-bn{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.fx-bnh{font-size:12.5px;font-weight:600;margin-bottom:8px}
.fx-bn .bn{display:flex;justify-content:space-between;padding:6px 0;font-size:12.5px;
  border-bottom:1px solid var(--line)}
.fx-bn .bn:last-child{border-bottom:0}
.bnn{font-variant-numeric:tabular-nums;color:var(--text)}
.bnc{font-variant-numeric:tabular-nums;color:var(--green);font-weight:600}
/* 办事指引：手风琴，默认全部收起 — 六条都摊开会把页面拉得没有重点 */
.gd{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;overflow:hidden}
.gd-h{display:flex;align-items:center;gap:9px;padding:10px 11px;cursor:pointer;background:#fafbfe}
.gd-ic{flex:none;width:30px;height:30px;border-radius:8px;display:flex;align-items:center;
  justify-content:center;background:color-mix(in srgb,var(--gc,#2f6bff) 12%,#fff);color:var(--gc,#2f6bff)}
.gd-ic .ic-svg{width:16px;height:16px}
.gd-t{flex:1;min-width:0}
.gd-t b{display:block;font-size:13.5px;line-height:1.35}
.gd-t span{display:block;font-size:12.5px;color:var(--muted);margin-top:1px}
.gd-ar{flex:none;color:var(--muted);font-size:17px;transition:transform .18s}
.gd-b{padding:2px 12px 12px}
.gd-b p{margin:0 0 8px;font-size:12.5px;line-height:1.8;color:#4a5265}
.gd-tips{margin:0;padding-left:18px;font-size:12px;line-height:1.85;color:#5a6272}
.gd-tips li{padding-left:2px}
/* 越南语速查：左越南语 + 中文谐音，右中文意思 */
.phr{display:flex;flex-direction:column;gap:1px;background:var(--line);
  border-radius:8px;overflow:hidden}
.ph{display:flex;align-items:center;gap:10px;padding:9px 11px;background:#fff}
.ph-l{flex:1;min-width:0}
.ph-l b{display:block;font-size:13.5px;font-weight:600;color:var(--text)}
.ph-s{display:block;font-size:12.5px;color:var(--accent);margin-top:2px}
.ph-n{flex:none;max-width:38%;font-size:12px;color:var(--muted);text-align:right}

/* ===== 地图分布（示意） ===== */
.dirmap{margin:12px 14px;background:#fff;border-radius:var(--radius);padding:12px;box-shadow:0 1px 4px rgba(20,40,90,.05)}
.dm-h{display:flex;align-items:center;gap:6px;font-size:13px;color:#3c4457;margin-bottom:9px}
.dm-h .ic-svg{width:16px;height:16px;color:var(--primary);flex:0 0 16px}
.dm-h span{margin-left:auto;font-size:12px;color:var(--muted)}
.dm-box{position:relative;height:170px;border-radius:10px;overflow:hidden;background:
  linear-gradient(180deg,#eef4ff,#e6f0ff);
  background-image:linear-gradient(180deg,#eef4ff,#e6f0ff),repeating-linear-gradient(0deg,transparent 0 33px,rgba(47,107,255,.07) 33px 34px),repeating-linear-gradient(90deg,transparent 0 45px,rgba(47,107,255,.07) 45px 46px)}
.dm-box::after{content:"";position:absolute;left:0;right:0;top:46%;height:2px;background:rgba(47,107,255,.16)}
.dm-pin{position:absolute;transform:translate(-50%,-100%);background:none;border:0;padding:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px}
.dm-pin i{width:11px;height:11px;border-radius:50% 50% 50% 0;background:#e5484d;transform:rotate(-45deg);box-shadow:0 2px 5px rgba(0,0,0,.22)}
.dm-pin span{font-size:10px;background:rgba(255,255,255,.94);border:1px solid var(--line);border-radius:5px;padding:1px 5px;white-space:nowrap;color:#3c4457;max-width:78px;overflow:hidden;text-overflow:ellipsis}
.dm-pin.act i{background:var(--accent);transform:rotate(-45deg) scale(1.3)}
.dm-pin.act span{background:var(--accent);color:#fff;border-color:var(--accent)}
.dm-note{font-size:10.5px;color:var(--muted);margin-top:8px;line-height:1.6}

/* ===== 酒店 ===== */
.cell .thumb.ht{padding:9px;display:flex;align-items:center;justify-content:center}
.cell .thumb.ht .ic-svg{width:100%;height:100%;color:#fff;opacity:.9}
.stars{display:inline-flex;align-items:center;gap:1px;margin:2px 0}
.stars .st{width:12px;height:12px;color:#d8dde7;display:inline-block}
.stars .st.on{color:#f5a623}
.stars .st .ic-svg{fill:currentColor}
.stars b{font-size:12px;color:#f5a623;margin-left:4px;font-weight:600}
.ht-pr{display:block;font-size:13px;color:var(--accent);font-weight:700;margin-bottom:5px}
.hd-top{display:flex;gap:11px;margin-bottom:10px}
.hd-pic{width:104px;height:88px;flex:0 0 104px;border-radius:10px;background:linear-gradient(135deg,#7c3aed,#c026d3);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;color:#fff;padding:10px}
.hd-pic .ic-svg{width:26px;height:26px}
.hd-pic span{font-size:9.5px;opacity:.85}
.hd-info{flex:1;min-width:0}
.hd-info h3{font-size:14px;margin-bottom:3px;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.hd-info .vn{font-size:12px}
.hd-info .kv{font-size:12px;padding:4px 0;border:0}
.hd-info .kv .k{width:38px;color:var(--muted);font-size:12.5px}
.hd-intro{font-size:12.5px;color:#4a5365;line-height:1.75;background:#f7f9fc;padding:9px 11px;border-radius:9px;margin:0}
.hd-room{color:var(--accent);font-weight:700}
.btns2{display:flex;gap:8px}
.btns2 .btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:4px}
.btns2 .btn .ic-svg{width:14px;height:14px;flex:0 0 14px}

/* ===== 短信防刷演示 ===== */
.smsg{background:#f7f9fc;border:1px solid #e8edf7;border-radius:12px;padding:12px}
.sg-h{display:flex;align-items:center;gap:6px;font-size:13px;color:#1f2937;margin-bottom:9px}
.sg-h .ic-svg{width:16px;height:16px;color:#12b76a;flex:0 0 16px}
.sg-h span{margin-left:auto;font-size:12px;color:var(--muted)}
.sg-bar{height:6px;border-radius:99px;background:#e6ebf4;overflow:hidden;margin-bottom:11px}
.sg-bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#12b76a,#ff7a1a);transition:.3s}
.sg-list{display:grid;grid-template-columns:1fr 1fr;gap:7px 10px}
.sg-it{display:flex;flex-direction:column;gap:2px;background:#fff;border-radius:8px;padding:7px 9px;font-size:12px;color:var(--muted)}
.sg-it b{font-size:12px;color:#1f2937;font-weight:700}
.sg-it b.ok{color:#12b76a}
.sg-it b.bad{color:#e5484d}
.sg-cost{margin-top:10px;font-size:12.5px;color:var(--muted);line-height:1.7}
.sg-cost b{color:var(--accent);font-size:13px}

/* ===== 签证办理 · 申请表单 ===== */
.pf-seg{display:flex;gap:8px}
.psg{flex:1;text-align:center;font-size:13px;padding:8px 0;border:1px solid var(--line);border-radius:9px;color:#5b6472;cursor:pointer;background:#fff;transition:.15s}
.psg.on{background:#eaf0ff;border-color:#c7d7ff;color:var(--primary);font-weight:600}
.pf-tip{font-size:12.5px;color:var(--muted);margin-top:6px;line-height:1.55}

/* ===== 我的签证 · 订单卡与进度条 ===== */
.vord{margin-bottom:10px}
.vo-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px}
.vo-hd b{font-size:15px}
.vo-no{font-size:12px;color:var(--muted);margin-left:7px;font-weight:400}
.vo-meta{font-size:12px;color:var(--muted);line-height:1.6}
.vo-alert{margin-top:9px;padding:9px 11px;border-radius:9px;font-size:12.5px;line-height:1.55;background:#eef4ff;color:#1e4fd6;border:1px solid #d3e0ff}
.vo-alert.warn{background:#fff8ea;color:#a35c00;border-color:#ffe0a3}
.vo-alert.bad{background:#fdeeee;color:#b42318;border-color:#f8cfcf}
.vo-alert.ok{background:#eefaf3;color:#0e7a4a;border-color:#bfe8d0}
/* 五步进度 */
.vo-steps{display:flex;margin:14px 0 4px}
.vs{flex:1;text-align:center;position:relative;font-size:10.5px;color:#a3abb9}
.vs::before{content:"";position:absolute;left:-50%;top:11px;width:100%;height:2px;background:var(--line);z-index:0}
.vs:first-child::before{display:none}
.vs i{position:relative;z-index:1;display:flex;align-items:center;justify-content:center;width:24px;height:24px;margin:0 auto 4px;border-radius:50%;background:#eef0f5;color:#a3abb9;font-size:11px;font-style:normal;font-weight:700;border:2px solid #fff}
.vs.done{color:var(--text)}
.vs.done::before{background:#12b76a}
.vs.done i{background:#12b76a;color:#fff}
.vs.now{color:var(--primary);font-weight:700}
.vs.now::before{background:linear-gradient(90deg,#12b76a,var(--line))}
.vs.now i{background:var(--primary);color:#fff;box-shadow:0 0 0 3px rgba(47,107,255,.16)}
/* 办理日志 */
.vo-log{margin-top:12px;padding-top:10px;border-top:1px dashed var(--line)}
.vl{display:flex;gap:8px;font-size:12.5px;padding:5px 0;line-height:1.5;align-items:baseline}
.vl .vt{color:#a3abb9;flex:0 0 68px;font-variant-numeric:tabular-nums}
.vl .va{flex:1;color:var(--text)}
.vl .vb{color:var(--muted);flex:0 0 auto;font-size:10.5px;background:#f4f5f7;border-radius:4px;padding:1px 5px}
/* 状态徽章补充 */
.b-orange{background:#fff3e0;color:#b35c00}
.b-blue{background:#eaf0ff;color:#1e4fd6}
.b-red{background:#fdeeee;color:#b42318}

/* 按钮内嵌图标：固定尺寸，避免 SVG 撑高按钮 */
.btn-ic{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex:0 0 16px;vertical-align:-3px;margin-right:6px}
.btn-ic .ic-svg{width:16px;height:16px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:0}

/* ===== 封禁页：不可关闭的全屏拦截页 ===== */
.banpage{min-height:calc(100vh - 120px);display:flex;align-items:flex-start;justify-content:center;padding:28px 16px 40px}
.bp-card{width:100%;max-width:560px;background:var(--card,#fff);border:1px solid var(--line,#e8edf5);border-radius:16px;padding:26px 22px 20px;box-shadow:0 8px 28px rgba(16,32,64,.07)}
.bp-ic{width:52px;height:52px;border-radius:50%;background:#fee2e2;color:#e5484d;font-size:28px;font-weight:800;
  display:flex;align-items:center;justify-content:center;margin:0 auto 14px}
.bp-card h2{text-align:center;font-size:20px;margin:0 0 8px;color:#1b2333}
.bp-sub{text-align:center;font-size:13.5px;line-height:1.7;color:#5b6879;margin:0 0 18px}
.bp-sub b{color:#e5484d}
.bp-kv{display:flex;gap:10px;padding:10px 0;border-top:1px solid var(--soft,#f2f5f9);font-size:13px}
.bp-kv .k{flex:0 0 74px;color:#7b8794}
.bp-kv .v{flex:1;color:#1b2333;word-break:break-all}
.bp-note{margin-top:12px;padding:10px 12px;background:#fff7ed;border-radius:8px;font-size:12.5px;line-height:1.7;color:#8a5a15}
.bp-rule{margin-top:12px;padding:12px;background:#f6f8fc;border-radius:8px}
.bp-rule b{display:block;font-size:13px;margin-bottom:5px;color:#1b2333}
.bp-rule p{margin:0;font-size:12.5px;line-height:1.75;color:#5b6879}
.bp-rule p b{display:inline;color:#e5484d;margin:0}
.bp-act{margin-top:18px;display:flex;flex-direction:column;gap:9px}
.bp-foot{margin-top:14px;text-align:center;font-size:12.5px;line-height:1.7;color:#9aa5b4}

/* ===== H5 顶栏：品牌名常显 =====
   顶栏固定显示「越生活」，栏目名在页面内的 .pagehead h1 上体现。
   首页有左侧城市切换，其它页有返回键，标题居中不再被两端挤压。 */
.tb-title{letter-spacing:1.5px}

/* ===== 企业会员申请 · 门槛 / 额度 / 法人信息 ===== */
.gate{display:flex;gap:11px;align-items:flex-start;padding:13px;border-radius:11px;background:#fff7ed;border:1px solid #fde3c0;margin:12px 0}
.gate-ic{flex:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-style:normal;font-size:15px;font-weight:800;color:#fff;background:#f59e0b}
.gate b{display:block;font-size:14px;color:#7a3d00;margin-bottom:4px}
.gate span{font-size:12.5px;line-height:1.7;color:#8a5a1a}
.quota-bar{margin:12px 0;padding:11px 13px;border-radius:11px;background:#f5f8ff;border:1px solid #dce6fb}
.quota-bar>b{font-size:13px;color:#2f6bff}
.quota-bar>span{display:block;font-size:12.5px;color:#7b8794;margin-top:3px;line-height:1.6}
.qb{height:6px;border-radius:99px;background:#e3eaf8;overflow:hidden;margin-top:8px}
.qb i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#2f6bff,#7c3aed)}

/* 法人信息：二选一勾选框 + 强制上传区 */
.leg-box{display:flex;flex-direction:column;gap:8px}
.leg-chk{display:grid;grid-template-columns:auto 1fr;column-gap:8px;row-gap:1px;align-items:center;
  padding:10px 11px;border:1px solid var(--line,#e7ebf2);border-radius:10px;background:#fff;cursor:pointer}
.leg-chk .cb{grid-row:1/3;width:18px;height:18px;border-radius:5px;border:1.5px solid #c7d0de;color:#fff;
  font-size:12px;font-style:normal;display:flex;align-items:center;justify-content:center;line-height:1}
.leg-chk .cb.on{background:#2f6bff;border-color:#2f6bff}
.leg-chk b{font-size:13px;color:#22304a}
.leg-chk span{font-size:12.5px;color:#8792a6;line-height:1.55}
.leg-ok{padding:9px 11px;border-radius:9px;background:#eefaf2;border:1px solid #c9ecd8;font-size:12px;color:#0e7a45;line-height:1.65}
.leg-need{padding:11px;border-radius:10px;background:#fff8ed;border:1px solid #fde3c0}
.leg-need>b{display:block;font-size:12.5px;color:#a35f00;margin-bottom:8px}

/* 我的 → 我的企业 */
.mybiz{margin-top:12px;border:1px solid var(--line,#e7ebf2);border-radius:12px;background:#fff;overflow:hidden}
.mb-hd{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 12px;background:#f7f9fc;border-bottom:1px solid var(--line,#e7ebf2)}
.mb-hd b{font-size:13px}
.mb-hd span{font-size:12px;color:#8792a6}
.mb-it{display:flex;align-items:center;gap:10px;padding:11px 12px;border-bottom:1px solid #f2f5fa}
.mb-ic{flex:none;width:30px;height:30px;border-radius:8px;background:linear-gradient(135deg,#2f6bff,#7c3aed);color:#fff;
  font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}
.mb-bd{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.mb-bd b{font-size:13.5px;color:#1b2333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mb-bd em{font-style:normal;font-size:12px;color:#8792a6}
.mb-ft{display:flex;align-items:center;gap:10px;padding:11px 12px;flex-wrap:wrap}
.mb-note{flex:1;min-width:180px;font-size:12.5px;color:#7b8794;line-height:1.6}


/* ===== 首页公告栏（置顶信息上下翻滚） =====
   结构：左侧「置顶」标 + 中间滚动视口 + 右侧「更多 ›」。
   视口高度必须与单条行高严格相等，否则翻滚时会露出相邻条目的边缘。
   位移用 transform 实现，条数不限，所以没有写死 keyframes。 */
.ticker .tk-vp{flex:1;min-width:0;height:22px;overflow:hidden;position:relative}
.ticker .tk-roll{transition:transform .55s cubic-bezier(.4,0,.2,1)}
.ticker .tk-txt{display:block;height:22px;line-height:22px;font-size:13px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;color:#5a6272}
.ticker .tk-more{flex:none;margin-left:7px;font-size:12.5px;color:var(--primary);
  text-decoration:none;white-space:nowrap;padding:2px 0 2px 4px;border-left:1px solid var(--line)}
.ticker .tk-tag{font-size:11px}

/* ===== 公告提醒 ===== */
.b-top{background:#fff3e2;color:#b7791f}
.nd-card,.nd-mini{cursor:pointer;-webkit-tap-highlight-color:transparent}
.nd-card:active,.nd-mini:active{background:#f6f8fd}
.nd-mini{box-shadow:none;padding:0;margin-bottom:13px}
.nd-mini:last-child{margin-bottom:0}
.nd-go{color:var(--primary);font-size:12px}
.nd-tags{margin-bottom:9px}
.nd-t{font-size:17px;line-height:1.55;font-weight:700;margin:0 0 9px}
.nd-m{font-size:12px;color:var(--muted);margin-bottom:12px}
.nd-b{border-top:1px solid var(--line);padding-top:12px}
.nd-b p{font-size:14px;line-height:1.95;color:#4a5265;margin:0 0 11px}
.nd-b p:last-child{margin-bottom:0}
