/* ============================================================
   用户中心主题（与后台同一套 CSS 变量规范）
   认证页：居中卡片；业务页：顶部导航 + 卡片化内容
   过渡动画：页面切换/进度条/行级入场
   ============================================================ */

:root {
    --admin-primary: #1677ff;
    --admin-success: #00b42a;
    --admin-warning: #ff7d00;
    --admin-danger: #f53f3f;
    --admin-bg: #f5f7fa;
    --admin-card: #ffffff;
    --admin-border: #e5e6eb;
    --admin-text-title: #1d2129;
    --admin-text-body: #4e5969;
    --admin-text-muted: #86909c;
    --topbar-h: 56px;
    --ease: cubic-bezier(0.16, 1, 0.3, 1);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
    min-height: 100dvh;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;
    font-size: 14px;
    color: var(--admin-text-body);
    background: var(--admin-bg);
    -webkit-font-smoothing: antialiased;
}

a { text-decoration: none; color: var(--admin-primary); }

/* layui 主色覆盖 */
.layui-btn { background-color: var(--admin-primary); }
.layui-btn-primary { background: #fff; border-color: var(--admin-border); color: var(--admin-text-body); }
.layui-btn-primary:hover { border-color: var(--admin-primary); color: var(--admin-primary); }
.layui-btn-danger { background-color: var(--admin-danger); }
.layui-input:focus, .layui-textarea:focus { border-color: var(--admin-primary) !important; }

/* ---------- 首屏引导 ---------- */
.boot-screen { min-height: 100dvh; display: grid; place-content: center; justify-items: center; gap: 16px; }
.boot-mark { width: 40px; height: 40px; border-radius:4px; background: var(--admin-primary); animation: boot-pulse 1.2s ease-in-out infinite; }
.boot-bar { width: 130px; height: 3px; border-radius: 3px; background: var(--admin-border); overflow: hidden; }
.boot-bar span { display: block; width: 40%; height: 100%; background: var(--admin-primary); animation: boot-slide 1.1s var(--ease) infinite; }
@keyframes boot-pulse { 50% { transform: scale(0.86); opacity: 0.6; } }
@keyframes boot-slide { 0% { transform: translateX(-120%);} 100% { transform: translateX(340%);} }
@keyframes auth-in { from { opacity: 0; transform: translateY(20px) scale(0.98); filter: blur(4px); } }
.auth-logo .mark .layui-icon { font-size: 17px; }
.field { display: flex; flex-direction: column; gap: 6px; }
.field > label { font-size: 12.5px; font-weight: 600; color: var(--admin-text-body); }
.field .layui-input, .field .layui-textarea { height: 40px; }
.field .layui-textarea { height: auto; }

.field-error { font-size: 12px; color: var(--admin-danger); }

/* 提示条 */
.notice {
    border-radius:4px;
    padding: 10px 12px;
    font-size: 12.5px;
    line-height: 1.7;
    margin-bottom: 14px;
    animation: fade-in .3s ease;
}
.notice.ok  { background: rgba(0,180,42,.08);  color: var(--admin-success); }
.notice.bad { background: rgba(245,63,63,.08);  color: var(--admin-danger); }
.notice.info{ background: rgba(22,119,255,.07); color: var(--admin-primary); }
@keyframes fade-in { from { opacity: 0; transform: translateY(-4px); } }

/* ---------- 业务页（侧边栏布局）---------- */
.uc-sidebar {
    position: fixed; left: 0; top: 0; bottom: 0;
    width: 220px; z-index: 60;
    background: #fff; border-right: 1px solid var(--admin-border);
    display: flex; flex-direction: column;
    transition: transform .3s var(--ease);
}
.uc-side-head {
    display: none;               /* PC 端无 logo 板块，不占空间 */
    align-items: center; justify-content: flex-end;
    padding: 10px 12px;
}
.uc-side-close {
    border: none; background: none; color: var(--admin-text-muted);
    font-size: 16px; cursor: pointer; display: none;
    width: 28px; height: 28px; border-radius: 4px;
}
.uc-side-close:hover { background: var(--admin-bg); color: var(--admin-text-title); }

.uc-menu { flex: 1; overflow-y: auto; padding: 10px; }
.uc-group { margin-bottom: 4px; }
.uc-group-head {
    display: flex; align-items: center; gap: 10px;
    padding: 10px 12px; border-radius: 4px;
    color: var(--admin-text-title); font-size: 13.5px; font-weight: 600;
    cursor: pointer; user-select: none; transition: background .15s;
}
.uc-group-head:hover { background: var(--admin-bg); }
.uc-group-head > .layui-icon:first-child { color: var(--admin-primary); font-size: 15px; }
.uc-arrow { margin-left: auto; font-size: 12px; color: var(--admin-text-muted); transition: transform .25s var(--ease); }
.uc-arrow.open { transform: rotate(180deg); }
.uc-group-body { overflow: hidden; transition: max-height .3s var(--ease); }
.uc-menu-item {
    display: flex; align-items: center; gap: 10px;
    height: 38px; padding: 0 12px 0 24px; margin: 2px 0;
    border-radius: 4px; color: var(--admin-text-body); font-size: 13.5px;
    text-decoration: none; transition: background .15s, color .15s;
}
.uc-menu-item:hover { background: var(--admin-bg); color: var(--admin-primary); }
.uc-menu-item.on { background: rgba(22,119,255,.08); color: var(--admin-primary); font-weight: 600; }
.uc-menu-item .layui-icon { font-size: 15px; }
.uc-menu-item .uc-out { margin-left: auto; font-size: 11px; color: var(--admin-text-muted); }   /* 已迁移至右上角头像下拉，保留类名兼容 */

.uc-mask {
    position: fixed; inset: 0; z-index: 59;
    background: rgba(29,33,41,.45);
    opacity: 0; pointer-events: none; transition: opacity .25s;
}
.uc-mask.show { opacity: 1; pointer-events: auto; }

.uc-main { margin-left: 220px; min-height: 100dvh; display: flex; flex-direction: column; }
.uc-topbar {
    height: var(--topbar-h);
    background: #fff;
    border-bottom: 1px solid var(--admin-border);
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 0 20px;
    position: sticky;
    top: 0;
    z-index: 20;
}
.uc-page-title { font-size: 15px; color: var(--admin-text-title); font-weight: 700; }
.uc-burger {
    display: none;
    width: 34px; height: 34px;
    border: 1px solid var(--admin-border); border-radius: 4px;
    background: #fff; color: var(--admin-text-body);
    cursor: pointer; font-size: 16px;
}

.uc-user { margin-left: auto; display: flex; align-items: center; gap: 10px; position: relative; }
.uc-user b { font-size: 13px; color: var(--admin-text-title); }
.avatar { width: 32px; height: 32px; border-radius:4px; background: linear-gradient(135deg,#4086ff,var(--admin-primary)); color: #fff; display: grid; place-items: center; font-size: 13px; font-weight: 600; }
.avatar.lg { width: 40px; height: 40px; border-radius: 8px; font-size: 16px; flex: none; }

/* ---------- 头像下拉菜单 ---------- */
.uc-avatar-btn {
    display: flex; align-items: center; gap: 5px;
    border: none; background: none; cursor: pointer; padding: 2px;
    border-radius: 6px;
}
.uc-avatar-btn .layui-icon-down {
    font-size: 12px; color: var(--admin-text-muted);
    transition: transform .25s var(--ease);
}
.uc-avatar-btn:hover, .uc-avatar-btn.on { background: var(--admin-bg); }
.uc-avatar-btn .layui-icon-down.open { transform: rotate(180deg); }
.uc-user-menu {
    position: absolute; top: calc(100% + 10px); right: 0;
    width: 220px; background: #fff;
    border: 1px solid var(--admin-border); border-radius: 10px;
    box-shadow: 0 14px 40px rgba(29,33,41,.16);
    overflow: hidden; z-index: 30;
}
.uum-head {
    display: flex; align-items: center; gap: 12px;
    padding: 14px 16px; background: var(--admin-bg);
}
.uum-info { min-width: 0; }
.uum-info b { display: block; font-size: 13.5px; color: var(--admin-text-title); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.uum-info span { font-size: 11.5px; color: var(--admin-text-muted); }
.uum-item {
    display: flex; align-items: center; gap: 10px; width: 100%;
    padding: 11px 16px; border: none; background: none;
    font-size: 13px; color: var(--admin-text-body); cursor: pointer;
    transition: background .15s;
}
.uum-item:hover { background: var(--admin-bg); }
.uum-item.danger:hover { background: rgba(227,64,63,.07); color: var(--admin-danger); }
.uum-item .layui-icon { font-size: 14px; }

/* 下拉菜单弹出过渡 */
.pop-enter-active { transition: opacity .22s var(--ease), transform .22s var(--ease); }
.pop-leave-active { transition: opacity .15s ease, transform .15s ease; }
.pop-enter-from, .pop-leave-to { opacity: 0; transform: translateY(-8px) scale(.97); }

.uc-content { flex: 1; width: 100%; max-width: 1100px; margin: 0 auto; padding: 20px 20px 48px; }

.layui-card { border-radius:4px; box-shadow: 0 1px 2px rgba(29,33,41,.04), 0 4px 16px rgba(29,33,41,.06); border-color: var(--admin-border); margin-bottom: 16px; }
.layui-card-header { border-radius:4px 12px 0 0; font-weight: 600; color: var(--admin-text-title); height: 48px; line-height: 48px; }

/* 统计卡片（layui 栅格布局，断点与 layui 一致） */
.stat-row { margin-bottom: 16px; }
.stat-row .stat-card { height: 100%; }
.stat-card {
    --i: 0;
    background: #fff; border: 1px solid var(--admin-border); border-radius:4px;
    padding: 16px 18px; display: flex; align-items: center; gap: 12px;
    animation: rise .45s var(--ease) backwards; animation-delay: calc(var(--i) * 80ms);
}
.stat-icon { width: 42px; height: 42px; border-radius:4px; display: grid; place-items: center; flex: none; }
.stat-icon .layui-icon { font-size: 19px; }
.stat-icon.c-orange { background: rgba(255,125,0,.1);  color: var(--admin-warning); }
.stat-icon.c-green  { background: rgba(0,180,42,.1);   color: var(--admin-success); }
.stat-icon.c-blue   { background: rgba(22,119,255,.1);  color: var(--admin-primary); }
.stat-label { font-size: 12px; color: var(--admin-text-muted); }
.stat-value { font-size: 22px; font-weight: 700; color: var(--admin-text-title); letter-spacing: -.02em; }
.stat-value small { font-size: 12px; font-weight: 400; color: var(--admin-text-muted); }
@keyframes rise { from { opacity: 0; transform: translateY(12px); } }

/* 表格 */
.table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.layui-table { margin: 0; width: 100%; }
.layui-table th { font-weight: 600; font-size: 12px; color: var(--admin-text-muted); white-space: nowrap; }
.layui-table thead tr { background: var(--admin-bg); }
.layui-table tbody tr:hover { background: #f7faff; }
.layui-table tbody tr { animation: row-in .35s var(--ease) backwards; animation-delay: calc(var(--ri,0) * 35ms); }
@keyframes row-in { from { opacity: 0; transform: translateY(6px); } }

.mono { font-variant-numeric: tabular-nums; font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 12.5px; }
.goods-sub { display: block; font-size: 12px; color: var(--admin-text-muted); }

.st-badge { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 10px; border-radius:4px; font-size: 12px; font-weight: 600; white-space: nowrap; }
.st-badge::before { content: ""; width: 6px; height: 6px; border-radius:4px; background: currentColor; }
.st-orange { background: rgba(255,125,0,.12); color: var(--admin-warning); }
.st-green  { background: rgba(0,180,42,.1);   color: var(--admin-success); }
.st-gray   { background: var(--admin-bg); color: var(--admin-text-muted); }

.row-actions { display: flex; gap: 6px; justify-content: flex-end; }
.table-footer { display: flex; align-items: center; gap: 12px; padding: 12px 16px; flex-wrap: wrap; }
.table-footer .total { font-size: 12.5px; color: var(--admin-text-muted); }

.prod-mng { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--admin-border-light, #eef0f4); }

/* 工单时间线 / 回复气泡 / 缩略图 */
.tk-timeline { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
.tk-reply { border: 1px solid var(--admin-border-light, #eef0f4); border-radius: 8px; padding: 10px 12px; }
.tk-reply.tk-admin { background: rgba(22, 119, 255, 0.04); border-color: rgba(22, 119, 255, 0.18); }
.tk-reply-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.tk-reply-head b { font-size: 12.5px; color: var(--admin-text-title); }
.tk-reply.tk-admin .tk-reply-head b { color: var(--admin-primary); }
.tk-reply-head span { font-size: 11px; color: var(--admin-text-muted); }
.tk-reply-body { font-size: 13px; color: var(--admin-text-body); line-height: 1.85; word-break: break-word; }
.tk-img { display: block; max-width: 200px; max-height: 150px; margin-top: 8px; border-radius: 6px; border: 1px solid var(--admin-border-light); }
.tk-thumb { position: relative; width: 52px; height: 52px; border-radius: 6px; overflow: hidden; border: 1px solid var(--admin-border-light); }
.tk-thumb img { width: 100%; height: 100%; object-fit: cover; }
.tk-thumb i {
    position: absolute; top: 0; right: 0; width: 16px; height: 16px;
    background: rgba(0,0,0,.55); color: #fff; font-size: 10px;
    display: grid; place-items: center; cursor: pointer;
}

/* 图表图例（SVG 环形图） */
.xc-pie-wrap { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.xc-legend { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.xc-legend-item { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--admin-text-body); }
.xc-legend-item i { width: 10px; height: 10px; border-radius: 3px; flex: none; }
.xc-legend-item .xc-legend-label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.xc-legend-item b { color: var(--admin-text-title); font-family: "JetBrains Mono", Consolas, monospace; font-size: 11.5px; }

/* 操作日志动作徽章 */
.log-badge {
    display: inline-block; padding: 2px 9px; border-radius: 3px;
    background: rgba(22, 119, 255, 0.08); color: var(--admin-primary);
    font-size: 11.5px; font-weight: 600; white-space: nowrap;
}

/* 弹层 */
.drawer-mask { position: fixed; inset: 0; background: rgba(29,33,41,.45); z-index: 40; opacity: 0; pointer-events: none; transition: opacity .25s; }
.drawer-mask.show { opacity: 1; pointer-events: auto; }
.modal {
    position: fixed; z-index: 50; top: 50%; left: 50%;
    transform: translate(-50%,-50%);
    width: 92%; max-width: 420px;
    max-height: 86dvh; overflow-y: auto; overscroll-behavior: contain;
    animation: modal-in .32s var(--ease);
    scrollbar-width: thin; scrollbar-color: #c8cdd8 transparent;
}
.modal::-webkit-scrollbar { width: 5px; }
.modal::-webkit-scrollbar-thumb { background: #c8cdd8; border-radius: 3px; }
/* 卡片头部吸顶（内部滚动时标题保持可见） */
.modal .layui-card-header { position: sticky; top: 0; z-index: 3; background: #fff; }
.modal .layui-card { margin: 0; }
@keyframes modal-in { from { opacity: 0; transform: translate(-50%,-46%) scale(.97); } }

/* ---------- 过渡动画（页面切换 + 进度条）---------- */
.page-enter-active { transition: opacity .4s var(--ease), transform .4s var(--ease), filter .4s var(--ease); }
.page-leave-active { transition: opacity .16s ease, transform .16s ease; }
.page-enter-from { opacity: 0; transform: translateY(16px) scale(.985); filter: blur(6px); }
.page-leave-to { opacity: 0; transform: translateY(-8px); }

/* ---------- 内容区入场动画（卡片逐个浮入） ---------- */
@keyframes uc-rise { from { opacity: 0; transform: translateY(18px); } }
.uc-content > * { animation: uc-rise .45s var(--ease) backwards; }
.uc-content > *:nth-child(1) { animation-delay: 0s; }
.uc-content > *:nth-child(2) { animation-delay: .06s; }
.uc-content > *:nth-child(3) { animation-delay: .12s; }
.uc-content > *:nth-child(4) { animation-delay: .18s; }
.uc-content > *:nth-child(n+5) { animation-delay: .24s; }

/* 表格行淡入（错落进入） */
@keyframes uc-row-in { from { opacity: 0; transform: translateX(-8px); } }
.layui-table tbody tr { animation: uc-row-in .35s var(--ease) backwards; }
.layui-table tbody tr:nth-child(1) { animation-delay: .05s; }
.layui-table tbody tr:nth-child(2) { animation-delay: .1s; }
.layui-table tbody tr:nth-child(3) { animation-delay: .15s; }
.layui-table tbody tr:nth-child(n+4) { animation-delay: .2s; }

/* 卡片悬浮微动效 */
.uc-content .layui-card { transition: box-shadow .25s var(--ease), transform .25s var(--ease); }
.uc-content .layui-card:hover { box-shadow: 0 8px 28px rgba(29,33,41,.09); }

/* 菜单项微弹（悬停图标位移） */
.uc-menu-item .layui-icon, .uc-group-head > .layui-icon:first-child { transition: transform .2s var(--ease); }
.uc-menu-item:hover .layui-icon { transform: translateX(2px); }

/* 统计/信息卡数字渐入 */
@keyframes uc-count-in { from { opacity: 0; transform: translateY(10px) scale(.96); } }.acct-bar .avatar { animation: uc-count-in .5s var(--ease) .1s backwards; }

.progress { position: fixed; top: 0; left: 0; height: 2.5px; width: 100%; transform: scaleX(0); transform-origin: left; background: linear-gradient(90deg, var(--admin-primary), #69b1ff); z-index: 200; transition: transform .4s var(--ease), opacity .3s .3s; }
.progress.on   { transform: scaleX(.72); opacity: 1; transition: transform .35s var(--ease); }
.progress.done { transform: scaleX(1);   opacity: 0; }

/* ---------- Toast（自上缓慢滑入 + 手动关闭 + 倒计时进度条） ---------- */
.toasts { position: fixed; top: 14px; right: 14px; display: flex; flex-direction: column; gap: 10px; z-index: 99999; }
.toast {
    position: relative; overflow: hidden;
    background: #fff; border: 1px solid var(--admin-border); border-radius: 8px;
    padding: 12px 12px 14px 16px; font-size: 13px; color: var(--admin-text-title);
    box-shadow: 0 10px 32px rgba(29,33,41,.14);
    min-width: 220px; max-width: 340px;
    display: flex; align-items: center; gap: 8px;
    animation: toast-in .6s cubic-bezier(.22,.9,.32,1.1) backwards;
    transition: opacity .4s ease, transform .4s ease, margin .4s ease;
}
.toast-msg { flex: 1; min-width: 0; }
.toast .layui-icon:first-child { font-size: 17px; flex: none; }
.toast-close {
    flex: none; display: grid; place-items: center;
    width: 22px; height: 22px; border: none; border-radius: 4px;
    background: none; color: var(--admin-text-muted); cursor: pointer;
    transition: background .15s, color .15s;
}
.toast-close .layui-icon { font-size: 12px; }
.toast-close:hover { background: var(--admin-bg); color: var(--admin-text-title); }
.toast.ok  { border-top: 2px solid var(--admin-success); }
.toast.ok .layui-icon  { color: var(--admin-success); }
.toast.bad { border-top: 2px solid var(--admin-danger); }
.toast.bad .layui-icon { color: var(--admin-danger); }
/* 倒计时进度条（与默认 3s ttl 同步） */
.toast::after {
    content: ''; position: absolute; left: 0; bottom: 0; height: 2.5px; width: 100%;
    background: var(--admin-success); opacity: .35;
    animation: toast-bar 3s linear forwards; transform-origin: left;
}
.toast.bad::after { background: var(--admin-danger); }
/* 退出：淡出 + 上移收起 */
.toast.leaving { opacity: 0; transform: translateY(-14px) scale(.96); }
@keyframes toast-in {
    0%   { opacity: 0; transform: translateY(-46px); }
    100% { opacity: 1; transform: translateY(0); }
}
@keyframes toast-bar { from { transform: scaleX(1); } to { transform: scaleX(0); } }

/* 骨架屏 */
.sk-card { background: #fff; border: 1px solid var(--admin-border); border-radius:4px; padding: 20px; }
.sk-line { height: 14px; border-radius:4px; margin: 14px 0; background: linear-gradient(90deg, var(--admin-bg) 25%, #eceef2 50%, var(--admin-bg) 75%); background-size: 200% 100%; animation: shimmer 1.3s infinite; }
.sk-line.w30 { width: 30%; } .sk-line.w70 { width: 70%; }
@keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }

.state-box { display: grid; place-items: center; gap: 12px; padding: 56px 0; text-align: center; }
.state-box .layui-icon { font-size: 36px; color: var(--admin-text-muted); }

/* ---------- 弹窗关闭按钮：浮于容器右上角 ---------- */
.modal > .modal-close {
    position: absolute; top: 8px; right: 8px; z-index: 5;
    border: none; background: none;
    color: var(--admin-text-muted);
    cursor: pointer; font-size: 16px;
    width: 28px; height: 28px; border-radius: 4px;
    display: grid; place-items: center; transition: all .2s;
}
.modal > .modal-close:hover { background: #f1f2f5; color: var(--admin-text-title); }
.upay-wrap .layui-form-select { width: 100%; }
.upay-wrap .layui-select-title .layui-input {
    height: 32px; line-height: 32px; font-size: 12.5px; cursor: pointer;
}
.modal .layui-form-select dl { border-radius: 4px; font-size: 12.5px; box-shadow: 0 8px 24px rgba(16,24,40,.14); }
.modal .layui-form-select dl dd { line-height: 30px; padding: 0 12px; }

/* ---------- 移动端 ---------- */
@media (max-width: 768px) {
    .stat-row .layui-col-space12 { margin: 0; }
    .layui-table { min-width: 620px; }
    .auth-card { padding: 28px 22px 22px; }

    /* 侧边栏 → 抽屉 */
    .uc-sidebar { transform: translateX(-100%); box-shadow: none; }
    .uc-sidebar.open { transform: translateX(0); box-shadow: 18px 0 50px rgba(0,0,0,.18); }
    .uc-side-head { display: flex; border-bottom: 1px solid var(--admin-border-light, #eef0f4); }
    .uc-side-close { display: grid; place-items: center; }
    .uc-main { margin-left: 0; }
    .uc-burger { display: grid; place-items: center; }
    .uc-topbar { padding: 0 12px; }
    .uc-content { padding: 14px 12px calc(32px + env(safe-area-inset-bottom, 0px)); }
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* ---------- 二维码与支付动效 ---------- */
@keyframes spin { to { transform: rotate(360deg); } }
.qr-box { display: grid; place-items: center; padding: 16px; background: #fff; border: 1px solid var(--admin-border); border-radius:4px; margin: 4px auto 14px; width: fit-content; }
.qr-box canvas { display: block; border-radius:4px; }
.qr-hint { text-align: center; font-size: 12.5px; color: var(--admin-text-muted); line-height: 1.9; }

/* ============================================================
   v6 追加：控制台/产品/购物车/结账/实名/安全中心组件
   ============================================================ */

/* ---------- 侧边栏菜单激活态（旧顶部导航规则已随布局升级移除） ---------- */

/* ============================================================
   v14 企业化视觉升级
   ============================================================ */

/* 统一页头：标题 + 描述 + 右侧操作 */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; margin-bottom: 18px; flex-wrap: wrap; }
.page-head h2 { font-size: 20px; font-weight: 700; color: var(--admin-text-title); letter-spacing: -.01em; line-height: 1.3; }
.page-head p { margin-top: 4px; font-size: 12.5px; color: var(--admin-text-muted); }
.page-head .actions { display: flex; gap: 8px; flex-wrap: wrap; }
.page-head .actions .layui-btn { height: 36px; line-height: 36px; border-radius: 4px; }

/* 卡片通用精修（企业级细边框 + 柔和投影 + 悬浮反馈） */
.uc-content .layui-card { border-radius: 6px; box-shadow: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.04); }
.uc-content .layui-card-header { font-size: 14px; }
.uc-content .layui-card-header .layui-icon { font-size: 15px; }

/* 企业渐变欢迎横幅 */
.welcome-banner { border-radius: 6px; overflow: hidden; }
.welcome-banner.ent {
    background: linear-gradient(118deg, #1a2f8f 0%, #2456e6 48%, #3f8cff 100%);
    color: #fff; border: none;
    padding: 26px 28px; position: relative;
}
.welcome-banner.ent::before,
.welcome-banner.ent::after { content: ""; position: absolute; border-radius: 50%; background: rgba(255,255,255,.07); }
.welcome-banner.ent::before { width: 200px; height: 200px; right: -50px; top: -70px; }
.welcome-banner.ent::after  { width: 120px; height: 120px; right: 130px; bottom: -60px; background: rgba(255,255,255,.05); }
.welcome-banner.ent b { color: #fff; font-size: 20px; font-weight: 700; }
.welcome-banner.ent span { color: rgba(255,255,255,.72); }
.welcome-banner.ent .wb-btn { background: #fff; color: #2456e6; border: none; font-weight: 600; }
.welcome-banner.ent .wb-btn:hover { opacity: .92; }
.welcome-banner.ent .layui-btn-primary.wb-btn { background: rgba(255,255,255,.14); color: #fff; }
.welcome-banner.ent .meta { display: flex; gap: 22px; margin-top: 14px; flex-wrap: wrap; position: relative; z-index: 1; }
.welcome-banner.ent .meta em { display: block; font-style: normal; font-size: 11px; color: rgba(255,255,255,.6); }
.welcome-banner.ent .meta b { font-size: 16px; font-weight: 600; color: #fff; }

/* 统计卡悬浮精修 */
.stat-card { border-radius: 6px; box-shadow: 0 1px 2px rgba(16,24,40,.04); transition: transform .2s var(--ease), box-shadow .2s var(--ease), border-color .2s; }
.stat-card:hover { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(16,24,40,.08); border-color: #d6dff0; }
.stat-icon { border-radius: 6px; width: 44px; height: 44px; }
.stat-label { letter-spacing: .02em; }
.stat-value { letter-spacing: -.02em; }

/* 充值金额卡片样式已移除（改用极简表单风格） */

/* 表格行悬浮精修 */
.uc-content .layui-table tbody tr { transition: background .15s; }

/* ============================================================
   v15 追加：安全中心（分项列表）+ 控制台快捷入口
   ============================================================ */

/* 安全状态总览横幅 */
.sec-banner {
    display: flex; align-items: center; gap: 16px;
    background: linear-gradient(118deg, #0e2a8a 0%, #2456e6 60%, #3f8cff 100%);
    border-radius: 6px; padding: 20px 24px; margin-bottom: 16px;
    color: #fff; position: relative; overflow: hidden;
}
.sec-banner::after { content: ""; position: absolute; width: 160px; height: 160px; border-radius: 50%; background: rgba(255,255,255,.06); right: -40px; top: -60px; }
.sec-banner-ico {
    width: 52px; height: 52px; border-radius: 6px; flex: none;
    background: rgba(255,255,255,.15); display: grid; place-items: center;
}
.sec-banner-ico .layui-icon { font-size: 26px; color: #fff; }
.sec-banner b { display: block; font-size: 16px; font-weight: 700; }
.sec-banner span { display: block; margin-top: 3px; font-size: 12px; color: rgba(255,255,255,.72); }
.sec-progress { margin-top: 10px; height: 5px; border-radius: 3px; background: rgba(255,255,255,.2); overflow: hidden; max-width: 420px; }
.sec-progress i { display: block; height: 100%; border-radius: 3px; background: #7ef0b2; transition: width .6s var(--ease); }
.sec-score { font-size: 22px; font-weight: 700; color: #fff; }

/* 安全设置分项列表 */
.sec-list { padding: 4px 0; }
.sec-item {
    display: flex; align-items: flex-start; gap: 16px;
    padding: 20px 22px; border-bottom: 1px solid var(--admin-border-light, #eef0f4);
    transition: background .15s;
}
.sec-item:hover { background: #fafbfd; }
.sec-ico {
    width: 46px; height: 46px; border-radius: 50%; flex: none;
    display: grid; place-items: center;
}
.sec-ico .layui-icon { font-size: 21px; }
.sec-ico.c-blue   { background: rgba(22,119,255,.09);  color: var(--admin-primary); }
.sec-ico.c-green  { background: rgba(18,166,82,.09);   color: var(--admin-success); }
.sec-ico.c-orange { background: rgba(232,131,12,.1);   color: var(--admin-warning); }
.sec-ico.c-red    { background: rgba(227,64,63,.08);   color: var(--admin-danger); }
.sec-info { flex: 1; min-width: 0; }
.sec-info > b { display: flex; align-items: center; gap: 8px; font-size: 14.5px; color: var(--admin-text-title); margin-bottom: 4px; flex-wrap: wrap; }
.sec-info > p { font-size: 12.5px; color: var(--admin-text-muted); line-height: 1.7; }
.sec-action { flex: none; padding-top: 4px; }
.sec-action .layui-icon { font-size: 11px; transition: transform .25s; display: inline-block; }
.sec-action .layui-icon.rotate { transform: rotate(180deg); }
.sec-panel .layui-btn { align-self: flex-start; }
@keyframes sec-in { from { opacity: 0; transform: translateY(-6px); } }

/* 控制台快捷入口（右栏竖向列表，腾讯云风格） */
.dash-row { align-items: start; }

/* ---------- 账户信息条（腾讯云概览页顶条） ---------- */
.acct-bar { display: flex; align-items: center; gap: 16px; padding: 18px 22px; margin-bottom: 16px; flex-wrap: wrap; }
.acct-bar .avatar { width: 48px; height: 48px; font-size: 18px; flex: none; }
.acct-info { flex: 1; min-width: 220px; }
.acct-info > b { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 16px; color: var(--admin-text-title); }
.acct-info > p { margin-top: 3px; font-size: 12.5px; color: var(--admin-text-muted); }
.acct-actions { display: flex; gap: 8px; flex-wrap: wrap; }

/* ---------- 资源概览矩阵（腾讯云"我的资源"样式） ---------- */
.card-sub { margin-left: 10px; font-size: 11.5px; font-weight: 400; color: var(--admin-text-muted); }
.res-grid { display: grid; grid-template-columns: repeat(4, 1fr); }
.res-item {
    padding: 18px 20px; cursor: pointer;
    border-right: 1px solid var(--admin-border-light, #eef0f4);
    transition: background .15s;
}
.res-item:last-child { border-right: none; }
.res-item:hover { background: #fafbfd; }
.res-item:hover .res-manage { opacity: 1; }
.res-head { display: flex; align-items: center; gap: 8px; font-size: 12.5px; color: var(--admin-text-muted); }
.res-ico {
    width: 32px; height: 32px; border-radius: 6px; flex: none;
    display: grid; place-items: center;
}
.res-ico .layui-icon { font-size: 16px; }
.res-ico.q-blue   { background: rgba(22,119,255,.1);  color: var(--admin-primary); }
.res-ico.q-green  { background: rgba(18,166,82,.1);   color: var(--admin-success); }
.res-ico.q-orange { background: rgba(232,131,12,.1);  color: var(--admin-warning); }
.res-ico.q-red    { background: rgba(227,64,63,.08);  color: var(--admin-danger); }
.res-num { margin: 10px 0 6px; font-size: 22px; font-weight: 700; color: var(--admin-text-title); letter-spacing: -.02em; }
.res-num small { font-size: 12px; font-weight: 400; color: var(--admin-text-muted); }
.res-manage { font-size: 12px; color: var(--admin-primary); opacity: 0; transition: opacity .15s; }
.res-manage .layui-icon { font-size: 11px; }
@media (max-width: 992px) {
    .res-grid { grid-template-columns: repeat(2, 1fr); }
    .res-item:nth-child(2n) { border-right: none; }
    .res-item:nth-child(-n+2) { border-bottom: 1px solid var(--admin-border-light, #eef0f4); }
    .res-manage { opacity: 1; }
}
.quick-vlist { padding: 6px 0; }
.quick-vitem {
    display: flex; align-items: center; gap: 12px;
    padding: 12px 20px;
    color: var(--admin-text-body); font-size: 13.5px;
    text-decoration: none; transition: background .15s;
}
.quick-vitem:hover { background: var(--admin-bg); }
.quick-vitem:hover b { color: var(--admin-primary); }
.quick-vitem > .layui-icon { margin-left: auto; font-size: 12px; color: var(--admin-text-muted); }
.quick-vmeta { flex: 1; min-width: 0; }
.quick-vmeta b { display: block; font-size: 13.5px; color: var(--admin-text-title); transition: color .15s; }
.quick-vmeta span { font-size: 11.5px; color: var(--admin-text-muted); }
.quick-ico { width: 42px; height: 42px; border-radius: 6px; display: grid; place-items: center; flex: none; }
.quick-ico .layui-icon { font-size: 20px; }
.quick-ico.q-blue   { background: rgba(22,119,255,.1);  color: var(--admin-primary); }
.quick-ico.q-cyan   { background: rgba(19,194,194,.1);  color: #13c2c2; }
.quick-ico.q-orange { background: rgba(232,131,12,.1);  color: var(--admin-warning); }
.quick-ico.q-green  { background: rgba(18,166,82,.1);   color: var(--admin-success); }
.quick-ico.q-purple { background: rgba(114,46,209,.1);  color: #722ed1; }
.quick-ico.q-red    { background: rgba(227,64,63,.08);  color: var(--admin-danger); }

/* 账号安全迷你卡（右栏） */
.sec-mini { padding: 8px 20px 16px; }
.sec-mini-row {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 0; border-bottom: 1px dashed var(--admin-border-light, #eef0f4);
    font-size: 13px; color: var(--admin-text-body);
}
.sec-mini-btn { width: 100%; margin-top: 12px; }
@media (max-width: 768px) {
    .sec-item { flex-direction: column; gap: 10px; }
    .sec-action { width: 100%; padding-top: 0; }
    .sec-action .layui-btn { width: 100%; }
}

/* ---------- 购物车入口与角标 ---------- */
.cart-entry { position: relative; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 4px; color: var(--admin-text-body); text-decoration: none; transition: background .2s, color .2s; }
.cart-entry:hover { background: var(--admin-bg); color: var(--admin-primary); }
.cart-entry .layui-icon { font-size: 18px; }
.cart-badge { position: absolute; top: -2px; right: -4px; min-width: 16px; height: 16px; padding: 0 4px; border-radius: 3px; background: var(--admin-danger); color: #fff; font-size: 10.5px; line-height: 16px; text-align: center; font-weight: 600; }

/* ---------- 欢迎横幅（控制台，与后台同款白底卡片） ---------- */
.welcome-banner { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; padding: 20px 24px; margin-bottom: 14px; border-radius: 4px; background: var(--admin-card); border: 1px solid var(--admin-border); border-left: 3px solid var(--admin-primary); box-shadow: var(--shadow, 0 1px 2px rgba(28,35,48,.04)); position: relative; overflow: hidden; animation: rise-in .45s cubic-bezier(.22,1,.36,1) backwards; }
.welcome-banner b { display: block; font-size: 16px; color: var(--admin-text-title); margin-bottom: 4px; }
.welcome-banner span { font-size: 12.5px; color: var(--admin-text-muted); }
@keyframes rise-in { from { opacity: 0; transform: translateY(12px); } }

/* ---------- 分类芯片（与后台一致） ---------- */
.chip { display: inline-flex; align-items: center; gap: 5px; padding: 2px 8px; border-radius: 3px; font-size: 11.5px; background: #f1f2f5; color: var(--admin-text-muted); }
.chip.mail { background: rgba(22,102,255,.07); color: var(--admin-primary); }
.chip.sms  { background: rgba(232,131,12,.09); color: #e8830c; }

/* ---------- 购物车行 / 结账 ---------- */
.cart-row { display: flex; align-items: center; gap: 14px; padding: 14px 18px; border-bottom: 1px solid var(--admin-border-light, #eef0f4); animation: rise-in .4s cubic-bezier(.22,1,.36,1) backwards; animation-delay: calc(var(--i, 0) * 50ms); }
.cart-info { flex: 1; min-width: 0; }
.cart-info b { display: block; color: var(--admin-text-title); font-size: 13.5px; margin-bottom: 5px; }
.cart-spec { font-size: 12px; color: var(--admin-text-muted); display: flex; align-items: center; gap: 6px; }
.cart-price { width: 90px; text-align: right; font-size: 13px; color: var(--admin-text-body); }
.qty-stepper { display: flex; align-items: center; border: 1px solid var(--admin-border); border-radius: 3px; overflow: hidden; }
.qty-stepper button { width: 28px; height: 28px; border: none; background: #f7f8fa; color: var(--admin-text-body); cursor: pointer; font-size: 15px; transition: background .2s; }
.qty-stepper button:hover { background: rgba(22,102,255,.08); color: var(--admin-primary); }
.qty-stepper input { width: 42px; height: 28px; border: none; text-align: center; font-size: 13px; outline: none; }
.cart-sub { width: 100px; text-align: right; font-weight: 700; color: var(--admin-text-title); font-size: 13.5px; }
.cart-del { width: 30px; height: 30px; border: none; background: none; color: var(--admin-text-muted); cursor: pointer; border-radius: 3px; font-size: 15px; transition: all .2s; }
.cart-del:hover { background: rgba(227,64,63,.08); color: var(--admin-danger); }
.cart-footer { display: flex; align-items: center; gap: 10px; padding: 14px 18px; }
.cart-footer .total { margin-right: auto; font-size: 13px; color: var(--admin-text-body); }
.ck-total { display: flex; justify-content: space-between; align-items: center; padding: 14px 18px; font-size: 13px; color: var(--admin-text-muted); }
.ck-total b { font-size: 19px; color: var(--admin-danger); }

/* ---------- 我的产品卡片（layui 栅格布局） ---------- */
.prod-row { padding: 16px 18px; }
.prod-row .prod-card { height: 100%; }
.prod-card { border: 1px solid var(--admin-border); border-radius: 4px; padding: 16px; background: #fff; transition: box-shadow .3s, transform .3s cubic-bezier(.22,1,.36,1); animation: rise-in .45s cubic-bezier(.22,1,.36,1) backwards; animation-delay: calc(var(--i, 0) * 60ms); }
.prod-card:hover { transform: translateY(-2px); box-shadow: 0 2px 4px rgba(28,35,48,.05), 0 8px 20px rgba(28,35,48,.07); }
.prod-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.prod-name { display: block; font-size: 14.5px; color: var(--admin-text-title); margin-bottom: 12px; }
.prod-metric { display: flex; justify-content: space-between; align-items: baseline; font-size: 12px; color: var(--admin-text-muted); margin-bottom: 8px; }
.prod-metric b { font-size: 16px; color: var(--admin-text-title); }
.prod-metric b small { font-size: 11.5px; font-weight: 400; color: var(--admin-text-muted); }
.prod-bar { height: 5px; border-radius: 2px; background: #eef0f4; overflow: hidden; }
.prod-bar i { display: block; height: 100%; border-radius: 2px; background: var(--admin-primary); transition: width .6s cubic-bezier(.22,1,.36,1); }
.prod-foot { font-size: 11.5px; color: var(--admin-text-muted); margin-top: 7px; }
.prod-time { margin-top: 10px; padding-top: 9px; border-top: 1px dashed var(--admin-border-light, #eef0f4); font-size: 11.5px; color: var(--admin-text-muted); }
.verify-state .layui-icon { font-size: 26px; }
.verify-info { border: 1px solid var(--admin-border-light, #eef0f4); border-radius: 4px; overflow: hidden; }
.verify-row { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 11px 14px; font-size: 13px; border-bottom: 1px solid var(--admin-border-light, #eef0f4); }
.verify-row:last-child { border-bottom: none; }
.verify-row span { color: var(--admin-text-muted); flex: none; }
.verify-row b { color: var(--admin-text-title); font-weight: 600; text-align: right; }

/* ---------- 移动端 ---------- */
@media (max-width: 768px) {
    .cart-row { flex-wrap: wrap; gap: 8px; }
    .cart-info { flex: 1 1 100%; }
    .cart-price { width: auto; }
    .cart-sub { width: auto; margin-left: auto; }
    .prod-row { padding: 12px; }
    .ck-total { flex-direction: column; align-items: flex-end; gap: 4px; }

    /* 顶栏压缩 + 底部安全区 */
    .uc-topbar { gap: 8px; }
    .uc-user { gap: 8px; }
    .uc-user .layui-btn { padding: 0 8px; font-size: 12px; }
    .uc-content { padding: 14px 12px calc(32px + env(safe-area-inset-bottom, 0px)); }
    .welcome-banner { padding: 16px; }
    .cart-footer { flex-wrap: wrap; }
    .cart-footer .layui-btn { flex: 1; }
    .cart-footer .total { flex-basis: 100%; }
}

/* 超窄屏：顶栏仅保留图标标识 */
@media (max-width: 480px) {
    .uc-topbar .auth-logo b { display: none; }
    .uc-topbar .auth-logo .mark { width: 28px; height: 28px; }
}

/* ---------- 会员详情弹层（后台组件，样式在 admin-theme.css） ---------- */

/* ============================================================
   v12 追加：筛选芯片组（替代传统下拉）
   ============================================================ */
.chip-group { display: flex; flex-wrap: wrap; gap: 8px; }
.chip-btn {
    display: inline-flex; align-items: center; gap: 6px;
    height: 32px; padding: 0 13px;
    border: 1px solid var(--admin-border); border-radius: 4px;
    background: #fff; color: var(--admin-text-body);
    font-size: 12.5px; cursor: pointer; user-select: none;
    transition: all 0.18s;
}
.chip-btn input { display: none; }
.chip-btn:hover { border-color: var(--admin-primary); color: var(--admin-primary); }
.chip-btn.on { background: var(--admin-primary); border-color: var(--admin-primary); color: #fff; font-weight: 600; }

/* ============================================================
   余额充值页（腾讯云极简表单风格）
   ============================================================ */
.rc-input-row { display: flex; align-items: center; gap: 10px; max-width: 380px; }
.rc-input { height: 44px; font-size: 17px; font-weight: 600; }
.rc-unit { font-size: 14px; color: var(--admin-text-muted); flex: none; }
.rc-links { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 14px; font-size: 12.5px; color: var(--admin-text-muted); }
.rc-links a { color: var(--admin-primary); padding: 2px 4px; text-decoration: none; }
.rc-links a:hover { text-decoration: underline; }
.rc-links a.on { font-weight: 700; }
.rc-btn { min-width: 140px; height: 40px; font-size: 14px; }
.rc-note p { font-size: 12.5px; color: var(--admin-text-muted); line-height: 2.1; }

/* ================= 站内通知 ================= */
.msg-list { padding: 6px 0 10px; }
.msg-item { display: flex; align-items: flex-start; gap: 12px; padding: 13px 20px; border-bottom: 1px solid var(--admin-line); cursor: pointer; position: relative; transition: background .15s; animation: row-in .35s var(--ease) backwards; animation-delay: calc(var(--ri, 0) * 40ms); }
.msg-item:last-child { border-bottom: none; }
.msg-item:hover { background: rgba(22, 119, 255, .04); }
.msg-item.unread .msg-title { color: var(--admin-text-title); }
.msg-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--admin-danger); flex: none; margin-top: 7px; }
.msg-main { flex: 1; min-width: 0; }
.msg-title { font-size: 13.5px; color: var(--admin-text); display: block; }
.msg-content { margin: 3px 0 0; font-size: 12.5px; color: var(--admin-text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.msg-time { font-size: 11.5px; color: var(--admin-text-muted); flex: none; margin-top: 2px; }
@media (max-width: 560px) { .msg-time { display: none; } }

/* 顶栏消息铃铛（与购物车入口并排） */
.msg-entry { margin-right: 10px; }

/* ============================================================
   单产品请求统计弹层：指标块（与 prod-metric 同色系）
   ============================================================ */
.pstat { background: var(--admin-bg); border-radius: 8px; padding: 10px 12px; height: 100%; box-sizing: border-box; }
.pstat span { display: block; font-size: 11px; color: var(--admin-text-muted); margin-bottom: 3px; }
.pstat b { font-size: 15px; color: var(--admin-text-title); font-weight: 600; }

/* ============================================================
   移动端弹窗适配（layui layer）
   问题：小屏下弹层按桌面宽度定位，底部被手机视口/手势区遮挡无法操作
   方案：限宽居中 + 限高（扣除安全区）+ 内容区滚动，标题与按钮始终可见
   ============================================================ */
@media (max-width: 768px) {
    .layui-layer.xm-layer,
    .layui-layer.layui-layer-dialog,
    .layui-layer.layui-layer-page {
        width: calc(100vw - 24px) !important;
        max-width: calc(100vw - 24px) !important;
        left: 12px !important;
        top: 50% !important;
        transform: translateY(-50%);
        max-height: calc(100dvh - env(safe-area-inset-bottom, 0px) - 48px);
        display: flex;
        flex-direction: column;
        overflow: hidden;
    }
    .layui-layer.xm-layer .layui-layer-content,
    .layui-layer.layui-layer-dialog .layui-layer-content,
    .layui-layer.layui-layer-page .layui-layer-content {
        flex: 1 1 auto;
        height: auto !important;
        max-height: none;
        overflow-y: auto;
        -webkit-overflow-scrolling: touch;
    }
    .layui-layer.xm-layer .layui-layer-btn,
    .layui-layer.layui-layer-dialog .layui-layer-btn {
        flex: none;
    }
}
.vbp-pool-row .layui-input{flex:1}
.vbp-legacy-tip{padding:10px 12px;border-radius:6px;background:#fff7e6;border:1px solid #ffe1a2;color:#8d6708;font-size:13px;line-height:1.7}
.vbp-legacy-tip .uc-pre-light{max-height:160px;overflow-y:auto}

/* ===== 富文本回复编辑器（re-*，#68） ===== */
.re-editor{display:flex;flex-direction:column;gap:8px}
.re-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:6px;padding:8px;border:1px dashed var(--admin-border,#d2d2d2);border-radius:8px}
.re-tb{padding:4px 10px;border:1px solid var(--admin-border,#d2d2d2);border-radius:6px;background:var(--admin-panel,#fff);color:var(--admin-text);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:4px;transition:.15s}
.re-tb:hover{border-color:var(--admin-primary,#1677ff);color:var(--admin-primary,#1677ff)}
.re-tb .layui-icon{font-size:13px}
.re-area{min-height:130px;max-height:260px;overflow-y:auto;padding:10px 12px;border:1px solid var(--admin-border,#d2d2d2);border-radius:8px;background:var(--admin-panel,#fff);line-height:1.9;font-size:13px;color:var(--admin-text);outline:none;word-break:break-all}
.re-area:focus{border-color:var(--admin-primary,#1677ff);box-shadow:0 0 0 2px rgba(22,119,255,.1)}
.re-area:empty:before{content:attr(data-ph);color:var(--admin-muted,#999);pointer-events:none}
.re-chip{display:inline-block;padding:1px 8px;margin:0 2px;border-radius:4px;font-size:12px;line-height:1.6;color:#fff;background:#888;cursor:pointer;user-select:none;vertical-align:baseline;white-space:nowrap}
.re-chip:hover{filter:brightness(1.12)}
.re-chip.on{outline:2px solid var(--admin-primary,#1677ff);outline-offset:1px}
.re-edit{padding:10px 12px;border:1px solid var(--admin-border,#d2d2d2);border-radius:8px;background:var(--admin-bg,#fafafa);display:flex;flex-direction:column;gap:8px}
.re-edit-head{display:flex;align-items:center;justify-content:space-between}
.re-edit-head b{font-size:13px}
.re-edit-ops{display:flex;justify-content:flex-end}
.re-pool-row{display:flex;gap:6px;margin-bottom:6px}
.re-pool-row .layui-input{flex:1}
.re-paths{display:flex;flex-wrap:wrap;gap:6px;padding:8px;border-radius:6px;background:var(--admin-panel,#fff);border:1px solid var(--admin-border,#eee)}
.re-path{padding:2px 8px;border:1px solid var(--admin-border,#d2d2d2);border-radius:4px;background:var(--admin-panel,#fff);color:var(--admin-text);font-size:12px;cursor:pointer;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Consolas,monospace}
.re-path:hover{border-color:var(--admin-primary,#1677ff);color:var(--admin-primary,#1677ff)}
/* 富文本编辑器内复选框：layui-form 会 display:none 原生 checkbox（等其渲染器接管，
   但我们只渲染 select 不渲染 checkbox）——用 .re-check 覆盖恢复显示 */
.re-check{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--admin-text);margin:0}
.re-check input[type=checkbox]{display:inline-block;width:auto;height:auto;margin:0;cursor:pointer;accent-color:var(--admin-primary,#1677ff);flex:none}
.re-preview{border-top:1px dashed var(--admin-border,#d2d2d2);padding-top:10px;display:flex;flex-direction:column;gap:6px}
.re-preview>label{font-size:12px;color:var(--admin-muted,#999)}
.re-preview-text{padding:10px 12px;border-radius:6px;background:#f0f7ff;color:#333;white-space:pre-wrap;word-break:break-all;font-size:13px;line-height:1.7;max-height:180px;overflow-y:auto}

/* ============================================================
   机器人运营模块统一 UI 补齐（#59-#63）
   ============================================================ */

/* ---------- 状态徽标补色（与 st-orange/st-green/st-gray 成套） ---------- */
.st-red   { background: rgba(227,64,63,.1);   color: var(--admin-danger, #e3403f); }
.st-blue  { background: rgba(22,119,255,.1);  color: var(--admin-primary, #1677ff); }

/* ---------- layui 下拉单选壳（与后台/admin 一致的统一组件） ----------
   结构：<span class="xm-sel-wrap"><select class="layui-select" ...> */
.xm-sel-wrap { position: relative; display: block; width: 100%; }
.xm-sel-wrap > select { display: none !important; }   /* 壳内原生 select 隐藏（v-model/change 仍有效） */
.xm-sel-wrap .layui-form-select { width: 100%; }
.xm-sel-wrap .layui-select-title .layui-input { height: 38px; line-height: 38px; cursor: pointer; }
.xm-sel-wrap .layui-form-select dl { border-radius: 4px; font-size: 12.5px; box-shadow: 0 8px 24px rgba(16,24,40,.14); }
.xm-sel-wrap .layui-form-select dl dd { line-height: 34px; padding: 0 12px; }

/* 工具栏中的下拉（筛选场景，高度与输入框对齐） */
.uc-card-tools .xm-sel-wrap { flex: 1 1 150px; width: auto; min-width: 130px; max-width: 180px; }
.uc-card-tools .xm-sel-wrap .layui-select-title .layui-input { height: 32px; line-height: 32px; }

/* 表单弹窗中的下拉（uc-form 内全宽，与输入框一致高度） */
.uc-form .uc-form-row .xm-sel-wrap { width: 100%; }
.uc-form .uc-form-row .xm-sel-wrap .layui-select-title .layui-input {
    height: 38px; line-height: 38px; border-radius: var(--radius-sm, 4px);
}

/* ---------- 控制台统计卡片（原 uc-console-stats/uc-stat-card 无定义） ---------- */
.uc-console-stats {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px; margin-bottom: 16px;
}
.uc-stat-card {
    background: #fff; border: 1px solid var(--admin-border); border-radius: 6px;
    padding: 16px 18px; text-align: center;
    transition: transform .2s var(--ease), box-shadow .2s var(--ease);
    animation: rise .45s var(--ease) backwards;
    animation-delay: calc(var(--i, 0) * 80ms);
}
.uc-stat-card:hover { transform: translateY(-2px); box-shadow: 0 4px 16px rgba(16,24,40,.08); }
.uc-stat-num { font-size: 24px; font-weight: 700; color: var(--admin-text-title); letter-spacing: -.02em; }
.uc-stat-label { font-size: 12px; color: var(--admin-text-muted); margin-top: 4px; }

/* ---------- 动态编辑行（菜单项/面板元素，替代与侧边栏冲突的 uc-menu-item） ---------- */
.uc-block-row {
    display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
    padding: 10px; margin-bottom: 8px;
    border: 1px solid var(--admin-border); border-radius: 6px;
    background: var(--admin-bg);
}
.uc-block-row .layui-input { border-color: #fff; }
.uc-block-row > .layui-btn { flex: none; }

/* ---------- 标签页换行（uc-tabs 窄屏） ---------- */
.uc-tabs { flex-wrap: wrap; row-gap: 0; }

/* ---------- 日志详情小徽标 ---------- */
.log-chip {
    display: inline-flex; align-items: center; height: 20px; padding: 0 8px;
    border-radius: 3px; font-size: 11px; font-weight: 600; white-space: nowrap;
    background: var(--admin-bg); color: var(--admin-text-muted);
}
.log-chip.lc-blue  { background: rgba(22,119,255,.08);  color: var(--admin-primary, #1677ff); }
.log-chip.lc-green { background: rgba(0,180,42,.08);    color: var(--admin-success, #00b42a); }
.log-chip.lc-gray  { background: var(--admin-bg);       color: var(--admin-text-muted); }
.log-chip.lc-red   { background: rgba(227,64,63,.1);    color: var(--admin-danger, #e3403f); }
.log-chip.lc-orange{ background: rgba(255,125,0,.12);   color: var(--admin-warning, #ff7d00); }

/* ---------- 连接器可视化键值对编辑（Headers / Body / 提取规则） ---------- */
.kv-rows { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; }
.kv-row  { display: flex; align-items: center; gap: 8px; }
.kv-row .layui-input { flex: 1; min-width: 0; }
.kv-row .layui-btn { flex: none; }
.kv-rows + .layui-btn { margin-bottom: 8px; }
