/* 管理后台样式（从 resources/views/admin.blade.php 拆出，见 AGENTS 43）
 * 【注意】此文件**不再受 Blade 编译**，可以自由使用 @media / @keyframes 等 at-rule；
 * 但请保持「样式只在公共层或本文件」的纪律，不要再往模板里塞 <style>。
 */
        /* ================================================
           Apple Bento Grid Style Admin UI
           配色：Apple 设计语言（Apple Card UI v2 令牌）
           - 背景:  #F5F5F7 (浅灰白)   - 卡片:  #FFFFFF (纯白)
           - 主色:  #0071E3 (Apple Blue)  → 取代旧 #409eff
           - 文字:  #1D1D1F (主) / #6E6E73 (次) / #A1A1A6 (弱)
           - 圆角:  22px 卡片 / 16px 内嵌 / 12px 小元素 / pill 标签
           - 阴影:  两层（贴地 1px + 远投射），营造"浮起"
           令牌唯一事实来源见 docs/UI_APPLE_V2_SPEC.md §1
           ================================================ */
        :root {
            /* ---- 画布 / 层次 ---- */
            --apple-bg:          #F5F5F7;   /* 页面底色，Apple store 灰 */
            --apple-bg-deep:     #EDEDF0;   /* 分组间隔 / 内嵌区 */
            --apple-card:        #FFFFFF;   /* 主卡片 */
            --apple-surface-2:   #F7F7F9;   /* 次级卡片 / 输入内底 */
            --apple-surface-3:   #EFEFF3;   /* 分段控件轨道 */
            /* ---- 文字（四级）---- */
            --apple-ink:         #0B0B0F;   /* 标题 / 大数字 */
            --apple-text:        #1D1D1F;   /* 正文 */
            --apple-text-2:      #6E6E73;   /* 次要 */
            --apple-text-3:      #8E8E93;   /* 弱化 / 占位（AGENTS 铁律 5：不用 #A1A1A6，白底仅 2.56:1） */
            /* ---- 语义色（克制使用）---- */
            --apple-blue:        #0071E3;   /* Apple Blue —— 取代 #409eff */
            --apple-blue-soft:   rgba(0, 113, 227, 0.10);
            --apple-green:       #30D158;
            --apple-orange:      #FF9F0A;
            --apple-red:         #FF3B30;
            --apple-pink:        #FF2D55;
            --apple-purple:      #AF52DE;
            --apple-teal:        #30B0C7;
            /* ---- 描边 / 分隔 ---- */
            --apple-border:      rgba(0, 0, 0, 0.06);
            --apple-border-2:    rgba(0, 0, 0, 0.04);
            --apple-hairline:    rgba(0, 0, 0, 0.06);
            --apple-hairline-2:  rgba(0, 0, 0, 0.10);
            /* ---- 阴影：两层 ---- */
            --apple-shadow:      0 1px 2px rgba(16, 24, 40, .04), 0 12px 28px -14px rgba(16, 24, 40, .18);
            --apple-shadow-lg:   0 2px 6px rgba(16, 24, 40, .06), 0 24px 48px -20px rgba(16, 24, 40, .30);
            --apple-shadow-press:0 1px 2px rgba(16, 24, 40, .05), 0 4px 10px -6px rgba(16, 24, 40, .16);
            /* ---- 圆角 ---- */
            --apple-radius-lg:   22px;
            --apple-radius-md:   16px;
            --apple-radius-sm:   12px;
            --apple-radius-pill: 999px;
            /* ---- 字体 ---- */
            --apple-font:        "Manrope", -apple-system, BlinkMacSystemFont, "SF Pro Text",
                                 "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
            --apple-font-num:    "Manrope", -apple-system, "SF Pro Display", "PingFang SC", sans-serif;
        }
        * { margin: 0; padding: 0; box-sizing: border-box; }
        html, body {
            font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI",
                         "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
            background: var(--apple-bg);
            color: var(--apple-text);
            min-height: 100vh;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
            letter-spacing: -0.01em;
        }
        a.link { color: var(--apple-blue); cursor: pointer; text-decoration: none; }
        a.link:hover { text-decoration: underline; }
        .mono { font-family: "SF Mono", Consolas, "JetBrains Mono", monospace; }
        .el-table { margin-top: 12px; border-radius: var(--apple-radius-md) !important; overflow: hidden !important; }
        .el-table, .el-table__inner-wrapper, .el-table__body, .el-table__header {
            border-radius: var(--apple-radius-md) !important;
        }
        .el-table tr:last-child td { border-bottom: none !important; }
        .el-table td, .el-table th.is-leaf {
            border-bottom: 1px solid var(--apple-border-2) !important;
        }
        .el-table th.el-table__cell {
            background: #FAFAFB !important;
            color: var(--apple-text-2) !important;
            font-weight: 600 !important;
            font-size: 12px !important;
        }
        .el-table--border, .el-table--group { border-color: var(--apple-border) !important; }
        .el-table--border::after, .el-table--group::after, .el-table::before {
            background-color: var(--apple-border) !important;
        }
        .el-button {
            border-radius: var(--apple-radius-sm) !important;
            font-weight: 500 !important;
            transition: all .18s ease !important;
        }
        .el-button--primary {
            background: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
        }
        .el-button--success { background: var(--apple-green) !important; border-color: var(--apple-green) !important; }
        .el-button--warning { background: var(--apple-orange) !important; border-color: var(--apple-orange) !important; }
        .el-button--danger  { background: var(--apple-red) !important; border-color: var(--apple-red) !important; }
        .el-button:active { transform: scale(0.97); }
        .el-input__wrapper,
        .el-textarea__inner,
        .el-select__wrapper,
        .el-date-editor.el-input__wrapper {
            border-radius: var(--apple-radius-sm) !important;
            box-shadow: 0 0 0 1px var(--apple-border) inset !important;
            transition: all .18s ease !important;
        }
        .el-input__wrapper.is-focus,
        .el-select__wrapper.is-focus,
        .el-textarea__inner:focus {
            box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.18) inset !important;
        }
        .el-dialog, .el-drawer {
            border-radius: var(--apple-radius-lg) !important;
            overflow: hidden !important;
        }
        .el-dialog {
            box-shadow: var(--apple-shadow-lg) !important;
            border: 1px solid var(--apple-border) !important;
        }
        .el-drawer__body { padding: 22px !important; }
        .el-card {
            border-radius: var(--apple-radius-md) !important;
            border: 1px solid var(--apple-border) !important;
            box-shadow: var(--apple-shadow) !important;
        }
        .el-card__body { padding: 22px !important; }
        .el-tag { border-radius: 8px !important; padding: 0 9px !important; }
        .el-tag--primary { background: rgba(64,158,255,.1) !important; border-color: rgba(64,158,255,.2) !important; color: var(--apple-blue) !important; }
        .el-tag--success { background: rgba(52,199,89,.1) !important; border-color: rgba(52,199,89,.2) !important; color: var(--apple-green) !important; }
        .el-tag--warning { background: rgba(255,149,0,.1) !important; border-color: rgba(255,149,0,.2) !important; color: var(--apple-orange) !important; }
        .el-tag--danger  { background: rgba(255,59,48,.1) !important; border-color: rgba(255,59,48,.2) !important; color: var(--apple-red) !important; }
        .el-tag--info    { background: rgba(134,134,139,.09) !important; border-color: rgba(134,134,139,.18) !important; color: var(--apple-text-2) !important; }
        .el-message-box, .el-notification {
            border-radius: var(--apple-radius-md) !important;
            border: 1px solid var(--apple-border) !important;
            box-shadow: var(--apple-shadow-lg) !important;
        }
        .el-form-item__label { font-weight: 500; color: var(--apple-text); }
        .el-menu { border-right: none !important; }
        .role-tag { display: inline-block; margin: 2px 4px 2px 0; }

        /* ===== 安装向导 & 登录页 ===== */
        .installer-container { max-width: 920px; margin: 6vh auto; padding: 0 24px; }
        .installer-header { text-align: center; margin-bottom: 32px; }
        .installer-header h1 {
            font-size: 30px; font-weight: 700; color: var(--apple-text);
            letter-spacing: -0.02em;
        }
        .installer-header p { color: var(--apple-text-2); font-size: 14px; margin-top: 10px; }
        .installer-card {
            background: var(--apple-card);
            border-radius: var(--apple-radius-lg);
            box-shadow: var(--apple-shadow);
            border: 1px solid var(--apple-border);
            padding: 36px;
            margin-bottom: 20px;
        }
        .step-title {
            font-size: 18px; font-weight: 600; color: var(--apple-text);
            margin-bottom: 22px; padding-bottom: 14px;
            border-bottom: 1px solid var(--apple-border-2);
            display: flex; align-items: center; gap: 10px;
        }
        .step-num {
            background: var(--apple-blue); color: #fff;
            width: 30px; height: 30px; border-radius: 50%;
            display: inline-flex; align-items: center; justify-content: center;
            font-size: 14px; font-weight: 600;
            box-shadow: 0 2px 8px rgba(64,158,255,.25);
        }
        .check-item {
            display: flex; justify-content: space-between; align-items: center;
            padding: 13px 0; border-bottom: 1px solid var(--apple-border-2);
        }
        .check-item:last-child { border-bottom: none; }
        .check-item .label { font-size: 14px; color: var(--apple-text); }
        .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
        .form-row > .form-cell { min-width: 0; }
        .form-row .el-form-item { margin-bottom: 8px; }
        @media (max-width: 640px) { .form-row { grid-template-columns: 1fr; } }
        .form-row.cols-3 { grid-template-columns: 1fr 1fr 1fr; }
        .logo-preview {
            width: 64px; height: 64px;
            border-radius: var(--apple-radius-sm);
            object-fit: contain; border: 1px solid var(--apple-border);
            background: var(--apple-card);
        }
        .wizard-footer {
            display: flex; justify-content: space-between;
            margin-top: 28px; padding-top: 20px;
            border-top: 1px solid var(--apple-border-2);
        }
        .login-box { max-width: 440px; margin: 10vh auto; }
        .login-title {
            text-align: center; font-size: 24px; font-weight: 700;
            margin-bottom: 28px; color: var(--apple-text);
            letter-spacing: -0.02em;
        }

        /* ===== 批量操作条 ===== */
        .batch-bar {
            display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
            margin: 0 0 16px; padding: 12px 16px;
            border-radius: var(--apple-radius-md);
            background: rgba(64, 158, 255, 0.07);
            border: 1px solid rgba(64, 158, 255, 0.13);
        }
        .batch-bar .batch-count { font-size: 13px; color: var(--apple-text-2); margin-right: 4px; }
        .batch-bar .batch-count b { color: var(--apple-blue); font-size: 15px; }

        /* ===== 缩略图 ===== */
        .thumb-img {
            width: 36px; height: 36px; object-fit: contain;
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-sm);
            cursor: zoom-in;
            transition: transform .18s ease, box-shadow .18s ease;
            background: var(--apple-card);
        }
        .thumb-img:hover {
            transform: scale(1.18);
            box-shadow: 0 4px 14px rgba(0,0,0,.14);
        }
        .thumb-img.lg { width: 64px; height: 64px; }
        .thumb-img.site-photo {
            width: 130px; height: 130px; margin: 0 8px 8px 0;
            object-fit: cover; border-radius: var(--apple-radius-md);
        }
        .img-zoom { cursor: zoom-in; }

        /* ===== 管理后台主壳 ===== */
        .admin-shell { height: 100vh; }
        .admin-aside {
            background: rgba(255, 255, 255, 0.85);
            backdrop-filter: blur(20px) saturate(180%);
            -webkit-backdrop-filter: blur(20px) saturate(180%);
            border-right: 1px solid var(--apple-border);
            transition: width .22s ease;
            display: flex; flex-direction: column;
        }
        .admin-logo {
            height: 64px;
            display: flex; align-items: center; justify-content: center;
            gap: 10px;
            border-bottom: 1px solid var(--apple-border-2);
            font-size: 17px; font-weight: 700;
            color: var(--apple-text);
            white-space: nowrap; overflow: hidden;
            letter-spacing: -0.01em;
        }
        .admin-logo .logo-emoji {
            font-size: 24px;
            width: 36px; height: 36px;
            /* v2：去蓝色渐变，改扁平语义色（见 UI_APPLE_V2_SPEC §1） */
            background: var(--apple-blue);
            border-radius: 10px;
            display: inline-flex; align-items: center; justify-content: center;
            box-shadow: none;
        }
        .admin-logo .logo-img { height: 38px; width: auto; max-width: 150px; object-fit: contain; }
        .admin-menu { border-right: none; flex: 1; overflow-y: auto; padding: 10px 8px; }
        .admin-menu .el-menu-item {
            border-radius: 10px !important;
            margin: 2px 0 !important;
            height: 44px !important;
            line-height: 44px !important;
            color: var(--apple-text-2) !important;
            font-weight: 500 !important;
            transition: all .16s ease !important;
        }
        .admin-menu .el-menu-item:hover {
            background: rgba(64, 158, 255, 0.07) !important;
            color: var(--apple-blue) !important;
        }
        .admin-menu .el-menu-item.is-active {
            /* v2：去蓝色渐变块，改扁平层级（深墨侧边栏的最终样式见末尾 Apple Card UI v2 覆盖层） */
            background: rgba(255, 255, 255, .10) !important;
            color: #fff !important;
            font-weight: 600 !important;
        }
        .admin-menu .el-menu-item i { margin-right: 10px; font-size: 16px; }

        .admin-header {
            background: rgba(255, 255, 255, 0.82);
            backdrop-filter: blur(20px) saturate(180%);
            -webkit-backdrop-filter: blur(20px) saturate(180%);
            border-bottom: 1px solid var(--apple-border);
            display: flex; align-items: center; justify-content: space-between;
            height: 64px; padding: 0 28px;
        }
        .header-left { display: flex; align-items: center; gap: 12px; }
        .collapse-btn {
            font-size: 18px;
            width: 36px; height: 36px;
            display: inline-flex !important;
            align-items: center; justify-content: center !important;
            padding: 0 !important;
            border-radius: var(--apple-radius-sm) !important;
        }
        .collapse-btn:hover { background: var(--apple-bg) !important; }
        .header-title {
            font-size: 17px; font-weight: 600;
            color: var(--apple-text);
            letter-spacing: -0.01em;
        }
        .header-right { display: flex; align-items: center; gap: 12px; }
        .header-name {
            font-size: 14px; color: var(--apple-text);
            padding: 6px 12px;
            background: var(--apple-bg);
            border-radius: 20px;
            font-weight: 500;
        }
        .admin-main {
            background: var(--apple-bg);
            padding: 24px 28px;
            overflow-y: auto;
        }

        /* ===== KPI 统计卡片（Bento 风格）===== */
        .stat-card {
            background: var(--apple-card);
            border-radius: var(--apple-radius-lg);
            padding: 22px 24px;
            box-shadow: var(--apple-shadow);
            border: 1px solid var(--apple-border);
            margin-bottom: 20px;
            transition: all .24s ease;
            position: relative;
            overflow: hidden;
        }
        .stat-card::after {
            content: '';
            position: absolute; right: -20px; top: -20px;
            width: 100px; height: 100px; border-radius: 50%;
            opacity: .07;
        }
        .stat-card:hover {
            transform: translateY(-2px);
            box-shadow: var(--apple-shadow-lg);
        }
        .stat-card .stat-label {
            font-size: 13px; color: var(--apple-text-2);
            font-weight: 500; letter-spacing: 0.01em;
            display: flex; align-items: center; gap: 8px;
        }
        .stat-card .stat-label .fa-solid,
        .stat-card .stat-label .fa-regular {
            width: 32px; height: 32px; border-radius: 10px;
            display: inline-flex; align-items: center; justify-content: center;
            font-size: 14px;
        }
        .stat-card .stat-value {
            font-size: 32px; font-weight: 700;
            margin-top: 12px; color: var(--apple-text);
            letter-spacing: -0.02em;
            line-height: 1.1;
        }
        .stat-card .stat-sub {
            font-size: 12px; color: var(--apple-text-3);
            margin-top: 8px;
            display: inline-flex; align-items: center; gap: 4px;
        }
        .stat-card.blue   .stat-value { color: var(--apple-blue); }
        .stat-card.green  .stat-value { color: var(--apple-green); }
        .stat-card.orange .stat-value { color: var(--apple-orange); }
        .stat-card.red    .stat-value { color: var(--apple-red); }
        .stat-card.purple .stat-value { color: var(--apple-purple); }
        .stat-card.teal   .stat-value { color: var(--apple-teal); }
        .stat-card.blue   .stat-label .fa-solid,
        .stat-card.blue   .stat-label .fa-regular { background: rgba(64,158,255,.12); color: var(--apple-blue); }
        .stat-card.green  .stat-label .fa-solid,
        .stat-card.green  .stat-label .fa-regular { background: rgba(52,199,89,.12); color: var(--apple-green); }
        .stat-card.orange .stat-label .fa-solid,
        .stat-card.orange .stat-label .fa-regular { background: rgba(255,149,0,.12); color: var(--apple-orange); }
        .stat-card.red    .stat-label .fa-solid,
        .stat-card.red    .stat-label .fa-regular { background: rgba(255,59,48,.12); color: var(--apple-red); }
        .stat-card.purple .stat-label .fa-solid,
        .stat-card.purple .stat-label .fa-regular { background: rgba(175,82,222,.12); color: var(--apple-purple); }
        .stat-card.teal   .stat-label .fa-solid,
        .stat-card.teal   .stat-label .fa-regular { background: rgba(48,176,199,.12); color: var(--apple-teal); }
        .stat-card.blue::after   { background: var(--apple-blue); }
        .stat-card.green::after  { background: var(--apple-green); }
        .stat-card.orange::after { background: var(--apple-orange); }
        .stat-card.red::after    { background: var(--apple-red); }
        .stat-card.purple::after { background: var(--apple-purple); }
        .stat-card.teal::after   { background: var(--apple-teal); }

        /* ===== 面板卡片 ===== */
        .panel-card {
            background: var(--apple-card);
            border-radius: var(--apple-radius-lg);
            padding: 24px;
            box-shadow: var(--apple-shadow);
            border: 1px solid var(--apple-border);
            margin-bottom: 20px;
            transition: box-shadow .2s ease;
        }
        .panel-card:hover { box-shadow: var(--apple-shadow-lg); }
        .panel-title {
            font-size: 16px; font-weight: 600;
            color: var(--apple-text);
            margin-bottom: 18px;
            display: flex; align-items: center;
            justify-content: space-between;
            flex-wrap: wrap; row-gap: 10px;
            letter-spacing: -0.01em;
        }
        .panel-title > span {
            display: inline-flex; align-items: center;
            gap: 10px; flex-wrap: wrap;
        }
        .panel-title .fa-solid, .panel-title .fa-regular {
            color: var(--apple-blue);
        }
        .panel-title .el-button, .panel-title > span .el-button { margin-left: 0; }

        /* ===== 全屏加载遮罩 ===== */
        .admin-loading-mask {
            position: fixed; inset: 0; z-index: 20100;
            background: rgba(245, 245, 247, 0.6);
            backdrop-filter: blur(6px);
            -webkit-backdrop-filter: blur(6px);
            display: flex; align-items: center; justify-content: center;
        }
        .admin-loading-inner {
            display: flex; flex-direction: column; align-items: center; gap: 14px;
            background: var(--apple-card);
            padding: 32px 44px;
            border-radius: var(--apple-radius-lg);
            box-shadow: var(--apple-shadow-lg);
            border: 1px solid var(--apple-border);
            color: var(--apple-text-2);
            font-size: 14px;
            font-weight: 500;
        }
        .admin-loading-spinner {
            width: 36px; height: 36px;
            border: 3px solid rgba(64, 158, 255, 0.14);
            border-top-color: var(--apple-blue);
            border-radius: 50%;
            animation: admin-spin .75s linear infinite;
        }
        @keyframes admin-spin { to { transform: rotate(360deg); } }

        /* ===== 列表 / 行项 ===== */
        .low-stock-item {
            display: flex; justify-content: space-between; align-items: center;
            padding: 13px 0;
            border-bottom: 1px solid var(--apple-border-2);
            font-size: 14px;
        }
        .low-stock-item:last-child { border-bottom: none; }
        .placeholder-card {
            background: var(--apple-card);
            border-radius: var(--apple-radius-lg);
            padding: 70px 0;
            box-shadow: var(--apple-shadow);
            border: 1px solid var(--apple-border);
        }
        .recent-item {
            display: flex; justify-content: space-between; align-items: center;
            padding: 14px 0;
            border-bottom: 1px solid var(--apple-border-2);
            font-size: 13px;
        }
        .recent-item:last-child { border-bottom: none; }
        .recent-item .order-no { color: var(--apple-text-2); font-family: "SF Mono", Consolas, monospace; }
        .recent-item .items {
            color: var(--apple-text-2);
            max-width: 260px; overflow: hidden;
            text-overflow: ellipsis; white-space: nowrap;
        }

        /* ===== 图库 / 角色权限 ===== */
        .media-toolbar {
            margin-bottom: 16px;
            display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
        }
        .media-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(168px, 1fr));
            gap: 14px;
        }
        .media-card {
            background: var(--apple-card);
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-md);
            overflow: hidden; cursor: pointer; position: relative;
            transition: all .2s ease;
        }
        .media-card:hover {
            border-color: var(--apple-blue);
            transform: translateY(-2px);
            box-shadow: var(--apple-shadow-lg);
        }
        .media-card.selected {
            border-color: var(--apple-blue);
            box-shadow: 0 0 0 3px rgba(64,158,255,.16);
        }
        .media-check { position: absolute; top: 8px; left: 8px; z-index: 2; }
        /* 图库选择器：点卡片=选择，放大走右下角放大镜（避免误触放大，见 previewPickerMedia 注释） */
        /* 【配色约束】12px 正文白底对比度必须 ≥4.0（ui_acceptance_test 会算）：
           别用 --apple-text-3（#8E8E93，仅 3.15），统一用 --apple-text-2（#6E6E73，5.07）。 */
        .picker-hint {
            display: flex; align-items: center; gap: 6px;
            margin-bottom: 10px; padding: 8px 10px; border-radius: var(--apple-radius-sm);
            background: rgba(64,158,255,.08); color: #1B5FB0; font-size: 12px;
        }
        .media-card-pick { cursor: pointer; }
        .media-zoom {
            position: absolute; right: 8px; bottom: 34px; z-index: 2;
            width: 26px; height: 26px; display: flex; align-items: center; justify-content: center;
            border: none; border-radius: 50%; cursor: zoom-in; color: #fff; font-size: 12px;
            background: rgba(0,0,0,.45); opacity: 0; transition: opacity .18s ease;
        }
        .media-card-pick:hover .media-zoom { opacity: 1; }
        .media-pick-tip {
            padding: 0 10px 10px; font-size: 11px; color: var(--apple-text-2);
        }
        .media-card-pick:hover .media-pick-tip { color: #1B5FB0; font-weight: 600; }
        /* 使用中/未使用标记（图库卡片右上角——图片上方，避免压住底部日期行 .media-meta） */
        .media-usage {
            position: absolute; top: 8px; right: 8px; bottom: auto; left: auto; z-index: 2;
            display: inline-flex; align-items: center; gap: 4px;
            padding: 1px 7px; border-radius: 999px; font-size: 11px; cursor: pointer;
            background: rgba(255,255,255,.92); border: 1px solid var(--apple-border);
        }
        .media-usage.on { color: #1B5FB0; border-color: rgba(27,95,176,.35); }
        .media-usage.off { color: #6E6E73; }
        .media-usage:hover { box-shadow: 0 1px 6px rgba(0,0,0,.14); }
        /* 「在哪里引用」抽屉 */
        .mr-head { display: flex; gap: 12px; align-items: center; margin-bottom: 14px; }
        .mr-thumb { width: 72px; height: 72px; object-fit: cover; border-radius: 10px; border: 1px solid var(--apple-border); }
        .mr-name { font-size: 14px; font-weight: 600; word-break: break-all; }
        .mr-sub { font-size: 12px; color: var(--apple-text-2); margin-top: 4px; }
        .mr-sub-free { color: #0B7A3B; }
        .mr-list { display: flex; flex-direction: column; gap: 8px; }
        .mr-item {
            display: flex; align-items: center; justify-content: space-between; gap: 10px;
            padding: 10px 12px; border: 1px solid var(--apple-border); border-radius: var(--apple-radius-sm);
            background: var(--apple-card);
        }
        .mr-item-main { display: flex; align-items: center; gap: 8px; min-width: 0; }
        .mr-item-name { font-size: 13px; color: var(--apple-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .mr-item-sub { color: var(--apple-text-2); }
        .media-thumb {
            width: 100%; height: 128px; object-fit: cover;
            display: block; background: var(--apple-bg);
        }
        .media-name {
            padding: 8px 10px 2px; font-size: 12px;
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
            color: var(--apple-text);
            font-weight: 500;
        }
        .media-meta {
            padding: 2px 10px 10px; font-size: 11px;
            color: var(--apple-text-2);
        }
        .media-actions {
            padding: 0 8px 8px; display: flex; gap: 4px;
        }

        /* ===== 图库文件夹管理（多级嵌套） ===== */
        .mf-tree { max-height: 420px; overflow-y: auto; }
        .mf-folder { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-bottom: 1px solid var(--apple-border); }
        .mf-folder:hover { background: rgba(64,158,255,.05); }
        .mf-folder-icon { color: var(--apple-text-2); font-size: 13px; width: 18px; flex-shrink: 0; }
        .mf-folder-name { flex: 1; min-width: 0; font-size: 13px; color: var(--apple-text); font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .mf-folder-count { font-size: 11px; color: var(--apple-text-2); flex-shrink: 0; }
        .mf-folder-actions { display: flex; gap: 4px; flex-shrink: 0; }
        .mf-empty { padding: 28px 0; text-align: center; color: var(--apple-text-2); font-size: 13px; }
        .mf-dialog-toolbar { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }

        /* ===== 图库文件夹浏览（默认根目录，点文件夹进入 + 面包屑 + 卡片） ===== */
        .media-crumb {
            display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
            margin: 0 0 14px; padding: 8px 12px;
            background: var(--apple-card); border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-sm); font-size: 13px;
        }
        .media-crumb .mc-item {
            display: inline-flex; align-items: center; gap: 5px;
            padding: 3px 8px; border-radius: 8px; cursor: pointer; color: var(--apple-text-2);
            transition: all .15s ease;
        }
        .media-crumb .mc-item:hover { background: rgba(64,158,255,.10); color: #1B5FB0; }
        .media-crumb .mc-item.on { color: var(--apple-text); font-weight: 600; background: rgba(64,158,255,.10); }
        .media-crumb .mc-sep { color: var(--apple-text-2); font-size: 11px; }
        .media-crumb .mc-tip { font-size: 12px; color: var(--apple-text-2); }
        .media-folder-grid {
            display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
            gap: 12px; margin-bottom: 16px;
        }
        .media-folder-card {
            display: flex; align-items: center; gap: 10px; padding: 12px 14px;
            background: var(--apple-card); border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-md); cursor: pointer; transition: all .18s ease;
        }
        .media-folder-card:hover { border-color: var(--apple-blue); box-shadow: var(--apple-shadow-lg); transform: translateY(-2px); }
        .media-folder-card > i { color: #F0A020; font-size: 20px; }
        .media-folder-card .mf-name {
            flex: 1; min-width: 0; font-size: 13px; font-weight: 600; color: var(--apple-text);
            overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
        }
        .media-folder-card .mf-count { font-size: 11px; color: var(--apple-text-2); flex-shrink: 0; }
        /* 删除进行中：卡片压暗 + 转圈，避免"点了没反应"的错觉（批量删除另有整块 loading） */
        .media-card.deleting { opacity: .55; pointer-events: none; }
        .media-deleting-mask {
            position: absolute; inset: 0; z-index: 3;
            display: flex; align-items: center; justify-content: center; gap: 8px;
            background: rgba(255,255,255,.72); color: #D93025; font-size: 13px; font-weight: 600;
        }
        .media-select-all { margin-right: 2px; }

        .prod-image-picker { display: flex; gap: 14px; align-items: flex-start; }
        .prod-image-box {
            width: 92px; height: 92px;
            border: 1.5px dashed rgba(134,134,139,.3);
            border-radius: var(--apple-radius-md);
            background: #FAFAFB;
            display: flex; align-items: center; justify-content: center;
            cursor: pointer; overflow: hidden; flex-shrink: 0;
            transition: all .18s ease;
        }
        .prod-image-box:hover {
            border-color: var(--apple-blue);
            background: rgba(64,158,255,.04);
        }
        .prod-image-box img {
            width: 100%; height: 100%; object-fit: cover; display: block;
        }
        .prod-gallery { display: flex; flex-wrap: wrap; gap: 12px; }
        .pg-item {
            position: relative; width: 92px;
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-md);
            overflow: hidden; background: #FAFAFB;
            transition: all .18s ease;
        }
        .pg-item.main {
            border-color: var(--apple-blue);
            box-shadow: 0 0 0 3px rgba(64,158,255,.16);
        }
        .pg-item:hover { box-shadow: var(--apple-shadow); }
        .pg-item img { width: 92px; height: 92px; object-fit: cover; display: block; }
        .pg-badge {
            position: absolute; left: 0; top: 0;
            background: var(--apple-blue); color: #fff; font-size: 10px;
            padding: 2px 8px; border-bottom-right-radius: var(--apple-radius-sm);
            font-weight: 600;
        }
        .pg-mask {
            position: absolute; left: 0; right: 0; bottom: 0;
            background: rgba(0,0,0,.55);
            display: flex; justify-content: center; gap: 2px;
            padding: 6px 0;
            opacity: 0; transition: opacity .18s ease;
        }
        .pg-item:hover .pg-mask { opacity: 1; }
        .pg-mask .el-button { color: #fff; font-size: 11px; }
        .pg-add {
            width: 92px; height: 92px;
            display: flex; align-items: center; justify-content: center;
            cursor: pointer;
        }
        .pg-hint { font-size: 12px; color: var(--apple-text-2); margin-left: 6px; }

        /* ===== 富文本 ===== */
        .rich-editor {
            width: 100%;
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-md);
            overflow: hidden; background: var(--apple-card);
        }
        .rich-editor .pd-toolbar {
            border-bottom: 1px solid var(--apple-border-2);
        }
        .rich-editor .pd-editor { height: 260px; overflow-y: auto; }
        .pd-import { margin-top: 8px; display: flex; align-items: center; gap: 10px; }
        .pd-import .el-progress { flex: 0 0 180px; }
        .pd-import-text { font-size: 12px; color: var(--apple-text-2); }
        .pd-import-ok { font-size: 12px; color: #0B7A3B; }
        .rich-content {
            font-size: 13px; line-height: 1.8;
            color: var(--apple-text-2);
        }
        .rich-content img {
            max-width: 100%; height: auto;
            border-radius: var(--apple-radius-sm);
            margin: 8px 0;
        }
        .rich-content p { margin: 6px 0; }
        .prod-image-empty {
            color: var(--apple-text-3); font-size: 12px;
            text-align: center; line-height: 1.5;
        }
        .prod-image-actions { display: flex; flex-direction: column; gap: 8px; }

        .scan-orphan-item {
            display: flex; align-items: center; gap: 12px;
            padding: 10px 12px;
            border: 1px solid var(--apple-border-2);
            border-radius: var(--apple-radius-md);
            margin-bottom: 10px;
            background: #FAFAFB;
        }
        .scan-orphan-item .scan-path {
            flex: 1; min-width: 0;
            font-size: 12px; color: var(--apple-text);
            overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
        }
        .scan-orphan-item .scan-meta {
            font-size: 11px; color: var(--apple-text-2); white-space: nowrap;
        }

        .perm-groups {
            max-height: 340px; overflow-y: auto;
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-md);
            padding: 12px 16px;
            background: #FAFAFB;
        }
        .perm-module {
            font-size: 13px; color: var(--apple-text);
            font-weight: 600; margin: 10px 0 6px;
        }

        /* ===== 用户 / 角色：经营数据 ===== */
        .biz-sum {
            font-size: 13px; color: var(--apple-text);
            line-height: 1.8;
        }
        .biz-sum .sep { color: var(--apple-border); margin: 0 6px; }
        .biz-sum b { color: var(--apple-blue); }
        .biz-sum b.money { color: var(--apple-red); }
        .biz-sum.sub { font-size: 12px; color: var(--apple-text-2); }
        .biz-none { color: var(--apple-text-3); }
        .biz-expand {
            padding: 10px 16px 14px;
            background: #FAFAFB;
            border-radius: 0 0 var(--apple-radius-md) var(--apple-radius-md);
        }
        .biz-block + .biz-block { margin-top: 14px; }
        .biz-title {
            font-size: 13px; font-weight: 600;
            color: var(--apple-text);
            margin-bottom: 10px;
        }
        .biz-grid {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(116px, 1fr));
            gap: 10px;
        }
        .biz-item {
            background: var(--apple-card);
            border: 1px solid var(--apple-border);
            border-radius: var(--apple-radius-sm);
            padding: 10px 12px;
            transition: all .18s ease;
        }
        .biz-item:hover { box-shadow: var(--apple-shadow); }
        .biz-item .k { font-size: 12px; color: var(--apple-text-2); }
        .biz-item .v {
            font-size: 16px; font-weight: 600;
            color: var(--apple-text); margin-top: 4px;
            letter-spacing: -0.01em;
        }
        .biz-item .v.money { color: var(--apple-red); }
        .biz-empty {
            padding: 12px 14px;
            font-size: 12px; color: var(--apple-text-2);
            background: var(--apple-bg);
            border-radius: var(--apple-radius-sm);
        }

        /* ============================================================================
           Apple Card UI v2 —— 覆盖层（Override Layer）
           规范：docs/UI_APPLE_V2_SPEC.md（§1 令牌 / §2 组件配方 / §3.3 管理后台）
           - 令牌 --apple-* 已在文件顶部 :root 按 v2 重新定义，本层直接复用，不再另起一套。
           - 本层位于 <style> 末尾，用相同或更高特异度覆盖上方 v1 声明；
             凡是 v1 用了 !important 的，这里也必须 !important（同特异度下后写者胜）。
           - 目标：打破旧「蓝色渐变卡片皮」，统一到克制的 Apple「液态玻璃 + 纸面卡片」语言。
           ============================================================================ */

        /* ---- 1. Element Plus 内置变量覆盖（一处生效，全组件跟随） ---- */
        :root {
            --el-color-primary: #0071E3;
            --el-color-primary-light-3: #3A90EA;
            --el-color-primary-light-5: #66AAF0;
            --el-color-primary-light-7: #99C6F4;
            --el-color-primary-light-8: #B3D4F7;
            --el-color-primary-light-9: #E6F1FC;
            --el-color-primary-dark-2: #005AB6;
            --el-border-radius-base: 12px;
            --el-border-radius-small: 10px;
            --el-border-radius-round: 999px;
            --el-border-color: rgba(0, 0, 0, .12);
            --el-border-color-light: rgba(0, 0, 0, .08);
            --el-border-color-lighter: rgba(0, 0, 0, .06);
            --el-border-color-extra-light: rgba(0, 0, 0, .04);
            --el-text-color-primary: #1D1D1F;
            --el-text-color-regular: #6E6E73;
            --el-text-color-secondary: #8E8E93;
            --el-text-color-placeholder: #6E6E73;
            --el-font-family: var(--apple-font);
            --el-fill-color-light: #F7F7F9;
            --el-fill-color-lighter: #FAFAFB;
            --el-fill-color-blank: #FFFFFF;
            --el-bg-color: #FFFFFF;
            --el-bg-color-page: #F5F5F7;
            --el-box-shadow-light: 0 1px 2px rgba(16, 24, 40, .04), 0 12px 28px -14px rgba(16, 24, 40, .18);
            --el-box-shadow: 0 2px 6px rgba(16, 24, 40, .06), 0 24px 48px -20px rgba(16, 24, 40, .30);
            --el-overlay-color-lighter: rgba(0, 0, 0, .28);
            --el-mask-color: rgba(255, 255, 255, .72);
            --el-menu-item-height: 44px;
        }

        /* ---- 2. 页面画布与字体 ---- */
        html, body {
            font-family: var(--apple-font);
            background: var(--apple-bg);
            color: var(--apple-text);
        }
        .admin-main { background: var(--apple-bg) !important; }

        /* ---- 3. 应用外壳：深墨侧边栏 ---- */
        .admin-aside {
            background: linear-gradient(180deg, #17171A, #0B0B0F) !important;
            background-color: #0B0B0F !important;
            backdrop-filter: none !important;
            -webkit-backdrop-filter: none !important;
            border-right: none !important;
            color: rgba(255, 255, 255, .66);
        }
        /* 品牌区 */
        .admin-aside .admin-logo {
            height: 64px;
            padding: 0 12px;
            color: #FFFFFF !important;
            border-bottom: 1px solid rgba(255, 255, 255, .08) !important;
        }
        .admin-aside .admin-logo .logo-text {
            color: #FFFFFF;
            font-weight: 700;
            letter-spacing: -.02em;
        }
        .admin-aside .admin-logo .logo-emoji {
            background: var(--apple-blue) !important;   /* 去蓝色渐变 → 扁平语义色 */
            box-shadow: none !important;
            color: #FFFFFF;
            font-size: 17px;
            width: 34px; height: 34px;
            border-radius: 10px;
            flex-shrink: 0;
        }
        .admin-aside .admin-logo .logo-img {
            max-width: 100%; height: 34px; object-fit: contain;
        }
        /* 菜单：Element Plus 变量 + 类名双保险（不改模板 props） */
        .admin-aside .el-menu,
        .admin-aside .admin-menu {
            --el-menu-bg-color: transparent;
            --el-menu-text-color: rgba(255, 255, 255, .66);
            --el-menu-hover-text-color: #FFFFFF;
            --el-menu-active-color: #FFFFFF;
            --el-menu-hover-bg-color: rgba(255, 255, 255, .07);
            --el-menu-border-color: transparent;
            background: transparent !important;
            border-right: none !important;
        }
        .admin-aside .admin-menu {
            padding: 10px 0 !important;
            scrollbar-width: thin;
            scrollbar-color: rgba(255, 255, 255, .16) transparent;
        }
        .admin-aside .admin-menu::-webkit-scrollbar { width: 6px; }
        .admin-aside .admin-menu::-webkit-scrollbar-track { background: transparent; }
        .admin-aside .admin-menu::-webkit-scrollbar-thumb {
            background: rgba(255, 255, 255, .16); border-radius: 999px;
        }
        .admin-aside .admin-menu .el-menu-item,
        .admin-aside .admin-menu .el-sub-menu__title {
            height: 44px !important;
            line-height: 44px !important;
            margin: 2px 10px !important;
            border-radius: 12px !important;
            color: rgba(255, 255, 255, .66) !important;
            font-weight: 500 !important;
            position: relative;
            transition: background .16s ease, color .16s ease;
        }
        .admin-aside .admin-menu .el-menu-item .el-icon,
        .admin-aside .admin-menu .el-sub-menu__title .el-icon {
            margin-right: 10px !important;
            font-size: 18px !important;
            width: 18px !important;
            color: rgba(255, 255, 255, .70) !important;
        }
        .admin-aside .admin-menu .el-menu-item:hover,
        .admin-aside .admin-menu .el-sub-menu__title:hover {
            background: rgba(255, 255, 255, .07) !important;
            color: #FFFFFF !important;
        }
        .admin-aside .admin-menu .el-menu-item:hover .el-icon,
        .admin-aside .admin-menu .el-sub-menu__title:hover .el-icon { color: #FFFFFF !important; }
        .admin-aside .admin-menu .el-menu-item.is-active {
            background: rgba(255, 255, 255, .10) !important;
            color: #FFFFFF !important;
            font-weight: 600 !important;
        }
        .admin-aside .admin-menu .el-menu-item.is-active .el-icon { color: #FFFFFF !important; }
        /* 选中项左侧 3px accent 指示条 */
        .admin-aside .admin-menu .el-menu-item.is-active::before {
            content: '';
            position: absolute; left: 0; top: 50%;
            transform: translateY(-50%);
            width: 3px; height: 20px;
            border-radius: 0 3px 3px 0;
            background: var(--apple-blue);
        }
        /* 折叠态（64px，宽度仍由模板 :width 绑定驱动，这里只修内部排版） */
        .admin-aside .admin-menu.el-menu--collapse { width: 100% !important; }
        .admin-aside .admin-menu.el-menu--collapse .el-menu-item,
        .admin-aside .admin-menu.el-menu--collapse .el-sub-menu__title {
            margin: 2px 8px !important;
            padding: 0 !important;
            display: flex !important;
            align-items: center !important;
            justify-content: center !important;
        }
        .admin-aside .admin-menu.el-menu--collapse .el-menu-item .el-icon,
        .admin-aside .admin-menu.el-menu--collapse .el-sub-menu__title .el-icon {
            margin-right: 0 !important;
        }
        .admin-aside .admin-menu.el-menu--collapse .el-menu-item.is-active::before { left: -8px; }

        /* ---- 4. 顶栏：毛玻璃 sticky ---- */
        .admin-header {
            background: rgba(255, 255, 255, .72) !important;
            backdrop-filter: blur(24px) saturate(180%) !important;
            -webkit-backdrop-filter: blur(24px) saturate(180%) !important;
            border-bottom: 1px solid var(--apple-hairline) !important;
            height: 64px !important;
            position: sticky; top: 0; z-index: 20;
        }
        .header-title { font-size: 17px !important; font-weight: 700 !important; letter-spacing: -.02em; color: var(--apple-ink); }
        .header-name {
            background: var(--apple-surface-2) !important;
            border-radius: var(--apple-radius-pill) !important;
            color: var(--apple-text) !important;
            font-weight: 600 !important;
        }
        .collapse-btn { border-radius: 12px !important; }
        .collapse-btn:hover { background: var(--apple-surface-3) !important; }

        /* ---- 5. 卡片 / 面板：22px + 两层阴影 + hairline ---- */
        .stat-card, .panel-card, .panel, .placeholder-card, .installer-card,
        .el-card, .admin-loading-inner, .media-card {
            background: var(--apple-card) !important;
            border: 1px solid var(--apple-hairline) !important;
            border-radius: 22px !important;
            box-shadow: var(--apple-shadow) !important;
        }
        .panel-card, .panel { padding: 18px !important; }
        .stat-card:hover, .panel-card:hover, .media-card:hover {
            box-shadow: var(--apple-shadow-lg) !important;
        }
        /* 小型内嵌瓦片：更紧凑的圆角（16px），同样两层阴影 + hairline */
        .biz-item, .pg-item, .prod-image-box, .biz-expand, .scan-orphan-item,
        .perm-groups, .rich-editor, .el-tabs--border-card, .login-box .installer-card {
            border: 1px solid var(--apple-hairline) !important;
            border-radius: var(--apple-radius-md) !important;
            background: var(--apple-card) !important;
        }
        .biz-item, .scan-orphan-item, .biz-expand { background: var(--apple-surface-2) !important; }
        .panel-title {
            font-size: 15px !important;
            font-weight: 700 !important;
            color: var(--apple-ink) !important;
            letter-spacing: -.02em;
        }
        /* 标题图标落在 accent chip 内（不再裸放 emoji）。
           用子选择器限定作用域，避免把标题行里按钮的图标也套上 chip */
        .panel-title > .fa-solid, .panel-title > .fa-regular,
        .panel-title > span > .fa-solid, .panel-title > span > .fa-regular {
            width: 26px; height: 26px;
            border-radius: 8px;
            display: inline-flex; align-items: center; justify-content: center;
            font-size: 12px;
            background: var(--apple-blue-soft) !important;
            color: var(--apple-blue) !important;
            flex-shrink: 0;
        }
        .panel-title .el-button .fa-solid,
        .panel-title .el-button .fa-regular { color: inherit !important; }
        .el-button > .fa-solid, .el-button > .fa-regular { margin-right: 5px; }

        /* ---- 5.x 页面工具栏按钮：统一位置与间距 ---------------------------------
           规范：每个面板标题行 = 左「标题」，右「操作按钮组」，按钮顺序固定为
                 ① 刷新 → ② 上传 / 新增 → ③ 批量删除（危险操作永远最右）
           以前各页写法不一：订单页把按钮直接裸放在 .panel-title 里（和标题被
           space-between 摊开），用户页把按钮组包进 <span> 但顺序是「新增→刷新」，
           图库页是「上传→刷新」。这里用 .panel-actions 统一成一个右对齐的按钮组。 */
        .panel-actions {
            display: inline-flex;
            align-items: center;
            gap: 8px;
            flex-wrap: wrap;
            margin-left: auto;          /* 靠右 */
        }
        .panel-actions .el-button { margin-left: 0 !important; }
        /* 标题行允许换行时按钮组整体下移到下一行右对齐 */
        .panel-title { display: flex; align-items: center; flex-wrap: wrap; row-gap: 10px; }

        /* 顶栏「折叠/展开侧边栏」图标按钮（替代原来的「菜单」文字） */
        .collapse-btn .el-icon { font-size: 19px; }
        .collapse-btn { color: var(--apple-text-2) !important; }
        .collapse-btn:hover { color: var(--apple-text) !important; }

        /* 顶栏身份块：头像 + 昵称 + 单个主身份标签，整块作为一个视觉单元 */
        .header-user {
            display: inline-flex;
            align-items: center;
            gap: 8px;
            padding: 4px 10px 4px 4px;
            border-radius: 999px;
            background: var(--apple-surface-2);
            border: 1px solid var(--apple-hairline);
        }
        .header-user .el-avatar { flex-shrink: 0; }
        .header-user .role-tag { margin: 0 !important; }
        .settings-secret-tip { font-size: 12px; color: #8E8E93; line-height: 1.5; margin-top: 4px; }
        /* 「登录与注册」分组：固定启用标记 + 每项说明（对比度按 #5A5A5F 保证达标） */
        /* 用户列表：头像+昵称两行紧凑排布（原来昵称/手机号占两列） */
        .user-cell { display: flex; align-items: center; gap: 8px; }
        .user-cell .el-avatar { flex-shrink: 0; }
        .user-cell-main { min-width: 0; }
        .user-cell-name { font-weight: 600; color: #1D1D1F; line-height: 1.35; }
        /* 【对比度】12px 正文必须 ≥4.0，#8E8E93 在白底只有 3.26 → 统一用 --apple-text-2 (#6E6E73, 5.07)。
           ui_acceptance_test 的 body_contrast_ok 会按 WCAG 逐节点校验（AGENTS 铁律 5/39-5）。 */
        .user-cell-sub { font-size: 12px; color: #6E6E73; line-height: 1.35; }
        /* 业务档案列：两行紧凑标签 */
        .pf-line { display: flex; align-items: center; justify-content: center; gap: 4px; margin: 2px 0; }
        .pf-role { font-size: 12px; color: #6E6E73; }
        .pf-none { font-size: 12px; color: #6E6E73; }
        /* 用户详情抽屉 */
        .ud-wrap { padding-bottom: 20px; }
        .ud-head { display: flex; align-items: center; gap: 14px; margin-bottom: 16px; }
        .ud-head-main { min-width: 0; }
        .ud-name { font-size: 17px; font-weight: 700; color: #1D1D1F; }
        .ud-phone { font-size: 13px; color: #6E6E73; margin-top: 2px; }
        .ud-tags { margin-top: 6px; }
        .ud-desc { margin-bottom: 18px; }
        .ud-section { margin-bottom: 18px; }
        .ud-section-title { font-size: 14px; font-weight: 700; color: #1D1D1F; margin-bottom: 8px; }
        .ud-empty { font-size: 12.5px; line-height: 1.7; color: #5A5A5F; background: #F5F5F7; border-radius: 10px; padding: 10px 12px; }
        .ud-actions { display: flex; flex-wrap: wrap; gap: 8px; }
        /* 商品列表：缩略图+名称两行紧凑排布（原来 图片/名称/规格/分类 占四列） */
        .pd-cell { display: flex; align-items: center; gap: 8px; }
        .pd-cell .thumb-img { flex-shrink: 0; }
        .pd-cell-main { min-width: 0; }
        .pd-cell-name { font-weight: 600; color: #1D1D1F; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
        .pd-cell-sub { font-size: 12px; color: #6E6E73; line-height: 1.45; }
        /* 商品详情抽屉 */
        .pd-detail-img { width: 64px; height: 64px; object-fit: cover; border-radius: 12px; cursor: zoom-in; flex-shrink: 0; }
        .pd-detail-gallery { display: flex; flex-wrap: wrap; gap: 8px; }
        .pd-detail-thumb { width: 76px; height: 76px; object-fit: cover; border-radius: 10px; cursor: zoom-in; border: 1px solid #E5E5EA; }
        .pd-detail-rich { font-size: 13px; line-height: 1.75; color: #1D1D1F; max-height: 320px; overflow: auto; background: #F5F5F7; border-radius: 10px; padding: 10px 12px; }
        .pd-detail-rich img { max-width: 100%; height: auto; border-radius: 8px; }
        /* 用户反馈详情抽屉：正文与已回复区块（复用 ud-* 骨架） */
        .fb-detail-content { font-size: 13.5px; line-height: 1.8; color: #1D1D1F; background: #F5F5F7; border-radius: 10px; padding: 12px 14px; white-space: pre-wrap; word-break: break-word; }
        .fb-detail-reply { margin-top: 12px; font-size: 13px; line-height: 1.75; color: #1D1D1F; background: #E8F1FD; border-radius: 10px; padding: 10px 12px; white-space: pre-wrap; word-break: break-word; }
        .fb-detail-reply-h { font-weight: 700; color: #0071E3; margin-bottom: 6px; }
        /* 通知模板预览：邮件 iframe + 短信气泡 + 站内信卡片 */
        .tpl-head { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 14px; }
        .tpl-section { margin-bottom: 22px; }
        .tpl-title { font-size: 14px; font-weight: 700; color: #1D1D1F; margin-bottom: 8px; }
        .tpl-title .fa-solid { color: var(--apple-blue); margin-right: 6px; }
        .tpl-subject { font-size: 13px; color: #1D1D1F; background: #F5F5F7; border-radius: 8px; padding: 8px 10px; word-break: break-all; }
        .tpl-note { font-size: 12px; line-height: 1.7; color: #6E6E73; margin-top: 6px; }
        .tpl-frame { width: 100%; height: 460px; border: 1px solid #E5E5EA; border-radius: 12px; margin-top: 10px; background: #fff; }
        .tpl-pre { font-size: 12px; line-height: 1.7; color: #5A5A5F; white-space: pre-wrap; word-break: break-all; margin: 0; max-height: 260px; overflow: auto; }
        /* 短信气泡：绿底白字尽量贴近手机短信观感 */
        .tpl-phone { background: #F5F5F7; border-radius: 12px; padding: 14px; }
        .tpl-phone-body { display: inline-block; max-width: 100%; background: #1FA84C; color: #FFFFFF; font-size: 13px; line-height: 1.7; padding: 10px 14px; border-radius: 14px; word-break: break-all; }
        .tpl-inapp { border: 1px solid #E5E5EA; border-radius: 12px; padding: 12px 14px; }
        .tpl-inapp-title { font-size: 14px; font-weight: 600; color: #1D1D1F; margin: 8px 0 4px; }
        .tpl-inapp-body { font-size: 13px; line-height: 1.7; color: #5A5A5F; }
        /* 桶列表：「桶码」主行（原 ID/桶码/类型 三列合一） */
        .bk-code { font-weight: 600; color: #1D1D1F; line-height: 1.35; word-break: break-all; }
        .settings-lock-tip { margin-left: 10px; font-size: 12px; color: #5A5A5F; }
        .settings-lock-tip i { color: #C77700; }
        .settings-hint { font-size: 12px; color: #5A5A5F; line-height: 1.6; margin-top: 4px; max-width: 680px; }
        /* Element 的 el-alert__title 默认 #909399，落在 #f4f4f5 上对比度只有 2.9（低于 WCAG 3.0 底线）。
           这里的说明文字是给运营看的正文，必须拉到达标色。 */
        .el-alert--info.is-light .el-alert__title { color: #5A5A5F !important; }
        .el-alert--info.is-light .el-alert__description { color: #5A5A5F !important; }

        .biz-title { font-size: 13px !important; font-weight: 700 !important; color: var(--apple-ink) !important; }
        .biz-title .fa-solid, .biz-title .fa-regular { color: var(--apple-blue); margin-right: 6px; }

        /* ---- 6. KPI 统计卡 ---- */
        .stat-card { padding: 20px 22px !important; }
        .stat-card::after { opacity: .06 !important; }
        .stat-card .stat-label {
            font-size: 12.5px !important;
            color: var(--apple-text-2) !important;
            font-weight: 600 !important;
            letter-spacing: 0 !important;
        }
        .stat-card .stat-label .fa-solid,
        .stat-card .stat-label .fa-regular {
            width: 40px !important; height: 40px !important;
            border-radius: 12px !important;
            font-size: 15px !important;
            flex-shrink: 0;
        }
        .stat-card .stat-value {
            font-size: 30px !important;
            font-weight: 800 !important;
            letter-spacing: -.025em !important;
            font-variant-numeric: tabular-nums;
            color: var(--apple-ink);
            margin-top: 12px !important;
        }
        .stat-card .stat-sub { font-size: 12px !important; color: var(--apple-text-2) !important; }
        /* 语义 accent 映射（v2 色值）：图标 chip 必有底色，不留裸卡 */
        .stat-card .stat-label .fa-solid,
        .stat-card .stat-label .fa-regular { background: var(--apple-blue-soft); color: var(--apple-blue); }
        .stat-card .stat-value { color: var(--apple-blue); }
        .stat-card.blue   .stat-value { color: var(--apple-blue) !important; }
        .stat-card.blue   .stat-label .fa-solid,
        .stat-card.blue   .stat-label .fa-regular { background: rgba(0,113,227,.12) !important; color: var(--apple-blue) !important; }
        .stat-card.green  .stat-value { color: #1F9D45 !important; }
        .stat-card.green  .stat-label .fa-solid,
        .stat-card.green  .stat-label .fa-regular { background: rgba(48,209,88,.14) !important; color: #1F9D45 !important; }
        .stat-card.orange .stat-value { color: #C77700 !important; }
        .stat-card.orange .stat-label .fa-solid,
        .stat-card.orange .stat-label .fa-regular { background: rgba(255,159,10,.14) !important; color: #C77700 !important; }
        .stat-card.red    .stat-value { color: #D70015 !important; }
        .stat-card.red    .stat-label .fa-solid,
        .stat-card.red    .stat-label .fa-regular { background: rgba(255,59,48,.12) !important; color: #D70015 !important; }
        .stat-card.purple .stat-value { color: var(--apple-purple) !important; }
        .stat-card.purple .stat-label .fa-solid,
        .stat-card.purple .stat-label .fa-regular { background: rgba(175,82,222,.12) !important; color: var(--apple-purple) !important; }
        .stat-card.teal   .stat-value { color: #17839A !important; }
        /* 注：teal 的 --apple-teal (#30B0C7) 在白色卡面上只有 2.57:1（<3.0 = 看不见档），
           故数值文字用同族深一档 #17839A（≈4.4:1）；图标 chip / 装饰圆仍用规范令牌色。 */
        .stat-card.teal   .stat-label .fa-solid,
        .stat-card.teal   .stat-label .fa-regular { background: rgba(48,176,199,.14) !important; color: var(--apple-teal) !important; }
        .stat-card.blue::after   { background: var(--apple-blue) !important; }
        .stat-card.green::after  { background: var(--apple-green) !important; }
        .stat-card.orange::after { background: var(--apple-orange) !important; }
        .stat-card.red::after    { background: var(--apple-red) !important; }
        .stat-card.purple::after { background: var(--apple-purple) !important; }
        .stat-card.teal::after   { background: var(--apple-teal) !important; }

        /* ---- 7. 表格：透明表头 + 52px 行高 + 无竖线 ---- */
        .el-table {
            --el-table-border-color: var(--apple-hairline);
            --el-table-border: 1px solid var(--apple-hairline);
            --el-table-header-bg-color: transparent;
            --el-table-header-text-color: var(--apple-text-2);
            --el-table-text-color: var(--apple-text);
            --el-table-row-hover-bg-color: var(--apple-surface-2);
            --el-table-bg-color: transparent;
            --el-table-tr-bg-color: transparent;
            background-color: transparent !important;
            border-radius: var(--apple-radius-md) !important;
        }
        .el-table th.el-table__cell {
            background: transparent !important;
            color: var(--apple-text-2) !important;
            font-size: 12px !important;
            font-weight: 600 !important;
            border-bottom: 1px solid var(--apple-hairline) !important;
            padding: 8px 0 !important;
        }
        .el-table td.el-table__cell {
            border-bottom: 1px solid var(--apple-hairline) !important;
            color: var(--apple-text) !important;
            font-size: 13px;
            padding: 14px 0 !important;
        }
        .el-table .el-table__row { height: 52px; }
        .el-table .el-table__row:hover > td.el-table__cell {
            background: var(--apple-surface-2) !important;
        }
        /* 去掉 Element 默认的底部横线 / 竖线 */
        .el-table::before,
        .el-table__inner-wrapper::before,
        .el-table--border::after,
        .el-table--group::after {
            display: none !important;
            content: none !important;
            background: transparent !important;
        }
        .el-table--border .el-table__cell,
        .el-table--border th.el-table__cell,
        .el-table--border td.el-table__cell { border-right: none !important; }
        .el-table--border, .el-table--group {
            border: none !important;
            border-radius: var(--apple-radius-md) !important;
        }
        .el-table__empty-text { color: var(--apple-text-2) !important; }
        .el-table tr:last-child td { border-bottom: none !important; }

        /* ---- 8. 按钮 / 输入 / 选择 / 标签 ---- */
        .el-button {
            border-radius: var(--apple-radius-sm) !important;
            font-weight: 600 !important;
        }
        /* 语义实心按钮用 700（规范 §2.8「主按钮 font-weight:700」）：
           既符合 v2 语言，也让白字标签在实心语义底上达到"粗体非正文"的对比度豁免档。 */
        .el-button--primary, .el-button--success, .el-button--warning, .el-button--danger {
            font-weight: 700 !important;
        }
        .el-button--small { border-radius: 10px !important; }
        .el-button--primary {
            background: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
            box-shadow: 0 1px 2px rgba(0, 113, 227, .24), 0 8px 20px -10px rgba(0, 113, 227, .5);
        }
        .el-button--primary:hover,
        .el-button--primary:focus {
            background: #0077ED !important;
            border-color: #0077ED !important;
        }
        /* v1 的 !important 会把 plain/link/text 也刷成实心，这里按 v2 语言复位 */
        .el-button--primary.is-plain {
            background: var(--apple-blue-soft) !important;
            border-color: rgba(0, 113, 227, .24) !important;
            color: var(--apple-blue) !important;
            box-shadow: none !important;
        }
        .el-button--primary.is-plain:hover {
            background: rgba(0, 113, 227, .16) !important;
            border-color: rgba(0, 113, 227, .34) !important;
            color: var(--apple-blue) !important;
        }
        .el-button--primary.is-link,
        .el-button--primary.is-text {
            background: transparent !important;
            border-color: transparent !important;
            box-shadow: none !important;
            color: var(--apple-blue) !important;
        }
        .el-button--success.is-plain {
            background: rgba(48, 209, 88, .12) !important;
            border-color: rgba(48, 209, 88, .28) !important;
            color: #1F9D45 !important;
        }
        .el-button--danger.is-plain {
            background: rgba(255, 59, 48, .10) !important;
            border-color: rgba(255, 59, 48, .24) !important;
            color: #D70015 !important;
        }
        .el-button--warning.is-plain {
            background: rgba(255, 159, 10, .12) !important;
            border-color: rgba(255, 159, 10, .28) !important;
            color: #C77700 !important;
        }
        .el-button--success { background: #1F9D45 !important; border-color: #1F9D45 !important; }
        .el-button--warning { background: #C77700 !important; border-color: #C77700 !important; }
        .el-button--danger  { background: #D70015 !important; border-color: #D70015 !important; }
        /* link / text 变体必须复位：v1 的 `.el-button--danger{background:…!important}` 会把
           `link type="danger"` 刷成实心红底，而 EP 仍按 link 用浅红字 → 红字压红底（对比度 ~1.9）。 */
        .el-button--danger.is-link, .el-button--danger.is-text {
            background: transparent !important; border-color: transparent !important;
            box-shadow: none !important; color: #D70015 !important;
        }
        .el-button--success.is-link, .el-button--success.is-text {
            background: transparent !important; border-color: transparent !important;
            box-shadow: none !important; color: #1F9D45 !important;
        }
        .el-button--warning.is-link, .el-button--warning.is-text {
            background: transparent !important; border-color: transparent !important;
            box-shadow: none !important; color: #C77700 !important;
        }
        .el-button--info.is-link, .el-button--info.is-text {
            background: transparent !important; border-color: transparent !important;
            box-shadow: none !important; color: var(--apple-text-2) !important;
        }

        /* v1 遗留的内联低对比度灰（#c0c4cc ≈1.75:1、#909399 ≈3.11:1，白底上几乎看不见）
           已逐处把模板里的 21 个 `color:#c0c4cc` / `color:#909399` 换成 v2 次要文字令牌
           var(--apple-text-2)（#6E6E73，≈4.9:1）。
           注：不能用 [style*="#c0c4cc"] 这类属性选择器 —— Vue 在渲染时会把静态 style 解析成
           独立属性并由浏览器序列化成 `color: rgb(192, 196, 204)`，十六进制串在 DOM 里根本不存在。 */

        .el-input__wrapper,
        .el-textarea__inner,
        .el-select__wrapper,
        .el-date-editor.el-input__wrapper,
        .el-input-number .el-input__wrapper,
        .el-range-editor.el-input__wrapper {
            border-radius: var(--apple-radius-sm) !important;
            background-color: var(--apple-surface-2) !important;
            box-shadow: 0 0 0 1px var(--apple-hairline) inset !important;
            transition: box-shadow .18s ease, background-color .18s ease !important;
        }
        .el-input__wrapper.is-focus,
        .el-input__wrapper.is-focused,
        .el-select__wrapper.is-focus,
        .el-select__wrapper.is-focused,
        .el-textarea__inner:focus,
        .el-range-editor.is-active {
            background-color: #FFFFFF !important;
            box-shadow: 0 0 0 1px var(--apple-blue) inset,
                        0 0 0 3px rgba(0, 113, 227, .12) !important;
        }
        .el-input__inner, .el-textarea__inner { color: var(--apple-text) !important; }
        .el-input__inner::placeholder, .el-textarea__inner::placeholder { color: var(--apple-text-3) !important; }
        .el-form-item__label { color: var(--apple-text) !important; }
        .el-checkbox__inner { border-radius: 6px !important; }
        .el-checkbox__input.is-checked .el-checkbox__inner,
        .el-checkbox__input.is-indeterminate .el-checkbox__inner {
            background-color: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
        }
        .el-radio__input.is-checked .el-radio__inner {
            background: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
        }
        .el-radio-button:first-child .el-radio-button__inner {
            border-radius: var(--apple-radius-sm) 0 0 var(--apple-radius-sm) !important;
        }
        .el-radio-button:last-child .el-radio-button__inner {
            border-radius: 0 var(--apple-radius-sm) var(--apple-radius-sm) 0 !important;
        }
        .el-switch.is-checked .el-switch__core {
            background-color: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
        }
        /* 标签 → pill */
        .el-tag {
            border-radius: var(--apple-radius-pill) !important;
            padding: 0 10px !important;
            height: 22px !important;
            line-height: 20px !important;
            font-size: 11.5px !important;
            font-weight: 700 !important;
            border: 1px solid transparent !important;
        }
        .el-tag--primary, .el-tag--info.is-primary {
            background: rgba(0, 113, 227, .10) !important;
            border-color: rgba(0, 113, 227, .18) !important;
            color: #0A6BCD !important;
        }
        .el-tag--success { background: rgba(48, 209, 88, .14) !important; border-color: rgba(48, 209, 88, .22) !important; color: #1F9D45 !important; }
        .el-tag--warning { background: rgba(255, 159, 10, .14) !important; border-color: rgba(255, 159, 10, .22) !important; color: #C77700 !important; }
        .el-tag--danger  { background: rgba(255, 59, 48, .12) !important; border-color: rgba(255, 59, 48, .20) !important; color: #D70015 !important; }
        .el-tag--info    { background: rgba(110, 110, 115, .10) !important; border-color: rgba(110, 110, 115, .18) !important; color: var(--apple-text-2) !important; }
        .el-avatar { background: var(--apple-blue-soft) !important; color: var(--apple-blue) !important; font-weight: 700; }
        .el-badge__content { border-radius: var(--apple-radius-pill) !important; }

        /* ---- 9. Dialog / Drawer / MessageBox / 浮层 ---- */
        .el-overlay { background-color: rgba(0, 0, 0, .28) !important; }
        .el-dialog {
            border-radius: 22px !important;
            border: 1px solid var(--apple-hairline) !important;
            box-shadow: var(--apple-shadow-lg) !important;
            overflow: hidden !important;
        }
        .el-dialog__header { padding: 20px 24px 12px !important; margin-right: 0 !important; }
        .el-dialog__title { font-size: 17px !important; font-weight: 700 !important; color: var(--apple-ink) !important; letter-spacing: -.02em; }
        .el-dialog__body { padding: 8px 24px 20px !important; color: var(--apple-text) !important; }
        .el-dialog__footer { padding: 8px 24px 22px !important; }
        .el-drawer {
            border-radius: 22px 0 0 22px !important;
            box-shadow: var(--apple-shadow-lg) !important;
        }
        .el-drawer__header {
            margin-bottom: 0 !important;
            padding: 20px 24px !important;
            border-bottom: 1px solid var(--apple-hairline);
            color: var(--apple-ink) !important;
        }
        .el-drawer__title { font-size: 17px !important; font-weight: 700 !important; color: var(--apple-ink) !important; letter-spacing: -.02em; }
        .el-drawer__body { padding: 22px !important; }
        .el-message-box {
            border-radius: 22px !important;
            border: 1px solid var(--apple-hairline) !important;
            box-shadow: var(--apple-shadow-lg) !important;
            padding-bottom: 12px;
        }
        .el-message-box__title { font-size: 17px !important; font-weight: 700 !important; color: var(--apple-ink) !important; }
        .el-message-box__content { color: var(--apple-text) !important; }
        .el-message, .el-notification {
            border-radius: 14px !important;
            border: 1px solid var(--apple-hairline) !important;
            box-shadow: var(--apple-shadow) !important;
        }
        /* EP 默认的语义提示文字太浅（success #67C23A 在 #F0F9EB 上仅 2.08:1，等于看不见）
           → 换成同族深档，白底/浅底上均 >=4.5:1 */
        .el-message--success .el-message__content,
        .el-notification--success .el-notification__content { color: #17803A !important; }
        .el-message--warning .el-message__content,
        .el-notification--warning .el-notification__content { color: #9A5B00 !important; }
        .el-message--error .el-message__content,
        .el-notification--error .el-notification__content { color: #D70015 !important; }
        .el-message--info .el-message__content,
        .el-notification--info .el-notification__content { color: var(--apple-text-2) !important; }
        .el-popper.is-light {
            border-radius: 14px !important;
            border-color: var(--apple-hairline) !important;
            box-shadow: var(--apple-shadow-lg) !important;
        }
        .el-dropdown-menu { padding: 6px !important; }
        .el-dropdown-menu__item {
            border-radius: 10px !important;
            font-size: 13px;
        }
        .el-dropdown-menu__item:not(.is-disabled):hover {
            background: var(--apple-surface-2) !important;
            color: var(--apple-ink) !important;
        }
        .el-select-dropdown__item {
            border-radius: 10px !important;
            margin: 2px 6px;
            font-size: 13px;
        }
        .el-select-dropdown__item.is-selected { color: var(--apple-blue) !important; font-weight: 700 !important; }
        .el-select-dropdown__list { padding: 6px 0 !important; }
        .el-picker-panel { border-radius: 14px !important; }
        .el-loading-mask { background-color: rgba(255, 255, 255, .72) !important; }
        .el-loading-spinner .path { stroke: var(--apple-blue) !important; }

        /* ---- 10. 分页 / Tabs / Descriptions / Upload / Empty / Alert ---- */
        .el-pagination {
            --el-pagination-hover-color: var(--apple-blue);
            --el-pagination-button-bg-color: transparent;
            --el-pagination-button-disabled-bg-color: transparent;
            margin-top: 14px;
            justify-content: flex-end;
            font-weight: 600;
            column-gap: 6px;
        }
        .el-pagination .el-pager li,
        .el-pagination button,
        .el-pagination .el-input__wrapper {
            border-radius: 10px !important;
        }
        .el-pagination.is-background .el-pager li,
        .el-pagination.is-background .btn-prev,
        .el-pagination.is-background .btn-next {
            background: var(--apple-surface-2) !important;
            border: 1px solid var(--apple-hairline);
            border-radius: 10px !important;
        }
        .el-pagination.is-background .el-pager li.is-active {
            background: var(--apple-blue) !important;
            border-color: var(--apple-blue) !important;
        }
        .el-tabs__header { margin-bottom: 16px !important; }
        .el-tabs__item {
            font-size: 14px !important;
            font-weight: 600 !important;
            color: var(--apple-text-2) !important;
            height: 40px !important;
            line-height: 40px !important;
        }
        .el-tabs__item.is-active { color: var(--apple-blue) !important; font-weight: 700 !important; }
        .el-tabs__item:hover { color: var(--apple-ink) !important; }
        .el-tabs__active-bar { height: 2.5px !important; border-radius: var(--apple-radius-pill) !important; background-color: var(--apple-blue) !important; }
        .el-tabs__nav-wrap::after { height: 1px !important; background-color: var(--apple-hairline) !important; }
        .el-tabs--border-card { box-shadow: none !important; }
        .el-tabs--border-card > .el-tabs__header { background: var(--apple-surface-2) !important; border-bottom: 1px solid var(--apple-hairline) !important; }
        .el-descriptions {
            --el-descriptions-table-border: 1px solid rgba(0, 0, 0, .06);
        }
        .el-descriptions__body {
            background: transparent !important;
            border-radius: var(--apple-radius-sm);
            overflow: hidden;
        }
        .el-descriptions__body .el-descriptions__table { border-radius: var(--apple-radius-sm); }
        .el-descriptions__cell { border-color: var(--apple-hairline) !important; }
        .el-descriptions__label.el-descriptions__cell.is-bordered-label {
            background: var(--apple-surface-2) !important;
            color: var(--apple-text-2) !important;
            font-weight: 600 !important;
        }
        .el-descriptions__content { color: var(--apple-text) !important; }
        /* Upload（当前模板用原生 file input + 直传按钮，此处保留 EP 语言一致性） */
        .el-upload--picture-card,
        .el-upload-dragger {
            border-radius: var(--apple-radius-md) !important;
            border: 1.5px dashed rgba(110, 110, 115, .3) !important;
            background: var(--apple-surface-2) !important;
        }
        .el-upload--picture-card:hover, .el-upload-dragger:hover { border-color: var(--apple-blue) !important; }
        .el-upload-list__item { border-radius: var(--apple-radius-sm) !important; }
        .el-empty { padding: 28px 0 !important; }
        .el-empty__description p { color: var(--apple-text-2) !important; font-size: 13px !important; }
        .el-empty__image { opacity: .92; }
        .el-alert { border-radius: 14px !important; border: 1px solid var(--apple-hairline); }
        .el-alert--info.is-light { background: var(--apple-surface-2) !important; }
        .el-divider { border-color: var(--apple-hairline) !important; }
        .el-result__title p { font-size: 17px !important; font-weight: 700 !important; color: var(--apple-ink) !important; }
        .el-step__title { font-size: 13px !important; font-weight: 600 !important; }
        .el-step__head.is-process { color: var(--apple-blue) !important; border-color: var(--apple-blue) !important; }
        .el-step__title.is-process { color: var(--apple-blue) !important; }
        .el-timeline-item__node--primary { background-color: var(--apple-blue) !important; }

        /* ---- 11. 页面局部组件对齐（v1 遗留的 #409eff 硬编码 → v2 accent） ---- */
        .batch-bar {
            background: var(--apple-blue-soft) !important;
            border: 1px solid rgba(0, 113, 227, .16) !important;
            border-radius: var(--apple-radius-md) !important;
        }
        .batch-bar .batch-count b { color: var(--apple-blue) !important; }
        .media-card.selected,
        .pg-item.main {
            border-color: var(--apple-blue) !important;
            box-shadow: 0 0 0 3px rgba(0, 113, 227, .16) !important;
        }
        .media-card:hover { border-color: var(--apple-blue) !important; }
        .prod-image-box:hover { border-color: var(--apple-blue) !important; background: var(--apple-blue-soft) !important; }
        .pg-badge { background: var(--apple-blue) !important; }
        .admin-loading-spinner {
            border-color: rgba(0, 113, 227, .14) !important;
            border-top-color: var(--apple-blue) !important;
            width: 34px !important; height: 34px !important;
        }
        a.link { color: var(--apple-blue); }
        .step-num { background: var(--apple-blue) !important; box-shadow: 0 2px 8px rgba(0, 113, 227, .25) !important; }
        .thumb-img { border-radius: var(--apple-radius-sm) !important; }
        .mono, .recent-item .order-no { font-variant-numeric: tabular-nums; }

        /* ---- 12. 品牌 / 标题图标（emoji → Font Awesome，仅文本节点） ---- */
        .installer-header h1 .fa-solid { color: var(--apple-blue); margin-right: 8px; }
        .panel-title > span { gap: 8px; }
        .prod-image-empty .fa-solid { margin-right: 5px; }

        /* ---- 13. 缩略图加载失败兜底 --------------------------------------
           数据库里存在指向已删除文件的图片（历史用例造数残留），前端会渲染成
           浏览器默认的"碎图"图标 —— 视觉上像页面坏了。所有 `<img :src>` 单元格
           都挂了 v-on:error 兜底：把 src 换成占位图并加 .img-broken 降饱和，
           看起来就是"暂无图片"，而不是"页面出错"。
           注意 dataset.fb 守卫：占位图自己也加载失败时不会无限重试。
           ⚠️ 本样式块位于 Blade 的 verbatim 区块**之前**，属真正会被编译的区域：
              注释里**绝对不能**出现任何以 at 符号开头的 Blade 指令名
              （error / verbatim / endverbatim / if / php … 都不行）。
              连注释文字也会被 Blade 当指令解析 → 轻则 ParseError 整站 500，
              重则把 `<body>` 到文件尾整段吞进 verbatim（属性原样吐出、脚本读不到）。 */
        .thumb-img.img-broken,
        .poster-img.img-broken {
            filter: saturate(0);
            opacity: .55;
        }


/* ===================== 电子围栏工作台（系统设置-派单设置） ===================== */
.geo-studio { display: flex; flex-direction: column; gap: 10px; width: 100%; }
.geo-studio-toolbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.geo-studio-map {
    height: 460px;
    width: 100%;
    border-radius: 12px;
    overflow: hidden;
    border: 1px solid var(--el-border-color-light, #e4e7ed);
    box-shadow: 0 2px 10px rgba(16, 24, 40, .06);
}
.geo-search-results {
    border: 1px solid var(--el-border-color-light, #e4e7ed);
    border-radius: 10px;
    background: #fff;
    max-height: 220px;
    overflow-y: auto;
    box-shadow: 0 6px 18px rgba(16, 24, 40, .10);
}
.geo-search-item {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 9px 12px;
    cursor: pointer;
    border-bottom: 1px solid var(--el-border-color-lighter, #f0f0f0);
}
.geo-search-item:last-child { border-bottom: none; }
.geo-search-item:hover { background: #f5f7fa; }
.geo-search-name { font-size: 13px; font-weight: 600; color: #303133; flex-shrink: 0; }
.geo-search-addr { font-size: 12px; color: #909399; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.geo-mode-panel {
    display: flex;
    flex-direction: column;
    gap: 8px;
    width: 100%;
    padding: 10px 12px;
    background: #f7f8fa;
    border-radius: 10px;
}
.geo-mode-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.geo-mode-label { font-size: 13px; color: #606266; }
.geo-mode-tip { font-size: 12px; color: #909399; }

/* ===================== 电子围栏：已保存围栏（只读信息区） =====================
   展示数据库里上一次保存的围栏参数 + 最后保存时间；与当前表单不一致时标「有未保存的修改」。
   刻意做成独立卡片而不是 el-alert：.geo-mode-panel 里的第一个 .el-alert__title 被
   geo_map_test 当作「中心：lat, lng（中文地址）」断言，这里不能再塞 alert 干扰它。 */
.geo-saved {
    width: 100%;
    padding: 10px 12px;
    margin-bottom: 2px;
    background: #f0f7ff;
    border: 1px solid #cfe4fb;
    border-radius: 10px;
}
.gs-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: 13px; color: #1B5FB0; font-weight: 600; }
.gs-head .gs-title { font-weight: 600; }
.gs-head .gs-at { font-size: 12px; font-weight: 400; color: #606266; }
.gs-head .gs-dirty { margin-left: 2px; }
.gs-rows { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin-top: 6px; font-size: 12px; color: #606266; }
.gs-rows .gs-item b { color: #1D1D1F; font-weight: 600; }
.gs-rows .gs-item-sub { color: #909399; }

/* ===================== 系统设置：通知配置折叠块（邮件 / 短信） ===================== */
.settings-collapse { width: 100%; border-top: none; }
.settings-collapse .el-collapse-item__header {
    height: auto; min-height: 44px; padding: 6px 4px; line-height: 1.5;
    font-size: 14px; font-weight: 600; color: var(--apple-text);
}
.settings-collapse .el-collapse-item__wrap { border-bottom: none; }
.settings-collapse .el-collapse-item__content { padding: 4px 0 14px; }
.settings-collapse .sc-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.settings-collapse .sc-head .sc-icon { color: var(--apple-blue); }
.settings-collapse .sc-head .sc-name { font-weight: 600; }
.settings-collapse .sc-head .sc-sub { font-size: 12px; font-weight: 400; color: var(--apple-text-2); }

/* ===================== 图库：左侧文件夹树（资源管理器式） ===================== */
.media-layout { display: flex; align-items: flex-start; gap: 14px; }
.media-side {
    flex: 0 0 220px; width: 220px; max-width: 220px;
    box-sizing: border-box;
    padding: 10px 8px;
    background: var(--apple-card);
    border: 1px solid var(--apple-border);
    border-radius: var(--apple-radius-md);
    max-height: 720px;
    overflow-y: auto; overflow-x: hidden;
}
.media-side-head {
    display: flex; align-items: center; gap: 6px;
    padding: 2px 8px 8px; font-size: 12px; color: var(--apple-text-2);
}
.media-tree { display: flex; flex-direction: column; gap: 2px; }
.mt-node {
    display: flex; align-items: center; gap: 6px;
    padding: 6px 8px; border-radius: 8px;
    font-size: 13px; color: var(--apple-text);
    cursor: pointer; min-width: 0;
    transition: background .15s ease, color .15s ease;
}
.mt-node:hover { background: rgba(64, 158, 255, .08); }
.mt-node.on { background: rgba(64, 158, 255, .14); color: #1B5FB0; font-weight: 600; }
.mt-node .mt-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-node .mt-count {
    flex-shrink: 0; font-size: 11px; color: var(--apple-text-2);
    background: var(--apple-bg-deep); border-radius: 999px; padding: 0 6px;
}
.mt-node.on .mt-count { background: rgba(64, 158, 255, .18); color: #1B5FB0; }
.mt-arrow {
    width: 12px; flex-shrink: 0;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: 10px; color: var(--apple-text-2);
    transition: transform .15s ease;
}
.mt-arrow.open { transform: rotate(90deg); }
.mt-arrow-empty { visibility: hidden; }
.mt-icon-all { color: var(--apple-blue); flex-shrink: 0; }
.mt-icon-folder { color: #F0A020; flex-shrink: 0; }
.mt-empty { padding: 14px 10px; font-size: 12px; line-height: 1.7; color: var(--apple-text-2); }
.media-main { flex: 1 1 auto; min-width: 0; }
@media (max-width: 900px) {
    .media-layout { flex-direction: column; }
    .media-side { width: 100%; max-width: none; flex: none; max-height: 300px; }
}

